Agora: The Story of the Simplest MOP in the World - or - The Scheme of Object-Orientation

Agora: The Story of the Simplest MOP in the World - or - The Scheme of Object-Orientation by Wolfgang De Meuter on Agora, a highly encapsulated prototype-based programming language developed 1994 - 1998 at the Programming Technology Lab of the Vrije Universiteit Brussel, Belgium

This paper discusses the design and implementation of the Agora lan-
guage. Many ideas behind Agora come from Scheme, to our opinion, still
one of the pearls of programming languages.

The most prominent ideas of Scheme are 1) Everything is a rst class
value, 2) Scheme programs look the same as Scheme data structures, 3)
Function application and special form application are the only control
structures, and 4) The language can be extended by writing new special

One of the contributions of Agora is to transform these features into
object-orientation. 1) In Agora, everything is an object. 2) Agora pro-
grams themselves are nothing but objects, the data structures of Agora.
3) The only control structures of Agora are messages and `rei er mes-
sages', the object-oriented analogue of special forms. 4) Agora can be
easily extended by writing new rei er messages.

We will show that all these Agora characteristics are an immediate
consequence of its extremely simple meta-object protocol (MOP).

I was surprised that Agora hasn't been mentioned before on LtU before, at least I haven't found any mention using the side-wite search or Google. The language's approach to controlled dynamic object extension is certainly interesting, as is the general approach of trying producing a minimal "kernel language" in the vain of Scheme for objects. Research on Agora seems to haved stopped, though.

Update: Missing URL corrected.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

missing url

Nested Mixin-Methods in Agora

Related, an oldie but goody:

Mixin-based inheritance is an inheritance technique that has been shown to subsume a variety of different inheritance mechanisms. It is based directly upon an incremental modification model of inheritance. This paper addresses the question of how mixins can be seen as named attributes of classes the same way that objects, methods, and also classes in their own right, are seen as named attributes of classes. The general idea is to let a class itself have control over how it is extended. This results in a powerful abstraction mechanism to control the construction of inheritance hierarchies in two ways. Firstly, by being able to constrain the inheritance hierarchy; secondly, by being able to extend a class in a way that is specific for that class. Nested mixins are a direct consequence of having mixins as attributes. The scope rules for nested mixins are discussed, and shown to preserve the
encapsulation of objects.

I've been playing around with exclusive inheritance in my latest language. Basically, you can specify that two mixins cannot be extended together. Combine that with dynamic inheritance and you have something really interesting.