However, I'm really beginning to wonder if all this effort is worth the fuss. Java isn't a language for high performance numeric computing, and probably never will be. I hang out with a lot of scientists and engineers doing heavy duty numerical computations; and when they ask me about Java, nine times out of ten I tell them to stick with C or Fortran. C and Fortran are excellent languages for numerics, and most issues with those languages can be addressed in revisions like C9X. I just don't see that Java's benefits are strong enough to get anyone working in high performance computing to pay the performance penalty Java exacts.
Furthermore, any changes to make Java more suitable for numerics would likely make it less suited for other uses. For example, consider operator overloading. Numerical modellers really, really want this. And it does indeed make sense for some of their common problems like complex arithmetic and some (not all) kinds of matrix algebra. However, there are probably less than two dozen cases where operator overloading really fits the problem space in an obvious way, where the standard arithmetical operators like +, -, /, and * have clearly defined and well understood meanings. As soon as you've exhausted those cases, you find yourself trying to figure out what some contractor who left your company two years ago meant when he took the remainder of two database records, or something else equally obscure. Numerical analysts may need operator overloading, but it's an absolute disaster for the rest of us who have to maintain non-numerical code.
Java started out as a small, secure, easy-to-use language for embedded systems. It does not need to be and indeed should not and cannot be all things to all people. The quest for the perfect language is pointless, and only leads to abortions like ADA. We need different languages for different jobs. Some of these languages may even sit on top of a Java VM. It would not be unreasonable to design a new Java like language that supports operator overloading and write a compiler for it that compiles to Java byte codes. In fact, several groups are already working on languages like this. And it's even reasonable to design a new VM with stronger support for IEEE 754 features not supported by Java like exceptions and traps. And I know at least one group working on this. But please, if you do design an extended language or VM, don't mess up Java for the rest of us by forcing your extensions into the base specification.
Version 4a of the MkLinux JDK 1.1.6 is now available with assorted bug fixes.
Sun's posted version 0.99 of the JavaBeans Extensible Runtime Containment and Services Protocol (BeanContext) specification and version 0.96 of the Drag and Drop specification. I also noted that Sun has decided to at least postpone the JavaBeans Object Aggregation/Delegation Model. It is no longer part of Glasgow and will not be part of JDK 1.2.
widefp
and strictfp
keywords to
Java 1.2 goes some distance toward addressing concerns
about Java floating point performance
on X86 and PowerPC chips that Jerome Coonen brought up in
January, 1997. However, William Kahan, one of the chief architects
of the IEEE 754 specification, thinks
they don't go far enough.
double x = (Math.PI * 7.8) / (3.3 * 0.1);
Java requires all intermediate calculations to be done with exactly
64 bit IEEE 754 doubles. Higher precision doubles like those supported on the
X86 and PowerPC chips may be used, but only if they're immediately rounded to
64 bits before being used in further calculations. The alternative is to do all the calculations
higher precision, then round the result. In other words, Java requires compilers to do this:
temp1 = 3.3 * 0.1; round temp1 to 64 bits; temp2 = Math.PI * 7.8; round temp2 to 64 bits; x = temp1/temp2; round x to 64 bitsinstead of this:
temp1 = 3.3 * 0.1; temp2 = Math.PI * 7.8; x = temp1/temp2; round x to 64 bits
Exactly how that translates into assembly code varies from chip to chip. All the rounding steps can be skipped on a Sparc which never uses more than 64 bits in the first place, but those steps are very necessary on an X86 or a PowerPC. In essence, users of the higher precision X86 and PowerPC chips are limited to the accuracy supported by Sun's Sparc family. Furthermore, X86 and PowerPC chips actually have to spend extra clock cycles rounding their higher precision results to the lower precision values. Sparcs always work in the lower precision mode so they don't have to use these extra cycles.
My main need to get this question answered was to confirm or correct my impression that X86 chips didn't support IEEE 754 before I wrote about it in my next O'Reilly book. It turned out my impression was wrong so it was a good thing I asked. X86 chips do support IEEE 754. In fact, they support it more fully than Sparcs do, though not as well for Java's purposes. Along the way I learned a lot more about floating point arithmetic, and I'll write about some of the other things I learned here soon. Several people responded to my query, but the first response came from Chris Ellis, so he gets a copy of JavaBeans just as soon as he sends me his snail mail address.
Judge Ronald Whyte, who is refereeing the legal pissing match between Sun and Microsoft, has appointed retired California state court judge John A. Flaherty as the special master to oversee public release of sealed court documents
In the latest legal sparring, Microsoft is claiming that Sun knew that Microsoft's Java did not pass Sun's tests in May, 1998 when Sun accepted a $3.75 million license payment from Microsoft, and that this invalidates claims of copyright infringement. Furthermore, Microsoft is claiming that their Java passes all mutually agreed to tests, and that Sun changed the tests on them to check for JNI.
Sun's posted the second beta of Swing 1.1 on the Java Developer Connection. Version 1.1 Beta 2 features faster internal-frame dragging, faster keyboard input, a new HSB color chooser, assorted other optimizations, many bug fixes, and a few new APIs including an HTML package with most of HTML 3.2 and assorted improvements with tables and non-English text. This version works with JDK 1.1.
Taylor Computing's JMangle is a free, JFC based Java .class file obfuscator.
The Standard Performance Evaluation Corp. (SPEC) has released SPECjvm98, a $100 benchmark of Java performance based on eight "real world" tests. It's allegedly less spoofable than CaffeineMarks. The tests include
Baseline performance is 1.0 on an IBM 133 MHz PowerPC 604 with 96 MB of RAM running AIX 4.1.3 and JDK 1.1.4 without a JIT. The current top score is 18.0 on a Sun Ultra 60 Model 1360 with 256 megabytes of RAM and the JDK 1.2 production early access release. However, this is likely to change as other VMs get tested.
Sun's posted the second early access release of the Java Wallet on the Java Developer Connection. Java Wallet is designed to enable secure electronic commerce transactions. It includes Commerce JavaBeans, the Java Commerce Client, the Smart Card API, and the Secure Sockets Layer (SSL) 3.0 export version. EA2 adds Wallet database, a transaction log, enhanced browser interaction, and a serverized architecture (whatever that means).
From what little information Symantec has released, this seems to be a classical computer virus that's transmitted by sharing and running infected applications. (Applets can catch the virus but cannot pass it on when run from inside a web browser.) Long term, however, these sorts of viruses have the possibility to become particularly nasty since they have at least the potential to run and infect across platforms.
com.sun.java.swing
fiasco was a direct result of IBM pressuring
Sun. Allegedly IBM has a lot of code that relies on that name,
and nobody over there knows how to use Perl to make the updates.
(It seems a little implausible, but you never know.)
Thus although a recent JavaWorld poll showed that more than three quarters
of Java programmers prefer the java.swing
package name, in JDK 1.2beta4
Sun reverted to com.sun.java.swing
package name originally
used in JDK 1.1.
Now Sun is proposing
a third solution, javax.swing
. Contrary to what Sun
says, it's really not hard to maintain source code that compiles to
both versions. It's easy to import both java.awt.swing.*
and
com.sun.java.swing.*
with a minimum of help from the class library.
However, binary compatibility is a real issue
since fully package qualified names are included in the .class files.
javax.swing
should work better because it can be used in both Java 1.1
and 1.2 provided the right version of Swing is installed.
Comments are
requested by August 28.
IBM's Alphaworks has released version 1.2 of the Skij Scheme interpreter . Skij can be thought of as a scripting language for Java. Version 1.2 of Skij features faster file loading which is also more transparent to the user.
Alphaworks has also posted new releases of their High Performance Compiler for Java, a Java to native executable compiler for AIX, OS/2, and Windows 95/NT; version 12h for Windows NT and AIX and version 12b for OS/2.
Alphaworks has also released a new version of RDF for XML, an implementation in Java of the RDF XML application for describing, categorizing, rating, and searching data. This update corresponds to the latest W3C RDF draft specification and works with alphaworks' XML for Java 1.0.4.
Finally, alphaworks has also updated their IRC Client for Java with various bug fixes.
The show is mostly Windows with a smattering of Unix. Aside from my PowerBook, there are no Macs to be seen. They're a lot of smaller development tools vendors here but the large ones (Microsoft, Inprise, Symantec, Metrowerks) are conspicuous by their absence. Microsoft did send a number of employees to attend the conference and give talks though.
There hasn't been anything incredibly interesting here in and of itself though. yet. Jakob Nielsen of the Neilsen-Norman Group gave an interseting key note this morning. On the exhibit floor the KL Group's JProbe looked interesting, but at $499 it seemed vastly overpriced. Even more overpriced was Parasoft's $3000 JTest white box tool for testing Java classes. They had some interesting ideas (though they wouldn't go into too many details about exactly how JTest does what it does), but they didn't seem like anything an enterprising shareware programmer couldn't duplicate in a week or two for a lot less money (hint, hint).
line.separator
?".
This page contains a listing of the values of the Java system properties
("os.name", "line.separator", etc.) for various VMs and platforms. This allows you to
determine exactly which platform, or
which type of platform, your application is running on.
Submissions for additional platforms are encouraged.
Bill LaForge has updated coins, his free XML based scheme for serializing Java objects, a whole lot of times since the last time I mentioned it here. The latest release includes support for aggregation and a real cache, but there've been lots of other improvements too over the last several weeks.
cHotEqn is a nifty free component from Stefan Muller that displays TeX-like equations.
Live Software posted the first public preview release of JRun 2.2 (PR 2), a free servlet engine for Mac web servers.
Chris Kelly released JConfig 1.2, a native class library for Win 95/98/NT, MacOS, and Unix that allows you to work with files, web browsers, processes, file types, and other system-level items in a much more advanced manner than that provided by the standard Java class libraries. For instance, JConfig allows you to list the mounted hard drives, obtain icons for files, launch URLs in the user's Web browser, find applications associated with a given file type or extension, and so forth. The runtime is free. The Java and C++ source code to JConfig may now be licensed.
IBM's alphaworks has released a new version of its RDF for XML software written in Java. This RDF processor builds, queries, and manipulates RDF structures, and it serializes and deserializes them to and from XML forms.
The book covers in the left hand column are an experiment. Let me know if they caues you any problems such as making the page load noticeably slower.
One big problem with this release is that dialog boxes are not backwards
compatible with Java 1.0. Java 1.0 applets that use the Dialog
class
will not run in Netscape 4.0.6. Once again, developers are
forced to write different versions of applets for different browsers.
FreeBuilder 0.7.3 has been released. Free Builder is an integrated development environment (IDE) for Java and Pizza applications and applets. It is written entirely in Java and is ment to be a platform and OS independent IDE.
The mailing list page has been updated.
I've posted answer's for the latest Cafe au Lait Question of the Day below. There'll be a new question on Monday.
Sun's Java Dynamic Management Kit 3.0 (DMK) is now in semi-private beta. DMK allows developers to create dynamic agents for network, system, application, and service management.
IBM's alphaworks has updated JAX, a Java application packaging tool that reduces the size of a Java application by removing code that isn't used by the application. This release allegedly makes still smaller archives. IBM claims 30%-50% reduction of executable size.
Alphaworks has also updated Install Toolkit for Java, a free Java application for creating installer programs which are themselves Java programs and can install both Java and non-Java programs. This release fixes various bugs and should be more reliable.
Sun's released version 1.0 of the Java Message Service (JMS) specification.
EarthWeb, owner of developer.com, has filed for a $34.5 million dollar IPO.
IBM's alphaworks has posted a bug fix release, 1.0.4, of their XML for Java validating parser. This does NOT conform to the 19980720 DOM draft.
The third beta release of JDK 1.1.6 for Linux is now available for X86 and PowerPC.
Sun's released beta 4 of JavaPC to registered members of the Java Developer Connection. JavaPC is a set of software for converting legacy DOS based 486 PCs into Java based network computers. This beta improves configuration options and enhances support for local applications and local file systems.
Sun's also posted beta 4 of the Java Accessibility Utilities 1.2 on the Java Developer Connection. This release requires JDK 1.2beta4.
Cayenne Software's ObjectTeam is an object oriented modeling and design tool for Linux that features a UML class diagram editor, code generation for C++ and Java, and reverse engineering of C++ and Java code. It's free for personal use. Versions are also available for Windows NT, Windows 95, Solaris, AIX, Digital Alpha, and HP-UX, though these are payware. severely crippled demo is available for Windows 95 and NT. I wish I'd known about this before I wrote my latest onIine course (Design Patterns, now in beta testing at Digital Think) and did all the diagrams by hand.
Sunsite Sweden is now mirroring Cafe au Lait.
Metrowerks has released
version
3.1 of the Code Warrior IDE. This version features
bug fixes to the IDE and the debugger.
Metrowerks has also released
MW Debug 1.7.5a1,
an unsupported version of the CodeWarrior Pro
2 debugger that allows debugging of Java code using MRJ versions 2.0,
2.1ea1 (with the debugging patch) and later early-access versions of 2.1.
It should not be used with CodeWarrior Pro 3.
Sun's also posted early access release 2 of
JavaHelp 1.0
on the Java Developer Connection. This release works with
both Java 1.1 and 1.2 and the Swing 1.1 beta. It also adds support for
context-sensitive help, merging, and better full-text
search.
Furthermore, Sun's posted a beta of
JFC
with Swing 1.1,
again only on the Java Developer Connection.
They've also released the first version of the
MacOS Look and Feel
for Swing. Hopefully, Apple learned its lesson from the
debacle of its suit against Microsoft several years ago,
and has gotten over its
penchant for attacking companies that imitate its look and feel
in court.
Sun's also released a new (July 1998)
version of the Beans Development Kit (BDK) 1.0
ons their main web site (not the Java Developer Connection). This release fixes a few bugs and
adds support for InfoBus aware beans.
Finally, Sun's posted
beta 1 of the Java Communications API
(which was preceded by three early access releases)
for Solaris and Windows on the Java
Developer Connection. This API allows Java applications to
talk to the serial and parallel ports.
Jackson Libri has published
Java Network Programming
in Italian (ISBN 88-256-1440-3, 65,000 lira).
The release dates for Macintosh Runtime for Java have
slipped again. According to MacInTouch the new dates are
Jon Meyer of the NYU Media Research Lab is studying how people draw using computers.
He's written a simple Java
drawing applet to conduct part of the study on the web.
If you are interested in being a test subject (and assuming you know how
to use simple vector-based drawing programs :-), please visit
http://www.cat.nyu.edu/draw
and follow the instructions.
IDG's posted
Pushing Web Sites with CDF,
Chapter 10 of XML: Extensible Markup
Language.
Contrary to the credits on that page,
this chapter was primarily written by Wanda Jane Phillips of Write Livelihood.
amazon.com
seems to have the entire book back in stock.
Current position in the amazon bestseller list is 4,030.
System.in
) in
Macintosh Runtime for Java (MRJ) 2.0.
This means MRJ 2.1 will definitely not be part of MacOS 8.5
this fall.