Oh, en Java is zeker geen slap aftreksel van C++. Nogal slap argument van die man.
Inderdaad, java is GEEN slap aftreksel van C++. Java heeft veel technieken en syntax-elementen 'geleend' van allerlei talen, waaronder C++, maar is daardoor geen 'slap aftreksel' maar juist een betere taal geworden. Een soort 'best-of'.
Nu hebben alle talen wel hun voor- en nadelen en dus ook Java, en er is altijd wel iets te vinden waar de ene taal beter geschikt voor is dan de andere. Java heeft zich echter zeer sterk gefocused op veiligheid en platform-onafhankelijkheid. Dus als Microsoft dan een taal 'bedenkt' die wel heel veel op Java lijkt maar waarvan de veiligheid 'optioneel' wordt en de praktische platform-onafhankelijkheid op zijn minst twijfelachtig te noemen is, zijn de opmerkingen van James Gosling niet zo vreemd en m.i. dan ook volledig correct, ongeacht het feit dat hij gezien zijn achtergrond niet geheel objectief zal zijn.
Een van de belangrijkste tekortkomingen van Java is simpelweg dat pointers missen. Sommige algoritmes kunnen nou eenmaal wel een 10x speedup krijgen door het direct kunnen gebruiken van pointers. Java zal nooit interessant worden voor applicaties die die snelheid nodig hebben.
De relatie tussen pointers en snelheid zie ik niet helemaal, maar goed... de manier waarop een ontwikkelaar een bepaald algoritme codeert is m.i. bijna altijd van doorslaggevende factor voor de performance.
Java heeft in principe inderdaad geen pointers maar alleen object-referenties. Die intern natuurlijk gewoon als pointers geimplementeerd zijn, maar het verschil is dat ze niet door de code gemanipuleerd kunnen worden, en dat zowel de initieele class-compiler als de runtime hardware abstraction layer (de java VM dus) controleert of de operaties die m.b.v. de object-referentie worden uitgevoerd, wel geldig zijn. Veiligheid dus, en koste van slechts een klein beetje run-time performance.
Want vergis je niet, met de nieuwste JIT-compilers doet de performance van Java niet meer onder voor die van C++ of andere talen. Niet alleen wordt er door de JIT on-the-fly assembly code gegenereerd die razendsnel is en logischerwijs niet onderdoet voor code die bv C++-compilers hadden kunnen maken (met enkel de eenmalige runtime overhead van de java JIT-compiler), doordat de JIT-compiler run-time kan optimaliseren wordt er tegenwoordig zelfs code gegenereerd die vaak optimaler is dan compile-time machinecode ooit had kunnen zijn! Java kan dus sneller zijn dan C++ code, en ik heb dat zelf ook al diverse malen in de praktijk meegemaakt (zowel in real-world apps als in 'wedstrijdjes').
Plus daarbij nog eens de enorme verbeteringen die de JIT-compilers de laatste jaren hebben doorgemaakt, waarbij diverse algoritmes bepalen wanneer en zelfs of het nut heeft een stuk java byte-code daadwerkelijk runtime naar machine-code te compilen, waardoor naast de optimale gegenereerde machinecode ook nog eens het JIT-compile proces zelf enorm is verbeterd en veel minder vertraging oplevert dan in de begindagen van Java.
C# ondersteund default geen pointers en is dus net zo veilig als Java. Echter als men voor een bepaalde functie pointers wil gebruiken om een enorme snelheidswinst te behalen, dan kan men deze functie als unsafe betitelen. Dan zijn pointers beschikbaar. Da's even een heel wat ander verhaal dan deze persoon staat op te hangen.
Een keten is zo zwak als de zwakste schakel, en de introduktie van een zeer zwakke schakel maakt de taal/technologie er dus niet betrouwbaarder op. Ja, gebruik van unsafe modules is in principe een keus die de ontwikkelaar niet hoeft te maken, maar het grote probleem is dat er in zeer veel gevallen vanwege al bestaande unsafe modules, talen of OS toch unsafe code gebruikt zal gaan worden. En aangezien Microsoft er nu eenmaal voor gekozen heeft dat compatibiliteit met bestaande talen en modules nu eenmaal belangrijker is dan veiligheid, komt dat er in de praktijk dus neer dat de ontwikkelde .NET applicaties niet veilig zullen zijn.
Net zoals veel java-apps, zolang ze niet continu worden getest op meerdere platformen of browsers, na verloop van tijd toch platform- of browser-afhankelijk zijn geworden, zo zal ook .NET code als vanzelf onveilig zijn.
En ook al zijn alle .NET ontwikkelaars in een team goed op de hoogte van veiligheids-issues (wat in de meeste gevallen m.i. niet het geval zal zijn; er zijn nu eenmaal veel onervaren ontwikkelaars), gebruik van verschillende modules en talen door elkaar bevordert de security nu eenmaal niet echt, en bovendien, een foutje is snel gemaakt. .NET applicaties zullen dus van nature al veel onveiliger zijn, en ondanks de maatregelen die een ontwikkelteam mogelijkerwijs neemt altijd verdacht blijven vanwege de
mogelijkheid van unsafety, zowel in de door het team ontwikkelde als in de bestaande/externe modules.