4 ms·
Ditto. Strong types, bounds checking, and after Java 1.1, recursive nesting of program components. More than Microsoft, I think Java killed Borland. Java had
by Roboprog 11y ago
Ditto. Strong types, bounds checking, and after Java 1.1, recursive nesting of program components.
More than Microsoft, I think Java killed Borland. Java had no IDE back in 95/96, but the compiler was free and it also ran on Linux, which Borland was late to adopt.
... then Anders went to work for Microsoft, and the rest is tragedy.
- AnimalMuppet 11y agoI keep seeing that "strong types" comment here. In what sense are Java types "strong" and C++ types "weak"?
- ajuc 11y agoFor one example: float a = 1.0; // compilation error in java, no problem in C++ For another: int a[5] = { 0, -1, 2, 3, 4 }; (1+a) = 1; // :) Also: assert( !(1/2) ); Also: enum Foo {A, B}; enum Bar {C, D}; Foo e1 = A; Bar e2 = C; int i = 0; assert(e1 == e2); // warning assert(e1 == i); //no problem whatsoever
- AnimalMuppet 11y agoI'd argue that in the case of your first example, C++ is correct. Promoting int to double in this case does not bother me whatsoever. (In fact, mathematically, an integer is a real, though the reverse is not always true. I will concede that the others are problematic...
- ajuc 11y agoIn 1 the problem is silently discarding double precision to float precision. I edited the example to be less confusing.
- AnimalMuppet 11y agoAh. Yes, I was confused; I thought the issue was the promotion of the 2 from int to floating point.
- ajuc 11y agoAlso I made an error - should have been *(1+a) = 1; Still bad but not as bad.
- AnimalMuppet 11y agoOr: 1[a] = 1;
- AnimalMuppet 11y agoAfter thinking about it a bit, that also is well-typed in C. (You can argue that it shouldn't be allowed, but that's a different argument than that the language is not strongly-typed because of that feature.)