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