Menü
iX Magazin

HPI stelllt neue Programmiersprache Babelsberg vor

Die Ruby-Erweiterung Babelsberg soll Constraints sowohl beim imperativen als auch beim deklarativen Programmieren unterstützen.

Von
vorlesen Drucken Kommentare lesen 20 Beiträge

Beim Hasso-Plattner-Institut wurde mit Babelsberg/R eine Programmiersprache entwickelt, die den Einsatz derselben objektorientierten Constraints sowohl im Rahmen imperativer als auch deklarativer Umgebungen erlaubt.

Die Programmierung mittels Constraints, der Beschreibung von Beschränkungen und Abhängigkeiten, ermöglicht es, erwünschte Eigenschaften oder Randbedingungen, etwa Wertebereiche, direkt zu spezifizieren. Dadurch können Compiler oder Laufzeitumgebungen deren Einhaltung automatisch überprüfen, man vermeidet verstreute Anweisungen, die wiederholt Invarianten prüfen und wiederherstellen müssen, und hat die Chance auf kompakten, deklarativen Quelltext.

Mehr Infos

class Resistor < TwoLeadedObject
attr_reader : resistance
def initialize ( resistance )
super()
@resistance = resistance
# Ohm’s Law constraint. Note that the resistance is read−only.
always { lead1.voltage − lead2.voltage == resistance.?*lead1.current }
end
end
class Battery < TwoLeadedObject
attr_reader : supply_voltage
def initialize (supply_voltage)
super()
@supply_voltage = supply_voltage
always { lead2.voltage − lead1.voltage == @supply_voltage.? }
end
end


Code-Beispiel: Elektrische Gesetze als Constraints formuliert.

Dennoch ist Programmieren mit Constraints nicht verbreitet, sondern imperatives Programmieren die Norm. Zwar gibt es Versuche zur Integration von Constraints mit imperativem Programmieren, doch dieser Einsatz von Constraints verhinderte deren Wiederverwendung in deklarativem Code und vice versa.

Babelsberg/R hat nach Aussage seiner Schöpfer nun die Konstrukte zur Abstraktion und Kapselung vereinheitlicht, indem sie bekannte objektorientierte Methodendefinitionen sowohl für deklarativen als auch für imperativen Code verwendet. Der Prototyp, Babelsberg/R, ist als Ruby-Erweiterung implementiert und unterstützt Rubys objektorientierte Semantik. Damit soll man Constraints schrittweise zu existierenden Ruby-Programmen hinzufügen können.

Die Qellen sind bei Github verfügbar und stehen unter der MIT-Lizenz.

(js)