Print

Print


http://developer.java.sun.com/developer/onlineTraining/Security/Fundamentals
/Security.html#secIntro

Has one really, really glaring error that's caused significant problems.

There are 2 statements:

Java doesn't have pointers (it has references to do the same job)
and
Ada has pointers

In fact, Ada does NOT have pointers. It has access types to do the same job,
but without the insecurity of pointer arithmetic et al.
In fact, the Java reference construct is the same as Ada's access type.

You can say that "in effect" Ada has pointers, since it has access types
(references) which act the same way but are safe

You can say that Java "in effect" has pointers, since it has references
(access types) that act the same way but are safe.


You can say that Ada doesn't have pointers.
You can say that Java doesn't have pointers.

What you can't do is say that Java doesn't have pointers, but that Ada does.
It's a both or neither deal.

Here are the statements on the page:

For instance, Ada doesn't have the same built-in safety at the language
level (for example, lack of pointers). If Java technology security was
simply a language-level construct, then someone programming in Ada would
circumvent all Java technology security checks.

and

Invalid Memory Access
There are many language features within the Java programming language that
contribute to this [secure] behavior. First and foremost is the fact that
the Java programming language does not let you perform pointer arithmetic.
This is perhaps the most important language feature that contributes to the
Java language's safety, since it is pointer arithmetic that leads to
accessing inappropriate memory areas, which leads to runtime crashes.  Not
permitting pointer arithmetic is not saying the Java programming language
doesn't support pointers. In fact pointers in the Java programming language
are called references, and they are fully supported. The existence of
reference variables allows you to create data structures like linked lists,
binary trees, or any other where you would normally think of using a pointer
variable in a language like C or C++.

These two statements taken together, are just plain untrue.