Sponsor: Sun Microsystems
We are exploring the performance advantages to be gained through compilation of persistent programming languages.To this end, we are extending the Digital Systems Research Center implementation of Modula-3 to allow programmers to specify and manipulate persistent data more easily and efficiently. Persistent roots are simply designated global variables that act as handles on root objects in persistent storage. All objects reachable from a persistent root also persist. We overload Modula-3's traced pointers so that they may refer to persistent data, even if that data is not yet resident in memory. Because pointers are traced, the reachability of data from a persistent root is easily determined (similarly to the way the garbage collector determines reachable, non-garbage data).
A shortcoming (from the point of view of persistence) of the current Modula-3 implementation is its use of conservative garbage collection, which unnecessarily restricts dynamic object management. Thus, a first phase of our implementation was to modify the Modula-3 compiler to generate sufficient information to perform accurate garbage collection. Static tables generated by the compiler now accurately describe the location of object pointers in the thread stacks. We are currently evaluating the performance of this implementation and comparing it with the original conservative implementation.
In subsequent work, we are extending the Modula-3 type system to allow static annotations to be attached to pointer types indicating their potential compiler optimizations for persistence, without meeting to implement the full optimizations directly (along with the necessary data-flow analyses).