|
NIC-Serie Band 28:
Integration von Programmiersprachen durch strukturelle Typanalyse und partielle Auswertung
Jörg Striegnitz
ISBN 3-00-016006-X
Juni 2005, 306 Seiten
PDF
|
Die Wahl einer Programmiersprache ist häufig vom zu lösenden Problem motiviert
(z.B. objektorientierte Sprache für verteilte Systeme, funktionale Sprache für
Übersetzer, logische Sprache im Bereich der künstlichen Intelligenz). Im Extremfall
kann es sich sogar lohnen, für ein Softwareprojekt eine neue, problemspezifische
Sprache (engl.: domain specific language) zu entwerfen.
Bei größeren Softwareprojekten kann es sich anbieten, einzelne Module in der
Programmiersprache zu implementieren, die für den Einsatzzweck des Moduls am
besten geeignet ist. Dies wirft natürlich sofort die Frage auf, wie man diese
Module zu einem kohärenten, funktionierenden und effizienten Gesamtsystem
verbindet.
Diese Dissertation beschäftigt sich mit einem Spezialfall der Sprachintegration:
der Einbettung einer Gastsprache in eine Wirtssprache und schlägt ein neues Verfahren
zur Spracheinbettung vor, welches auf struktureller Typanalyse und partieller
Auswertung beruht.
Im ersten Teil dieser Arbeit werden drei Modellsprachen eingeführt, die unseren
Ansatz zur Spracheinbettung unterstützen. Die Eigenschaften dieser Sprachen werden
ausführlich erklärt und es wird untersucht, welche Restriktionen sie der Gastsprache
auferlegen.
Es wird sich zeigen, daß sich viele Konzepte der Modellsprachen in C++ simulieren
lassen und diese sich damit auch zur Erklärung der Phänomene der
C++-Template-Metaprogrammierung eignen.
Im zweiten Teil dieser Dissertation wird die Tragfähigkeit unseres Integrationsansatzes
an einem praktischen Beispiel untersucht: der Integration einer funktionalen Sprache mit
verzögerter Auswertung, garbage collection und algebraischen Datentypen in C++.
Es wird sich herausstellen, daß unsere Einbettungstechnik das Erzeugen von effizientem
Programmcode erlaubt, der sogar mit etablierten Haskell-Übersetzern mithalten kann.
Am Beispiel der Optimierung von endrekursiven Aufrufen, einer Optimierung, die von den
meisten C++-Übersetzern nicht vorgenommen wird, wird klar, dass sich der Ansatz auch
zur Implementierung von domänenspezifischen Optimierungen eignet.

|