whoami: Waarom denk je dat? Is dat niet een beetje voorbarig? Waarop baseer je die mening?
Op de keiharde en vervelende realiteit. Ik vertel dit niet omdat ik .NET irritant vind of wat dan ook, sterker nog: ik vind .NET fantastisch. Een grondige analyse van de verschillen in aanpak tussen het Java Platform en .NET zorgen echter voor pijnlijke conclusies....
Lees maar mee

.
whoami: Als ze dat voor .NET Moeten doen, hebben ze dat toch voor Java ook moeten doen?
Er is een belangrijk verschil tussen de huidige Java 2 Runtime Environments en de .NET CLR van Microsoft: Bij Java zijn zoveel mogelijk libraries volledig platform-onafhankelijk geimplementeerd (bijvoorbeeld Swing, XML libraries). De libraries van Java bevatten dus maar heel weinig platform-specifieke code. Veel van de libraries van .NET (WinForms en ADO .NET bijvoorbeeld) zijn echter gewoon een view op de al lang bestaande native onderdelen.
Het porten van de .NET WinForms komt in feite neer op het porten van de MS Windows GUI libraries naar andere platformen. Voor een deel kan dit platform-onafhankelijk, maar dat is simpelweg nog niet gebeurd.
Het volledig implementeren van de libraries moet gewoon ontzettend veel werk zijn. In feite komt het er naar mijn mening gewoon op neer dat je een bestaand platform ombouwt naar MS Windows. Bovendien moet je dan nog maar eens zorgen dat alles compatible is. Gruwelijk veel werk dus.
AWT, de platform specifieke GUI toolkit van Java is maar zeer beperkt. Het bevat alleen wat simpele TextFields, Labels, List, Checkboxen etc. De functionaliteit is voor de meeste applicaties volstrekt ontoereikend en daarom is er Swing. Swing is in principe in 100% Java geimplementeerd en is dus bruikbaar op alle platformen als er maar een JVM is. Overigens kan je in Swing ook native code gebruiken. Voor de J2RE van MacOS X hebben ze bijvoorbeeld een native Look and Feel voor Swing gemaakt.
Mono schiet inderdaad totaal niet op. De ideeen zijn heel leuk maar het kernwoord voor succesvolle platform-onafhankelijk is
>libraries<. Uiteraard moeten deze libraries echter ook nog compatible zijn en als ik zie dat Mono werkelijk elk detail opnieuw gaat implementeren houd ik daarvoor mijn hart vast. Vergeet niet dat het grootste deel van de .NET libraries helemaal niet gestandaardiseerd is!
Het bouwen van een C# compiler en een jitter is geen enkel punt. Dat kan iedereen wel met wat inspanning en ervaring. Maar daar hebben we in de praktijk helemaal
niets aan.
Moet je voor de grap eens Mono downloaden en kijken wat ze al geimplementeerd hebben. Kijk dan ook eens in de source en schrik je te pletter: alles is zelf geschreven en er is nog vrijwel niets af. Logisch.
Alleen een project wat volledig door Microsoft wordt gesteund met zowel informatie als grote hoevelheden developers kan ooit een succesvolle en volledig implementatie maken die op kan tegen het .NET Framework voor MS Windows.
Merk je overigens hoe slim de aanpak is? Ze maken een platform-onafhankelijk view op hun eigen libraries en verklaren die view platform-onafhankelijk. Ze hebben nu zonder al te veel moeite een zeer goede implementatie en ze kunnen voorlopig andere besturingssystemen de schuld geven van het gebrek aan een goede .NET implementatie.
.NET is mooi voor MS Windows ontwikkeling, maar voorlopig vind ik zowel de samenwerking tussen paradigma's als de platform-onafhankelijkheid grote sprookjes.
Over die samenwerking tussen paradigma's nog iets grappigs: zoals je wellicht weet zal er waarschijnlijk een Haskell compiler voor IL komen. Je kunt dan dus vanuit Haskell de .NET libraries gebruiken. Haskell is echter een pure functionele taal. Dit betekent dat er bijvoorbeeld geen 'state' is. Niets in Haskell heeft bijvoorbeeld side-effects. Alles is een functie. Neem nu eens een procudure. Een procedure heeft geen resultaat en is dus alleen zinvol als die procedure side-effects heeft. De .NET library barst uiteraard van de procedures. Nu moet je vanuit Haskell dus procedures gaan gebruiken!

Voorlopig moet ik dat dus eerst nog zien en zorgvuldig beoordelen.