Re: design question about "programming to interfaces"
Lew wrote:
Removing types from Java, quite aside from making the language not be
Java, would complicate all sorts of other things that types and
type-safety make possible, much less easier.
Tom Forsmo wrote:
Could you explaining in more detail all the things that would complicate
it, because the one example you gave as an oppositional argument I seem
to have mentioned in my previous post.
Consider an object in a typeless language like VBscript or Javascript, with
the pseudo-syntax:
v = "some string";
print v;
v = 143.5;
print v;
v = new { a="String element", b=16 };
print v.a, v.b;
Being untyped, v could be assigned an unexpected type occur at the wrong time
in a program, say in a function that has a bug,
v = "string when structure was still expected";
The caller might try to dereference v after the function,
print v.b;
and blow up. This can be very tricky to debug, since the reassignment could
have occurred in just about any part of the program. In a typed language, the
type mismatch occurs at compile time, before the program is deployed to
production and is therefore much easier to debug.
That's just one representative example.
Java was designed to be type-aware from the beginning; making it untyped would
make it not Java. Sure, there are times when untyped languages are more
convenient; that's why they exist. For large applications type-aware
languages are very helpful. That's part of why C++ has gained traction over
C, and why C# and Java are in their ascendancy.
- Lew