11.07.2015 Aufrufe

Übersetzung von OO-Sprachen

Übersetzung von OO-Sprachen

Übersetzung von OO-Sprachen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kapitel 3: Übersetzung <strong>von</strong> objektorientierten <strong>Sprachen</strong>// Übersetzung durch den Kompiler inkl. eingefügter Castspublic static void main(Object args){Box b1 = new Box((Object)“Meine Box”);String s = (String)b.getContents();Box b2 = new Box((Object)new Integer(3));Int i = (Integer)b2.getContents();}Listing 9: Homogene ÜbersetzungListing 9 zeigt exemplarisch eine homogene Übersetzung, bei der der Compiler zuallererst Datentypen in der Klasse Box durch den allgemeinen Datentyp Object ersetztund beim Instanziieren automatische Casts beim Übergeben und Zurückgeben <strong>von</strong>Objekten einfügt. Der Nachteil dieser Casts ist, das während der Ausführung keineInformationen zu Klassennamen, z.B. anhand des instanceof Operators, zur Verfügungstehen, da diese aufgrund der Type Erasure nicht vorhanden sind [ACS02, S. 2].Zusammenfassend kann gesagt werden, dass bei der heterogenen Variante eineSpezialisierung vorgenommen wird und bei der homogenen Übersetzung eineVerallgemeinerung erfolgt [OW97, S. 1].3.4.2 Echte generische VarianteDie echte generische Variante, die bei C# zum Einsatz kommt, verfolgt einengegensätzlichen Ansatz. Im Vergleich zu Java wurde bei der Einführung <strong>von</strong>Generizität die Common Language Runtime (Vgl. Kapitel 3.1) verändert und umgenerische Typen erweitert. Ein Nachteil der echten generischen Variante ist, dass neuegenerische Klassen in den .NET-Libraries nicht rückwärtskompatibel zu ihren nichtgenerischen Varianten sind, wobei die nachfolgenden Vorteile dieser konsequentenVorgehensweise sicher überwiegen dürften.Bei der Einführung <strong>von</strong> generischen Typen direkt in die Common IntermediateLanguage wurden umfangreiche Änderungen am JIT-Compiler, dem Compiler selbstsowie an Typloadern und Metadaten vorgenommen. Daraus ergeben sich viele neueMöglichkeiten in Bezug auf eine effiziente Umsetzung. Die Common LanguageRuntime verwendet dabei eine Mischung aus homogener und heterogener Übersetzung.Die Instanziierungen generischer Konstrukte erfolgen bei Bedarf zur Laufzeit durch denJIT Kompiler. Durch diese Lazy Specialization wird Zeit und Speicherplatz gespart, daausgeschlossen werden kann, dass Zielcode generiert wird, der letztendlich nichtausgeführt werden wird.19

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!