Inhaltszusammenfassung:
In der theoretischen Betrachtung von Programmiersprachen wird Dualität
als zunehmend wichtig für die Verbesserung der Ökonomie betrachtet,
da diese ermöglicht, die Theorie-Entwicklung für eines von zwei dualen Konzepten
"umsonst" zu erhalten.
Zwei vorherrschende Dualitäten sind die Extensibilitäts-Dualität,
die im Zusammenhang mit dem Expression Problem steht,
und die De Morgan-Dualität, die im Zusammenhang mit Auswertungsstrategien
und Kontrollfluss steht;
zum Beispiel bietet eine Sprache, die symmetrisch in Bezug auf die Extensibilitäts-Dualität ist,
sowohl ein Konstrukt, das die einfache Hinzufügung von neuen Varianten ermöglicht,
ähnlich dazu wie in gewissen Objekt-Orientierten Sprachen Klassen ein Interface implementieren,
als auch ein duales Konstrukt, das die einfache Hinzufügung von neuen Operationen ermöglicht,
wie in der Funktionalen Programmierung mit algebraischen Datentypen.
Dieses theoretische Wissen muss wohl allerdings dem Praktiker noch besser zugänglich gemacht werden.
Insbesondere profitiert die Entwicklung von Programmiersprachen noch nicht
wirklich auf eine systematische Weise davon.
Als Schritt auf dem Weg dahin, diese Situation zu verbessern, präsentiert diese Arbeit,
auf diesen bisherigen Resultaten aufbauend, ein grundlegendes, im konzeptuellen Sinne recht ökonomisches System, in dem
die Extensibilitäts-Dualität und die De Morgan-Dualität miteinander vereinigt sind.
Insbesondere ist dieses System inhärent höchst symmetrisch in Bezug auf beide Dualitäten
und deren Vereinigung ermöglicht auf recht natürliche Weise die Essenz der
Extensibilitäts-Dualität herauszuarbeiten, was die Ökonomie auf der Meta-Ebene
weiter verbessert.
Wie dargestellt werden wird, kann dieses System als Framework dienen, in dem
sich verschiedene Sprach-Features aus in der Praxis relevanten Programmiersprachen
darstellen lassen (durch lokale syntaktische Abstraktionen, auch bekannt als Macros)
und in dem man diese vergleichen kann,
wie etwa algebraische Datentypen und Funktionstypen, wie man sie aus der Funktionalen
Programmierung kennt, Klassen und Objekte, sowie Exception-Handling,
in Verbindung mit den Auswertungsstrategien die von den jeweiligen Sprachen
verwendet werden.
Dies soll dem Zweck dienen, eine systematische Analyse von Programmiersprachen-Konzepten
zu ermöglichen, welche bei der Entwicklung von kompakten Sprachen helfen kann,
die symmetrisch in Bezug auf eine oder beide der erwähnten Dualitäten sind.
Für die kurzfristigere Perspektive bietet es das System auch als Grundstein für
die systematische Entwicklung von Tools an, welche automatisch Programme in verschiedenen Sprache
semantisch vergleichen (und ineinander umwandeln), indem sie die Ergebnisse von deren Einbettung in das Framework analysieren.
Abstract:
In the theory of programming languages, duality is increasingly recognized
as being important for improving economy, offering the theoretical development
for one of two dual concepts "for free".
Two prevalent dualities are the extensibility duality, related to the Expression Problem,
and the De Morgan duality, related to evaluation strategies and control flow;
for instance, a language which is symmetric with respect to the extensibility duality
has both a facility which allows for easy extension with new variants,
similar to how classes implement an interface in certain object-oriented languages,
and a dual facility which allows for easy extension with new operations,
as in functional programming with algebraic data types.
However, this theoretical knowledge arguably has yet to be made more accessible to the practician.
In particular, the design of programming languages does not yet really
benefit from it in a systematic way.
As a step to improve this situation, building on these prior results, the present work presents a prototype of
a, in the conceptual sense rather economical, foundational system, in which the extensibility duality and the De Morgan duality are consolidated.
In particular, the system is inherently highly symmetric with respect to both dualities
and their consolidation quite naturally allows to carve out the essence
of the extensibility duality, thereby further optimizing the meta-level economy.
As will be demonstrated, this system can serve as a framework in which various language features known from
practical programming languages can be recovered (by local syntactic abstractions,
a.k.a. macros) and systematically compared,
including algebraic data types and function types as known from functional programming,
classes and objects, and exception handling, in combination
with the evaluation strategies employed by the respective languages.
This is intended to facilitate a systematic analysis
of programming language concepts which may aid in the design of parsimonious languages
which are symmetric with respect to one or both of the mentioned dualities.
For the more short-term perspective, the system may also serve as a cornerstone
for the systematic development of tools which automatically semantically compare (and convert between)
programs in different languages by means of analyzing the results of embedding them into the framework.