"Pete Becker" <> wrote in message
news:X92dnUR-AbGxRs7fRVn-...
> If you like the myth of "write once, run anywhere," use Java and learn
> to love the undocumented changes in behavior.
Certainly Java has no inline assember <g>, and Java has not 100% achieved
the goal of write once, run anywhere. However, Java has made a major effort
to remove things like implementation defined and undefined behavior from the
language, and as a result it is intrinsically much more portable than C++.
For example, Java has a defined order of evaluation of the components of an
expression. Therefore, if those components have side effects, the expression
will behave the same on different platforms. C++ does not, it's
implementation defined, and the expression may behave differently, even
using the same compiler (just by changing optimization switches).
The reason for this flexibility in C++ is to allow more opportunities for
optimizing an expression. But I've written an advanced optimizer for both
C++ and Java compilers, and switching the "reorder the expression even if it
has side effects" has no discernible advantage for real code.
C++ would benefit from a pass through the spec and revisit each
implementation defined and undefined behavior, to see if they are still
justifiable given today's compiler technology rather than yesteryear's.
Fixing the spec won't break existing code if that code is written to avoid
relying on undefined and implementation defined code anyway <g>.
And can't C++ just say that shorts are 16 bits? Does anyone care about
programming the PDP-10 in C++? (I personally have a big soft spot for
the -10, but let's face it, it's been obsolete for 20 years.) Anyone have 18
bit shorts on the CPU drawing table? I'd be shocked if there was.
-Walter
www.digitalmars.com free C, C++, D compilers