Agora: The Simply Complex Programming Language
To truly understand Agora, one has to travel through time and space to the computer and programming landscape of the 1980s and 1990s. Most programming languages were procedural. One object-oriented programming language, Smalltalk, was created in the 1970s, and universities delved into how object-oriented programming worked. Additionally, two other areas of exploration in programming were a reflection, the ability to inspect and modify the internal workings of a programming language, and minimalism, having a simple and easy-to-understand syntax. This is where Agora got its start at the University of Brussels. Researchers Dr. Patrick Steyaert, Wim Codenie, and Koen De Hondt were trying to answer, as fellow Agora researcher, Wolfgang De Meuter, put it, “can we reach the same complexity of other languages” with the simplest language? Could Agora be object-based, reflective, and minimalist?
Since object-oriented programming was such new and limited examples of what it looked like or could be, Agora was based on an extension of the original object-oriented language, Smalltalk. SmallTalk revolutionized programming. It used icons representing objects that programmers could open and explore the existing methods and classes associated with those objects. Instead of memorizing methods for different objects and instances of those objects, those same methods could be displayed in lists for users to choose from. SmallTalk was so helpful that it became the basis on which Agora was built. When Steyaert first created Agora (known as Agora94), it worked within the SmallTalk framework and could communicate with Smalltalk. SmallTalk worked via message-passing, meaning that the user could send messages for an object to perform; Agora took that same programming style. Essentially three types of messages could be sent. First unary, such as sending the object 5 the method factorial to perform. Thus the program would compute 5! = 120 — operator messages, which causes an interaction between two objects. For example, adding one string to another to make a compound word. Lastly, keyword messages would change the nature of an object through reification. Message passing was the first of many ways that Agora accomplished its simplicity because “objects… only understand send,” which was the function that passed the information and arguments to the objects, according to De Meuter’s summary work “Agora: The Story of the Simplest MOP in the World-or-The Scheme of Object-Orientation.”
Reflection and Reification
Agora was created to include reflection and reification to increase the complexity of objects and allow the language to compete with the more sophisticated programming languages of its day, such as C++, Scheme, and others. The issue of reification is that if the interpreter itself is an object that the code could manipulate, there needs to be another interpreter to interpret the newly changed interpreter. This would create a need for a “tower of interpreters,” as described in depth in the monumental paper “Reificaion: Reflection without Metaphysics” by Friedman and Wand. Friedman and Wand, in a way, solved the need for the tower through their paper, and Agora borrowed from that in their language and reification messages. While Friedmand and Wand could accomplish a refined reflection and reification for the functional & procedural language, LISP, SmallTalk and Agora were the first object-oriented programming languages to accomplish reflection. According to the official Agora website, instead of using parenthetical notation like LISP, Agora uses bold-faced words in earlier versions, such as Agora94.
Conclusion and the Decline of Agora
When the Agora team set out, they wanted to create a seemingly simple language that could compete with the more complex languages of the day. In an interview with Wolfgang De Meuter, he said that other languages out there did one aspect, such as reflection or message-passing, well, but the team at the University of Brussels wanted to combine these aspects and make them function better than what was available at the time. As shown above, Agora did accomplish its goal of being a simplistic/minimalist language, with minimal types of messages to be passed, reflective, and object-oriented. Additionally, the language is complex due to its reflection and use of mixin methods. De Meuter said that C++, the most popular language, had some quirky syntax they hoped to avoid in Agora.
Lastly, Wolfgang De Meuter wrote several papers and developed Agora96 and Agora98. This is to say that Agora was simply a research language and never crossed over into mainstream usage. De Meuter even noted in our conversation that when he attempted to write additional works based on Agora, editors and publications would ask why he was still working with Agora when Java came out in 1995 and quickly became adopted in the programming community. De Meuter attempted to keep Agora relevant by connecting Agora to Java. According to the Agora98 website, “Agora98 is implemented in Java and allows full access to the underlying Java structures” (emphasis theirs) and allowing Agora to be used through a web browser. Despite his advancements with the programming language, De Meuter could not stem the tide of adoption of Java as the then king of programming. With the predecessors, Steyaert and Doenie and others, of Agora having graduated and moved on to other endeavors and De Meuter not getting any traction academically through exploring Agora, Agora became a dead programming language with Agora98 despite its simplistic complexity.