Via een weblog op www.servlets.com vond ik een linkje naar een boeiend artikel, wat de intermediate languages van het Java Platform en .NET vergelijkt.
Dit artikel is een wetenschappelijke publicatie en kan daarom als vrij objectief en onafhankelijk worden beschouwd. Het is geschreven door Prof. John Gough. Die als missie van het leven heeft: "To explore strange new compilation optimisations. To go where no compiler-writer has gone before. And now ... to make the Faculty's budget balance!". Dat belooft wat
.
Lees het artikel dus maar snel
: Postscript, PDF.
Het artikel plaatst het fenomeen IL en bytecode in beide platformen in een goed perspectief, waardoor je wellicht meer zult begrijpen van de gedachten hierachter. Een heel rijtje voorgangers van dergelijke aanpakken worden bijvoorbeeld kort besproken. Je zult zien dat deze technieken al een tijd uitgeprobeerd is in vele varianten...
De auteur schrijft zijn verhaal naar aanleiding van zijn ervaringen bij het schrijven van een compiler voor Component Pascal, in Component Pascal
. De compiler bevat twee code-emitters: voor Java Bytecode en .NET IL.
Er wordt in niet al te lastige bewoordingen wat uitgelegd over het executie-model van de beide platformen. Java bytecode wordt kort, leuk, maar duidelijk besproken. Bij de bespreking van de .NET IL komen enkele interessant, subtiele verschillen naar voren met vrij grote gevolgen.
Bij de vergelijking wordt allereerst een interessante opmerking gemaakt over het 'niveau' van de intermediate talen. Vaak is er namelijk al opgemerkt dat het wellicht beter zou zijn voor multi-language support als de beide talen meer low-level zouden zijn. Het belangrijkste argument hiertegen is dat bij het uitvoeren van de code er dan vrijwel geen mogelijkheid meer is voor controle op type-safety. Dit is uiteraard een belangrijke feature in beide VMs.
De belangrijkste conclusie van het stuk is dat het duidelijk is dat de ontwikkelaars van de .NET IL gekozen hebben voor volledige just-in-time compilatie naar native code. De .NET IL kan een stuk minder goed geinterpreteerd worden, wat wellicht een nadeel kan worden voor embedded-systems en de opstarttijd van applicaties.
Op het laatste wordt er nog gesproken over multi-language support naar aanleiding van de Component Pascal compiler. Het belangrijkste punt van kritiek is het ontbreken van reference parameters in de Java bytecode. Dit veroorzaakt voor het compileren veel talen onacceptabele performance problemen.
Het merkwaardige is nu echter dat de .NET IL geen support heeft voor convariante return typen (een return type wat specifieker is dan gespecificeerd door de superklasse of interface). Dit is 1 van de meeste gevraagde features voor de taal Java. In 1.5 zal dit worden toegevoegd aan de taal Java, maar er is nu al een prototype compiler voor Java Generics die coveriante return typen support. Het is wel merkwaardig dat .NET niet gelijk gekozen heeft voor covariante return typen. Wellicht dat de aangekondigde Generics voor C# (die doorgevoerd zullen worden tot de kern van .NET ) in de volgende major update van .NET ook gelijk covariante return typen zullen leveren.
Al met al wel een aardig stuk om te lezen, maar niet erg diepgaand voor een wetenschappelijk stuk naar mijn mening.
Ik kan voorlopig niet reageren, dus verwacht even geen antwoorden, discussie of wat dan ook van mij
Dit artikel is een wetenschappelijke publicatie en kan daarom als vrij objectief en onafhankelijk worden beschouwd. Het is geschreven door Prof. John Gough. Die als missie van het leven heeft: "To explore strange new compilation optimisations. To go where no compiler-writer has gone before. And now ... to make the Faculty's budget balance!". Dat belooft wat
Lees het artikel dus maar snel
Het artikel plaatst het fenomeen IL en bytecode in beide platformen in een goed perspectief, waardoor je wellicht meer zult begrijpen van de gedachten hierachter. Een heel rijtje voorgangers van dergelijke aanpakken worden bijvoorbeeld kort besproken. Je zult zien dat deze technieken al een tijd uitgeprobeerd is in vele varianten...
De auteur schrijft zijn verhaal naar aanleiding van zijn ervaringen bij het schrijven van een compiler voor Component Pascal, in Component Pascal
Er wordt in niet al te lastige bewoordingen wat uitgelegd over het executie-model van de beide platformen. Java bytecode wordt kort, leuk, maar duidelijk besproken. Bij de bespreking van de .NET IL komen enkele interessant, subtiele verschillen naar voren met vrij grote gevolgen.
Bij de vergelijking wordt allereerst een interessante opmerking gemaakt over het 'niveau' van de intermediate talen. Vaak is er namelijk al opgemerkt dat het wellicht beter zou zijn voor multi-language support als de beide talen meer low-level zouden zijn. Het belangrijkste argument hiertegen is dat bij het uitvoeren van de code er dan vrijwel geen mogelijkheid meer is voor controle op type-safety. Dit is uiteraard een belangrijke feature in beide VMs.
De belangrijkste conclusie van het stuk is dat het duidelijk is dat de ontwikkelaars van de .NET IL gekozen hebben voor volledige just-in-time compilatie naar native code. De .NET IL kan een stuk minder goed geinterpreteerd worden, wat wellicht een nadeel kan worden voor embedded-systems en de opstarttijd van applicaties.
Op het laatste wordt er nog gesproken over multi-language support naar aanleiding van de Component Pascal compiler. Het belangrijkste punt van kritiek is het ontbreken van reference parameters in de Java bytecode. Dit veroorzaakt voor het compileren veel talen onacceptabele performance problemen.
Het merkwaardige is nu echter dat de .NET IL geen support heeft voor convariante return typen (een return type wat specifieker is dan gespecificeerd door de superklasse of interface). Dit is 1 van de meeste gevraagde features voor de taal Java. In 1.5 zal dit worden toegevoegd aan de taal Java, maar er is nu al een prototype compiler voor Java Generics die coveriante return typen support. Het is wel merkwaardig dat .NET niet gelijk gekozen heeft voor covariante return typen. Wellicht dat de aangekondigde Generics voor C# (die doorgevoerd zullen worden tot de kern van .NET ) in de volgende major update van .NET ook gelijk covariante return typen zullen leveren.
Al met al wel een aardig stuk om te lezen, maar niet erg diepgaand voor een wetenschappelijk stuk naar mijn mening.
Ik kan voorlopig niet reageren, dus verwacht even geen antwoorden, discussie of wat dan ook van mij
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment