This page is made by Rainer Blome (blome at de dot ibm dot com).
Sadly, the old home of this page doesn't host it any more
(http://www.physik3.gwdg.de/~rainer/comp/lang/object-based.html).
Object-based PLs
Also commonly called Prototype-Based Languages. I prefer the term object-
based because that's what they are. Other names for this type of object are
frame and exemplar (see the chapter on Exemplar-Based Programming in Coplien's
Advanced C++ Programming Styles and Idioms).
What follows is an almost alphabetical listing of the languages of this class
that I know of (and are visible on the web).
- Prototype Based
Object-Oriented Programming
- Deja News Query
Profile on prototype-based
Self
- The prototype itself.
- Self
- The bestest programming system in existence. outdated?
See
Release
- Release 4.0
- Stunning. Megacool. Open since July 10, 1995. A must for anybody with a
fast Sun at hand.
- An
FTP site in Europe
- After I had to fetch it a second time due to an accident during installatio
n (SUN NFS couldn't cope when there was not enough space left, it got so stuck,
we had to delete the directory tree.), I backed it up on the next FTP server
before trying again. Actually, I gzipped it first, to conserve about five megs
of space. Since the sysop was so kind to permanently install it, germans might
consider to get it from here.
Writings
- Papers
- Not just about Self but valuable for your OO programming abilities in
general.
- Self Tutorial
- "Mango - A Parser Generator for Self"
- I love this thing. The Parser is an object ("just as the grammar is" -
wishful thinking that was. The grammar is NOT an object, it is written in a
modified BNF form. I am just trying to fix that.). If anybody so much as
hears of anything like this for lisp, don't hesitate to tell me!
People
- Urs
Hoelzle
- Mark
Theiding
- implements customization for C++. He used to study in Göttingen.
- Craig Chambers
- David
Ungar
- Karel
Driesen
- Archive of Self Mailing List
-
Squeak
- http://www.squeak.org
Agora
- Agora the Langu
age
- Agora FTP site
- From the VU Brussels. They have a concept they call `reifier'.
`meta-message' (or `meta-object'?) might be another word to call them. They
reify (part of?) the meta-level in the laguage level. C's `typedef' keyword is
an excellent example.
- Patrick
Steyaert's Dissertation
- Amulet
- Amulet is the C++ version and successor to Garnet, also being developed at
CMU (see below). It is a portable user interface development environment
featuring "a prototype-instance object model, constraints, high-level input
handling including automatic undo, and a full set of widgets."
Cecil
- Cecil/Vortex
Project at Univ.of Washington
- A pure OOL with multi-methods, a prototype-based object model, computed
inheritance, module-based encapsulation, and allows to mix statically- and
dynamically-typed code. They now have an initial beta release of the system
available for SPARCs running SunOS 4.1.
- Cecil/Vortex Papers
- Cecil
paper: "Object-Oriented Multi-Methods in Cecil"
- cf generic functions
- Cecil paper:
"Whole-Program Optimization of Object-Oriented Languages"
Garnet
- Garnet
entry in the AI Repository
- Garnet is a complete (the best?) GUI package for Common Lisp systems, based
on a prototypical object system and constraints. It is available for Mac and
Unix and independent of CLOS.
- Garnet FTP site
- Ga
rnet FAQ
- Amulet Garnet (Rhodolite)
Gemology and Lore
- Rhodolite garnet is distinguished from others of the Garnet family by its
pink-violet to purple-red color.
- Brad Myers
Glyphic Script
- Codeworks -- Introduction
- Codeworks is a very small, yet powerful, interactive object oriented
development environment. The included Glyphic Script programming language I
really like, it is like Self with a little variation in the direction of Common
Lisp. Someday I'll make a complete list of differences, here's just a
taste:
o Ability to write receiver and message selector in either order (Depends on
WYSIWYG formatting, I really like that. Some special character syntax might be
used for text devices.)
o Positional arguments in addition to keyword ones
o Keyword arguments may be written in any order.
o Methods accept less than the defined arguments -> optional args (`Wrong
number of args' errors must be explicitly enforced. I think they should be the
default instead.)
Since it is interpreted, it is a lot slower than Self, of course. But it runs
on small computers. Unfortunately, only a Mac version is available now, but
they plan to port to Windows and Unix.
- Glyphic Technology
Corporation
- What's New and Points
of Departure
- See
Mark with CU-SeeMe
Javascript
- Documentation:
JavaScript
- JavaScript
Semantics Experiments
Kevo
- Directory of
/pub/kevo
- Excerpt from the README: Kevo is a prototypical (= classless)
object-oriented system built around a straightforward multitasking threaded
code interpreter.
The system has been implemented to experiment with a new kind of an object
model that is based neither on conventional inheritance nor delegation (a la
Self). Instead, Kevo uses _concatenation_: unrestricted composition of object
interfaces.
Syntactically the language resembles Forth, but is far more advanced in many
respects. An integrated Macintosh Finder -like iconic object browser is
provided for object inspection, definition and manipulation. Currently, only
the Macintosh version of Kevo is available publicly.
- Directory
cs.uta.fi/pub/kevo/Papers
- There's also a paper about the related Forth issues
- Lua
- Since there is no fixed definition of the term ``prototype-based language''
(yet), one can never be sure whether a language is prototype-based. But Lua at
least comes close. Associative arrays (aka. frames) are a built-in type. They
are (of course) dynamically extensible, and you can put methods in there,
too.
Quoting from the manual:
Lua is an extension programming language designed to be used as a configuration
language for any program that needs one.
Lua is a dynamically typed language. [...]
The type table implements associative arrays, that is, arrays that can be
indexed not only with numbers, but with any value (except nil). Therefore, this
type may be used not only to represent ordinary arrays, but also symbol tables,
sets, records, etc. To represent records, Lua uses the field name as an index.
The language supports this representation by providing a.name as syntactic
sugar for a["name"]. Tables may also carry methods. Because functions are first
class values, table fields may contain functions. The form t:f(x) is syntactic
sugar for t.f(t,x), which calls the method f from the table t passing itself as
the first parameter.
Merlin
- Jecel's
- Jecel's Bookmarks
- The
Merlin System
- Integrates the OS with the PL used to implement the OS. Since its
implementation is completely open, it is fully reflective.
- Little
Deadlocks
- A cute story about the history of Merlin's concurrency model.
- Merlin's Adaptive
Compilation
- Bootstrapping Merlin
Moostrap
- Moostrap
- This article by Philippe Mulet and Pierre Cointe describes Moostrap, a
language based on behavioral reflection and concatenation, implemented in
Scheme. Its full title is:
Definition of a Reflective Kernel for a Prototype-Based Language
Moostraps meta-object protocol is determined by the (fixed) decomposition of
message sending into a lookup and an apply phase. Meta-objects are also used
to associate atomic objects with their methods, which enables one to change
even their behavior.
- Article
FTP Directory of Philippe Mulet
- Langages de
prototypes et réflexion
- The research group of Pierre Cointe at EMN
- EMN Département
Informatique
- L' Ecole de Mines de Nantes
- EMN References '94
- Soutenance
thèse Philippe Mulet
- Invitation to Philippe Mulet's thesis defense``Reflexion et Langages a
Prototypes'', with a short summary (in french).
- Ultimardrev-Self
- An implementation of Self with behavioral reflection in Smalltalk.
[Link is defunct]
- Prototalk
(ftp via http at LIRMM)
- Prototalk is a Smalltalk platform to test and evaluate prototybe-based
languages.
NDim
- NDim
- The n-dim
project (obsolete?)
- BOS/stitch- toolkit used to
build ndim
Newton Script
- Apple's Newton system is the most modern computer system on the market,
I'd say: It deals with removable devices, doesn't use a filesystem, copes with
extremely limited resources (almost all of the firmware is compressed,
dynamically decompressed versions are cached in RAM) and uses a very
sophisticated dynamic language.
NewtonScript, the Newton's language, was expressedly inspired by Self. It
features prototypes and double prioritized delegation.
All objects have exactly two inharitance slots, delegation goes depth-first
first into the 'is-a'-slot, then into the 'is-in' slot (there's almost) no
formal difference b/w the two except priority. I call it is-in because it is
intended to be used as a link of some (graphical) object to its container. It
may thus inherit e.g. background color or position.)
The other formal difference between is-a and is-in slots provides for a form of
copy-on-write semantics which can be very handy when RAM is severely limited.
- Walter
Smith's Publications
- See here for articles about NewtonScript and the Newton OS.
- OOPSLA 95 Article (local copy)
- The title is "Using a Prototype-based Language for User Interface: The
Newton Project's Experience". This copy is gzipped to save 90% bandwidth.
- Fundamentals
of NewtonScript
Interesting
Features
- foreach
with Slot Names
- foreach with Frames
- Multilevel
Slot Creation
- Coll, but doesn't this invite bugs?
- Creating
Slots
- Path
Expressions
- Walter Smith's
Home Page
- Steve Weyer's
Newton Releases
- He offers a programming environment that runs on the Newton Message Pad
itself.
- Interview with Steve
Capps
Apple's FTP Server
- These links are not maintained any more, but still seem to work.
- The Newton
Operating System
- The Newton
Application Architecture
- Describes NewtonScript, the Newton's language.
- SELF and the Origins of
NewtonScript
- The World of
Newton
Obliq
- Obliq
- is a new language being developed at DEC, prototype-based, with distributed
lexical scoping and concurrency. Beautifully simple, if you ask me.
- DEC SRC - Research: Programming Languages
- Home of Luca Cardelli, creator of Obliq.
- Ambit
- Luca
Cardelli
- Luca Cardelli -
HotPage
Omega
- uses objects as types. Objects cannot be modified once created (but you
can replace them with a modified copy).
- Omega
- is available for Macs.
- Günther
Blaschek
- has written Omega.
- Andreas
Frick
- uses Omega in Karlsruhe.
OScheme
- OScheme
overview
- OScheme prototype-based
object model
- It isn't really prototype-based, p. are just one of the primitive types
available.
- OScheme secure mode description
- OScheme Help
[local]
- Boehm's GC
for C and C++
- Koala at
Bull
- SK8
- As far as I know, this project has been cancelled.
SK8 is an OO programming environment being developed at Apple ATG. Excerpt
from the page:
[It] is designed for rapid development of customizable and extensible media
authoring tools and titles. It is not a product.
Alas, they don't say anything about the object technology there. The only
thing discernible is that it seems to use delegation for inheritance
("parents").
- ECOOP'96 Workshop on
Prototype Based Object-Oriented Programming
- The Silver Bullet
of Language Design
- -- Proposal for a Reflective Prototype-Based Compiler
My first article, a position paper presented at the ECOOP '96 Workshop on
Prototype-Based Object-Oriented Programming.