Reflection - Agora language

Tom Mens
Fri, 25 May 2001 09:55:36 +0200


On the website
you mention the programming language Agora for its reflective capabilities.
Here is more background information about the language.

Agora has been developed at the Programming Technology Lab of the Vrije
Universiteit Brussel, Belgium during the years 1994 - 1998. Currently it is
no longer under active investigation. The (outdated) website can still be
found at

Agora is a reflective prototype-based object-oriented programming language
that is entirely (and solely!) based on message passing. Message passing is
considered as one of the fundamental characteristics of object-oriented
programming languages. It lies at the heart of late-binding polymorphism
which is the key feature that makes incremental modification of programs
possible. However, prototype-based languages often go beyond message
passing. Deep down in their implementation, many things such as delegation,
encapsulation, cloning and object concatenation can be found as explicit
operations on objects. By making such languages reflective, these
implementation operators also become visible to the programmer. As such, the
programmer can easily bypass the message passing paradigm just by 'going
meta'. Also, very often, these operators are an explicit feature in the
language, even when reflection is not a language feature. We claim that
these explicit operators on objects is the source of encapsulation problems,
over-flexibility and the reason why it is so difficult to make abstractions
in (reflective) prototype-based languages. We therefore designed Agora as a
prototype-based object-oriented programming language whose only operation on
objects is message passing. Agora shows that even within these limits, it is
possible to build a full-fledged object-oriented language that features
inheritance, cloning and reflective operators. The idea is that an object is
fully encapsulated and can only be subject to message passing. But seen from
the inside of the object, the object knows all about it's own structures. It
is therefore perfectly capable of cloning and extending itself. This is
accomplished by special methods we call cloning methods and mixin-methods.

Relevant Publications about Agora:

@InProceedings{Steyaert:Marriage:95, author = "Steyaert,Patrick and De
Meuter,Wolfgang", title = "{A Marriage of Class- and Object-Based
Inheritance Without Unwanted Children}", editor = "Olthoff,Walter", number =
952, series = "Lecture Notes in Computer Science", pages = "127--144",
booktitle = "ECOOP '95 - Object-Oriented Programming", year = 1995,
publisher = "Springer-Verlag", note = "Proceedings of the 9$^{th}$ European
Conference on Object-Oriented Programming. Aarhus, Denmark, August 1995." }

@TechReport{DeMeuter:Agora:96, author = "De Meuter, Wolfgang and Mens, Tom
and Steyaert, Patrick", title = "{Agora: Reintroducing Safety in
Prototype-based Languages}", institution = "Programming Technology Lab,
Vrije Universiteit Brussel

Agora: The Story of the Simplest MOP in the World - or - The Scheme of
De Meuter Wolfgang
Published in Prototype-based Programming, Springer Verlag, 1998. Eds: J.
Noble, I. Moore, A. Taivalsaari

Agora: Message Passing as a Foundation for Exploring OO Language Concepts
Codenie Wim, De Hondt Koen, D'Hondt Theo, Steyaert Patrick
ACM SIGPLAN Notices, 29(12):48-57, ACM Press, December 1994

Modular Inheritance of Objects Through Mixin-Methods
Lucas Carine, Steyaert Patrick
Published in JMLC'94 Proceedings

 Nested Mixin-Methods in Agora
Steyaert Patrick, Codenie Wim, D'Hondt Theo, De Hondt Koen, Lucas Carine,
Van Limberghen Marc
In Oscar M. Nierstrasz, editor, Proceedings of the 7th European Conference
on Object-Oriented Programming, number 707 in Lecture Notes in Computer
Science, pages 197-219, Springer-Verlag, 1993