Object-oriented programming languages have always distinguished between
"primitive" and "user-defined" data types, and in the case of languages
like C++ and Java, the primitives are not even treated as objects,
further fragmenting the programming model. The distinction is
especially problematic when a particular programming community requires
primitive-level support for a new data type, as for complex, intervals,
fixed-pointed numbers, and so on.
We present Kava, a design for a backward-compatible version of Java that
solves the problem of programmable lightweight objects in a much more
aggressive and uniform manner than previous proposals. In Kava, there
are no primitive types; instead, object-oriented programming is provided
down to the level of single bits, and types such as int can be
explicitly programmed within the language. While the language maintains
a uniform object reference semantics, efficiency is obtained by making
heavy use of unboxing and semantic expansion.
We describe Kava as a dialect of the Java language, show how it can be
used to define various primitive types, describe how it can be
translated into Java, and compare it to other approaches to lightweight
objects. |