The Plurix Java Compiler

Typically, compiler construction and Operating System (OS) development are two distinct research areas. We anticipate that a closer cooperation between both can result in synergistic effects.

The Plurix Java Compiler (PJC) transforms Java source texts directly into Intel machine instructions. As PJC is used for OS development we were forced to abandon hardware independence of Java to avoid performance penalties by a Java Virtual Machine (JVM). The compiler is written in Java allowing to bootstrap itself into the emerging Plurix environment. We are aware of other Java compiler projects like Marmot, GCJ, Swift but we needed an integrated solution and were not willing to provide the runtime libraries required by those compilers. The current PJC version does not provide code optimizations but one of our present research goals is evaluating integration aspects between PJC and the persistent DSM environment.


Runtime Structure Generation
As Plurix implements an orthogonal persistent DSM the compiler directly creates runtime structures and code segments in the DSM bypassing the traditional generation of object-, symbol-, library-, and exe-files. No separate linker nor a loader is required. After successful compilation the runtime structures are bound and initialized by the compiler and are readyily for execution.



Although binding is performed statically by the compiler we do not sacrifiy extensibility. Using the bookkeeping of references realized by the backchain concept and a cluster-wide name service we are able to alter or upgrade existing types. We call this extended binding scheme adaptive linking.


Persistent Symbol Tables
During the semantic analysis phase the compiler directly registers symbol table entries in the cluster-wide name service. This is achieved by melting compiler scopes with the directory concept. Directories define a scope for their content - classes do the same for their methods and instance variables. Users can browse through the name space and transparently access data, classes, and methods.

The compiler directly operates on the name service resolving names according to the scoping rules of the Java language. Even debugging information is anytime available without distinction of release and debug version like typical in current commercial systems. Persistent symbol tables also simplify the task of separate compilation.




Contact: Michael Schoettner