> >... much-exaggerated claim ... that the Java _language_ is
> >somehow more portable than any other.  It is not.
> Well, in fact it is.  Very little in the Java language is left
> implementation dependent.  Order of expression evaluation? Left to right.
> Size of primitive data?  Completely specified (e.g. 32 bit 2's complement
> for int, etc.)  Parameter passing?  By copy.  Semantics of floating-point
> arithmetic? IEEE-754.  References to uninitialized values?  This can't
> occur.  Character set?  Unicode.

Well, I suppose you are correct--but only for the the platforms that have
JVMs which are not made by Microsoft or HP.  :-)  And which correctly
implement IEEE-754 even if the platform doesn't.  In the points you
mentioned, Java IS more portable than Ada and FAR more portable than C or
C++.  (Except also that Ada's character sets are as clearly-defined as
Java's, and Ada's parameter passing almost as clearly-defined.)

The reason I didn't consider that is that the Java advocates themselves
seem to think of portability in terms of J-Code and the JVM.

> .... API is a different situation; e.g. there have been horror stories about
> the non-portability of the AWT.  And obviously the effects of environment
> inquiry methods depend on the platform.  But as far as the Java language
> semantics are concerned, the designers sought to completely eliminate
> implementation-defined/dependent behavior, and they have come pretty close
> to meeting that goal.

I hadn't thought of this either.  It's a bit misleading to crow about the
portability of a language when almost all programs depend on a "standard"
library that is non-portable.  (In fairness, I've seen lots of UNNECESSARY
implementation-dependencies in Ada programs.)