Programmiersprache Babelsberg#
Die Ruby-Erweiterung Babelsberg soll Constraints sowohl beim imperativen als auch beim deklarativen Programmieren unterstützen.
Beim Hasso-Plattner-Institut[1] wurde mit Babelsberg/R[2] 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.
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[3] verfügbar und stehen unter der MIT-Lizenz[4].
Babelsberg und Sudokus#
Einen Anwendungsfall für Babelsberg im Zusammenhang mit der Lösung von Sudokus nennt Maria Graber, die an Babelsberg/R im Rahmen ihrer Masterarbeit gearbeitet hat [5].Links:
- [1] Hasso-Plattner Institut in Potsdam: http://hpi.de/
- [2] Babelsber/R Ruby Erweiterung: http://opus.kobv.de/ubp/volltexte/2014/6729/
- [3] Homepage: https://github.com/timfel/babelsberg-js
- [4] MIT-Lizenz: http://opensource.org/licenses/MIT
- [5] Babelsberg und Sudokus: https://hpi.de/pressemitteilungen/2014/hpi-wissenschaftler-nennen-neue-programmiersprache-babelsberg.html