Compiler für moderne Objekt-orientierte Programmiersprachen generieren Code in einer Plattform-unabhängigen Intermediate-Sprache, die die Konzepte der Quell-Sprache erhält; zum Beispiel können Klassen, Felder, Methoden und virtueller oder statischer Methodendispatch direkt im Intermediate-Code identifiziert werden. Um diesen Intermediate-Code auszuführen, führen aktuelle Implementierungen von virtuellen Maschinen just-in-time (JIT) Compilierung der Intermediate-Sprache durch; das bedeutet, dass die virtuellen Instruktionen im Intermediate-Code zur Laufzeit zu nativem Maschinencode compiliert werden. In diesem Schritt ermöglicht eine deklarative Repräsentation der Konzepte aus der Quell-Sprache in der Intermediate-Sprache höchst effiziente adaptive und spekulative Optimierungen des laufenden Programms, die sonst nicht möglich wären. Im Gegensatz hierzu werden die Konstrukte von Aspekt-orientierten Programmiersprachen - die zu einer besseren "Separation of Concerns" führen - üblicherweise dadurch realisiert, dass sie zu herkömmlichen Intermediate-Instruktionen compiliert werden oder dass sie Transformationen im Intermediate-Code bewirken; dies wird "Weben" genannt. Auf diese Weise bleibt die Semantik Aspekt-orientierter Konstrukte auf der Ebene der Intermediate-Sprache nicht deklarativ erhalten. Durch diese Kluft in der Darstellung Aspekt-orientierter Konzepte im Quell-Code und im Intermediate-Code werden hoch-performante Optimierungen behindert und Eigenschaften eines Software-Entwicklungsprozesses geschwächt, wie Unterstützung beim Debuggen oder die Continuity-Eigenschaft von inkremeteller Compilierung: Eine Modifikation an einem Aspekt im Quell-Code zieht möglicherweise das erneute Weben mehrerer anderer Module nach sich. Um die Sprach-Implementierungstechniken für Aspekt-orientierte Programmiersprachen zu verbessern, wird in dieser Arbeit die Architektur für Aspekt-Sprachen-Implementierungen (englisch Aspect-Language Implementation Architecture, ALIA) vorgeschlagen, welche unter anderem vorschreibt, dass eine Intermediate-Repräsentation existiert, die die Aspekt-orientierten Konstrukte aus dem Quell-Programm erhält. Eine zentrale Komponente dieser Architektur ist das erweiterbare und flexible Meta-Model von Aspekt-orientierten Konzepten, das als Schnittstelle zwischen Front-Ends (üblicherweise ein Compiler) und Back-Ends (üblicherweise eine virtuelle Maschine) von Aspekt-orientierten Sprachimplementierungen dient. Die Architektur und das Meta-Model sind für Java-basierte Sprachen in dem Framework zum Implementieren von Aspekt-Sprachen (englisch Framework for Implementing Aspect Languages, FIAL) beziehungsweise dem Sprachunabhängigen Aspekt-Meta-Model (englisch Language-Independent Aspect Meta-Model, LIAM), das Teil des Frameworks ist, verkörpert. FIAL implementiert generisch Arbeitsabläufe, die von einer Ausführungsumgebung benötigt werden, welche Aspekte ausführt, die mit LIAM definiert sind. Zusätzlich zu der deklarativen Intermediate-Repräsentation von Aspekt-orientierten Konzepten behandelt ALIA - und FIAL als dessen Verkörperung - Join-Points - also Punkte an denen Interaktion zwischen Aspekten und anderen Modulen stattfindet - so, dass sie an eine Implementierung spät-gebunden werden. Analog zu der Objekt-orientierten Terminologie für spät-gebundene Methoden werden Join-Points in ALIA als virtuell bezeichnet. Die deklarative Repräsentation von Aspekt-orientierten Konzepten in der Intermediate-Repräsentation und das Behandeln von Join-Points als virtuell ermöglichen es, neue und effektive Optimierungen für Aspekt-orientierte Programme zu entwickeln. In dieser Arbeit werden drei Instantiierungen von FIAL vorgestellt, die herausstellen, dass eine Integration von Sprach-Back-Ends mit unterschiedlichen Eigenschaften mit dem Framework möglich sind. Eine der Integrierungen unterstützt statisches Aspekt-Deployment und erzeugt Ergebnisse, die vergleichbar mit denen herkömmlicher Weber sind; der gewobene Code kann auf jeder standard-Java Virtual Machine ausgeführt werden. Zwei Instantiierungen sind vollständig dynamisch, wobei eine als portables Plug-in für standard-Java Virtual Machines realisiert ist und die andere als tiefgehende Integration in eine spezielle virtuelle Maschine, die Jikes Research Virtual Machine. Während Steamloom^ALIA, die letztere Instantiierung, nicht portabel ist, ist sie besonders leistungsstark. Der Dispatch von virtuellen Join-Points ist eine Verallgemeinerung des Dispatchs von virtuellen Methoden. Daher werden in Steamloom^ALIA etablierte und ausgefeilte Optimierungstechniken aus dem Bereich des virtuellen Methodendispatchs wiederverwendet. Diese Optimierungen für Aspekt-orientierte Konzepte gehen über die Erzeugung von optimalem Bytecode hinaus. Die Mächtigkeit solcher Optimierungen wird in dieser Arbeit besonders offensichtlich an den Beispielen der dynamischen Eigenschaft cflow Avgustinov2005, die bei der Auswertung eines virtuellen Join-Point-Dispatchs benötigt werden kann, und dynamischem Aspekt-Deployment Mezini2003 - das heißt die selektive Modifikation des Dispatchs von bestimmten Join-Points. Um diese Optimierungstechniken zu evaluieren, wurde in dieser Arbeit ein Benchmark-Verfahren entwickelt, in dem Makro-Benchmarks, also reale Applikationen, verwendet werden. Diese Benchmarks zeigen, dass für beide Konzepte die hier präsentierte Implementierung mindestens etwa doppelt so schnell ist wie aktuelle Implementierungen, die den generierten Bytecode statisch optimieren; in vielen Fällen erreichen die in dieser Arbeit vorgestellten Optimierungen sogar eine Beschleunigung von zwei Größenordnungen für die cflow-Implementierung und sogar vier Größenordnungen für das dynamische Deployment. Die Verwendung von LIAM -Modellen als Intermediate-Repräsentation ist allgemein genug, um Aspekt-orientierte Konstrukte mehrerer Sprachen auszudrücken. Daher profitieren alle Sprachen davon, wenn für gemeinsame Konzepte Optimierungen implementiert werden. Um zu zeigen, dass die Abstraktionen von LIAM ausreichend sind, um als Intermediate-Sprache für mehrere Aspekt-Orientierte Quell-Sprachen zu dienen, wurden automatische Übersetzer von Quell-Code zu LIAM -Modellen für drei sehr verschiedene aber populäre Aspekt-orientierte Sprachen entwickelt: AspectJ, JAsCo und Compose*. Zusätzlich wird die Machbarkeit, von CaesarJ zu LIAM -Modellen zu übersetzen, diskutiert. Die Verwendung eines erweiterbaren Meta-Modells als Intermediate-Repräsentation vereinfacht weiterhin die Definition von neuen Aspekt-orientierten Sprach-Konzepten, wie in dieser Arbeit durch ein Tutorial-artiges Beispiel gezeigt wird, in dem eine Domänen-spezifische Erweiterung der Sprache Java entwickelt wird. | German |