archives

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
forms.

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.

Leveled Garbage Collection

Leveled Garbage Collection by Guanshan Tong and Michael J. O'Donnell:

Generational garbage collection (GGC) is one of the most popular garbage collection techniques. GGC gains a performance advantage by performing minor collections on the younger objects in the heap, reducing the number of major collections of the whole heap. A promotion policy determines when an object moves from the younger generation to the older. The design of GGC has been justified by the plausible assumption that many objects die very young, and a few live a very long time. But, attempts to tune the performance of GGC by adjusting the promotion policy have been disappointing - only the simplest immediate promotion policy has proved attractive. The success of GGC is probably due to simplicity and to avoiding scans of the whole heap, rather than to accurate lifetime predictions.
This paper presents Leveled Garbage Collection (LGC), a new algorithm that is not based on object ages. It uses a heap structure and collection scheme similar to those of generational garbage collectors, and has a non-age-based promotion policy that doesn't promote all of the live objects, but still guarantees ample free space immediately after each garbage collection. By tuning LGC's promotion policy, we can often improve on GGC with immediate promotion.
Performance comparisons show that LGC outperforms GGC with immediate promotion policy in many cases, while losing only slightly on cases favorable to immediate promotion. LGC has a substantial advantage when the heap fits in main memory, and an even greater advantage as the heap gets paged to disk.

Leveled GC is based on a more general heuristic than generational GC, in that it tries to keep as many objects as possible in the nursery because minor collections are so much cheaper. What I found most interesting about this paper is that it scales well with virtual memory, which as we know can degrade performance significantly. They provide benchmarks demonstrating a marked difference when large heap sizes trigger paging (Section 5.2.2). LGC performance is hardly affected, while the runtime of generational GC degrades significantly.