Borneo Language Homepage
Borneo may be on the right track for Java.
New Models for Numerical Computing in the Java Programming Language
Java Grande - ISCOPE 2001 Conference, June 3, 2001
Borneo is a dialect of the Java language designed to have true support
for the IEEE 754 floating point standard.
The design of Java relies heavily on experiences with programming
languages past. Major Java features, including garbage collection,
object-oriented programming, and strong static type checking, have all
proved their worth over many years. However, Java breaks with
tradition in its floating point support: instead of accepting whatever
floating point format a machine might provide, Java mandates use of
the nearly ubiquitous IEEE Standard for Binary Floating Point
Arithmetic (IEEE 754-1985).
Unfortunately, Java's specification creates several problems for
numerical computation. Only a proper subset of IEEE 754's required
features are supported by Java; useful IEEE 754 features are either
explicitly forbidden or omitted from the Java specification. Java does
not allow use of the IEEE 754 recommended double extended format on
the x86. Using the double extended format often protects simple
numerical formulas from floating point anomalies. Strict adherence to
Java's floating point semantics leads to significant performance
penalties on popular architectures, including both the x86 and
To address these problems, the Borneo language changes and extends
Java so that all IEEE 754 features can be expressed and so that new
numeric types can be easily created. Borneo allows either better
hardware use than Java or (nearly) exact reproducibility while in all
cases being predictable.
The Borneo specification document is approximately 130 pages and
includes discussion of changes to Java the language, changes to the
JVM, changes to core API's, and an appendix covering the history of
programming language support for floating point computation.
- Unlike other languages designed to support IEEE 754 features (such
as Modula-3, C99, and RealJava), Borneo does not just add library
functions to set and query the floating point state. Borneo has
scoped language declarations to control the rounding mode, sticky
flags, and trapping status. Lexical scoping permits more
optimizations and makes reasoning about the program easier.
- One major change to Java not directly related to floating point is
Borneo's addition of operator overloading. Besides the ability to
overload existing operators, as in C++, Borneo also lets novel,
user-defined, operators be defined and overloaded.
- Except for some new keywords, Borneo is upwards compatible with
Java. Given a Java class P compiled to bytecode, another Java
class cannot determine whether P was compiled under Borneo
semantics or Java semantics. (Borneo semantics disallow some floating
point optimizations permitted in Java).
Please send any comments on Borneo or corrections (even typos) to firstname.lastname@example.org.
- 1.0.3, under construction indefinitely...
- New quotes from the Star Wars Trilogy and Babylon 5
- Expanded history section, including Java Grande
- Updated operator overloading and value classes
- 1.0.2, August 1998, typo corrections to version 1.0.1, added
Proposal for Extension of JavaTM
Floating Point Semantics, Revision 1
- 1.0.1, June 1998, minor corrections to version 1.0
(removal of typos, etc.)
- 1.0, May 1998, version submitted as a Master's
Project to the Computer Science Division, University of California,
Berkeley, May 22, 1998.
- Why is the language called "Borneo?"
are numerous Java compilers or extensions whose names are inspired by
food or drink (
Besides being slang for coffee, Java is also an island in the
Indonesian island chain. Borneo is the largest island in the
Indonesian island chain and is in fact the third largest island in the
world (only Greenland and New Guinea are larger). Luckily, while I
headed due north of Java, others headed north west and east.
- Is there a Borneo implementation?
No. Unfortunately, it
seems Borneo will remain a language design without an implementation.
Other Languages with interesting floating-point features
How Java's Floating-Point Hurts Everyone
William Kahan and Joseph D. Darcy,
ACM 1998 Workshop on Java for High-Performance Network Computing,
March 1, 1998
Analysis of "Proposal for Extension to Java Floating Point
Semantics, Revision 1",
Joseph D. Darcy and William Kahan,
Java Grande Numerics Working Group meeting, August 7, 1998.
Evolving Java's Floating Point Support: The Good, The Bad, and the
Joseph D. Darcy,
CASCON Conference Toronto Canada, December 2, 1998.
What Everybody Using the JavaTM
Programming Language Should Know About Floating-Point Arithmetic,
Joseph D. Darcy,
JavaOne 2001, June 7, 2001.
Designing Language Support for IEEE 754,
Joseph D. Darcy,
IEEE 754 Revision Committee meeting, October 18, 2001.
Joseph D. Darcy