- Ada 95 is an ISO standard. The language definition has been stable for some time. This means, there is a large body of existing Ada
code available for reuse in applet development. Also, as a standard Ada 95
potentially isolates applet developers from the still-evolving Java VM
definition.
- True compilers for Ada 95 are available for many hosts and
targets, allowing easy reuse of code developed outside the Ada/Java world
for applets, and reuse of code developed under Ada/Java in other
environments.
For example, if you develop a sophisticated game in Ada/Java, one could
then compile it into machine code for an existing game machine for delivery
in a game cartridge. Similarly, if you develop a graphically-oriented
client/server front end in Ada/Java, one could compile it into machine code
for delivery on a floppy disk to run full-speed on a PC that has no Java
capability.
- Ada was developed with many of the same language design
principles that led to Java. Although the developers of Java started with
C++ as their "base language" they made changes where they found C++ to be
lacking. Many of these changes are right in line with Ada's own design
philosophy. [Language Comparison]
Like Ada, Java adopts the philosophy that detecting errors is best done
early:
One reason that dynamic languages are good for prototyping is
that they don't require you to pin down decisions early on. Java has
exactly the opposite property; it forces you to make choices explicitly...
[1]
- Ada has high-level features not found in Java which can
improve productivity and reuse. Ada 95 already has generic templates and
enumeration types, two higher-level features programmers seem to miss when
using Java.
- Ada 95 supports value semantics for object declarations,
assignment, and equality, which minimizes the chance of unintended
aliasing, and simplifies the programmer's job.
- Ada 95 was designed with first-class arrays and records in
mind. In constrast, the Java syntax for treating arrays and records as
"first-class" data types is not ideal, due in part to Java's C++
heritage.
- The Ada 95 data-oriented synchronization building block,
protected types, is significantly easier to use correctly than the
wait/signal paradigm provided by Java.
- Ada supports more "informative" interfaces:
- Ada separates of interfaces from implementations, so you can easily
publish an interface specification for a package/class without having to
extract it from the implementation.
- Ada has explicit in, out, and in out parameter
modes. In Java, all "object" parameters are effectively in out and
all "simple" parameters are effectively in which reduces the
information specified by the interface.
- Ada provides stronger compile-time type checking, including strong type
checking for numeric, pointer, and array types, allowing programmers to
distinguish an "apple count" from an "orange count" and an array indexed by
one from an array indexed by the other.
Ada has an excellent track record for supporting the
development of complex systems. As Web-based applications grow, the
advantages of separate, informative, strongly type-checked interfaces
should become increasingly obvious.
- User-defined operators are available, so the developer can
create complex-number packages, matrix arithmetic packages, etc., and use a
natural infix operator notation for binary operations.
- Ada is well-known as one of the most readable and
"humanly-engineered" of programming languages. Few abbreviations or
special-character combinations are used. All compound constructs have an
appropriate "end" bracket, such as if ... end if,
loop ... end loop, procedure P ... end P.
Single token errors rarely go undetected by the compiler; an extra or
missing ";" or "=" will not produce a legal program with a completely
different meaning. Case statement alternatives do not require a "break" to
end the alternative, thereby reducing the chance for error.
- There is a body of available, mature Ada tools to use.
- Existing Ada 95 training materials and expertise are
immediately reusable in the Ada/Java world.