Wann ist eine Programmiersprache deklarativ?

Neulich habe ich einen Artikel für eine wissenschaftliche Zeitschrift begutachtet, der eine neue Programmiersprache beschriebt. Die Entwickler dieser Programmiersprache behaupten im Artikel, ihre neue Programmiersprache sei deklarativer als jede Programmiersprache der Vergangenheit. Den Begriff „Deklarative Programmiersprache“ definieren sie aber nicht, was mir die Behauptung als problematisch erscheinen lässt. Dieser Begriff lässt sich, meine ich, ganz gut formal definieren.

Erstens muss eine deklarative Sprache referentiell transparent sein. Das heißt, dass innerhalb eines Ausdrucks ein Vorkommen der selben Variablendeklaration immer den selben Wert hat. Wieso die Referentielle Transparenz vom Vorteil ist, wird in Einführungen in die Programmierung – unter anderem in dieser – erläutert.

Zweitens muss eine deklarative Sprache sowohl eine operationelle Semantik wie auch eine deklarative Semantik haben. Die operationelle Semantik bestimmt durch meist imperativen Algorithmen, wie Programme ausgewerrtet werden. Die deklarative Semantik definiert mittels Mengen oder Funktionen – etwa Modelltheorie, Lambda-Kalkül oder konstruktive Logik– und ohne Bezug auf imperative Algorithmen, welche Ergebnisse ein Programm liefert. Darüber hinaus muss beweisen werden, dass operationalle und deklarative Semantik für alle mögliche Programmen genau die selben Ergebnisse einer Prohgrammauswertung liefern – man sagt, dass ihre Äquivalenz oder dass die operationalle Semantik korrekt und vollständig bezüglich der deklarativen Semantik bewiesen werden muss.

Man kann, muss aber nicht, mehr verlangen. Für eine Anfragesprache, also eine Sprache wie SQL, kann man darüber hinaus verlangen, dass sie Antwort-abgeschlossen ist. Das heißt, dass mögliche Antworte schon Programme sind. Ein Vorteil von Antwort-abgeschlossenen Anfragesprachen ist, dass der Programmierer für Anfragen (also Progrtammen) und Antworte nicht mit zwei verschiedenen Paradigmen umgehen muss. SQL ist übrigens nicht Antwort-abgeschlossen.

Die Deklarativität einer Programmiersprache lässt sich also sehr wohl präzis definieren. Liegt eine Definition vor, so kann man Programmiersprachen bezüglich Deklarativität vergleichen und erkennen, welche deklarativer ist als die andere, dass heißt welche näher an den Anforderungen an einer deklarativen Sprache ist. Nur in dieser Weise werden Bahauptungen gemieden, die schwammig sind und folglich in der Wissenschaft keinen Platz verdienen.

Ob eine deklarative Programmiersprache leicht zu nutzen ist und ob eine völlig deklarative Sprache in der Praxis angebracht ist, das sind ganz andere aber wichtige Frage. Die Deklarativität einer Programmiersprache erleichtert sicherlich die Programmierung von vielen Aufgaben,  leider aber nicht von allen.

FB

Leave a Reply