Qupla & Abra

Die Entwicklung der ursprünglichen Abra Programmiersprache vergrößerte im Laufe der Zeit derartig den Umfang, dass diese limitierte Sprache für die neu entstandenen Anforderungen an Qubic nicht mehr ausreichte. Das hatte man im Vorfeld nicht erwartet, daher hat sich die IF entschlossen, den vorhandenen Parser / Interpreter / Compiler zu überarbeiten und zu einer übergeordneten Programmiersprache namens Qupla (kurz für QUbic Programming LAnguage) zu überführen. Laut den Erklärungen von Eric Hop dem Chefentwickler von Qubic, lassen sich einige Konzepte in Abra (ternär) nicht ohne weiteres auf eine bestehende binäre Sprache abbilden, noch lassen sich viele Konzepte von bestehenden binären Sprachen leicht oder gar nicht auf Abra abbilden z.B. Speicherverwaltung oder dynamische Typen bei der Java Programmierung. Dies ist aber notwendig, weil derzeitige Hardware noch binär funktioniert und man eine längere Zeit zweigleisig fahren muss.

Somit wurde Qupla im Dezember 2018 als übergeordnete Programmiersprache für Qubic eingeführt. Abra ist jetzt die Tritcode-Spezifikation und Qupla generiert den Abra-Tritcode entsprechend dieser Spezifikation in einer auf das IoT ausgerichteten Datenflussarchitektur. Qupla ist die erste übergeordnete Programmiersprache, die die neue Abra-Spezifikation implementiert.

Abra ist eine ternär basierte funktionale „low-level“ Zwischenprogrammiersprache und ist extrem minimal, sein Laufzeitmodell wird durch eine gemeinsame Tritcode-Spezifikation implementiert, die es ermöglicht, Abra-Code überall auszuführen.

Abra wurde im Hinblick auf Hardware auf dem neusten Stand der Technik entwickelt. Qubic soll wie das IoT selbst, auf einer Vielzahl von Hardware laufen. Um den gleichen Code auf verschiedenen Hardwareplattformen ausführen zu können, werden die qubics in dieser Zwischensprache verpackt, was im Wesentlichen bedeutet, dass sich die Sprache für eine einfache Übersetzung für bestimmte Hardware eignet. Dadurch wird Qubic weitgehend unabhängig von der Hardware.

Eine funktionale Programmiersprache ermöglicht eine einfachere Analyse, um die Richtigkeit des Codes nachzuweisen. Das Schreiben korrekter Programme ist keine triviale Aufgabe. Wir haben in der Vergangenheit gesehen, wie schwierig es ist, selbst einfache Smart Contracts fehlerfrei zu gestalten. Eine Sprache zu haben, die sich für eine automatisierte Analyse eignet, ist eine drastische Verbesserung gegenüber einer traditionellen, zwingenden Sprache. Als zusätzlichen Vorteil bieten sich funktionale Programme für eine starke Nutzung der Parallelisierung an, was bedeutet, dass verschiedene Teile eines größeren Programms gleichzeitig ausgeführt werden können, um mehrere CPUs oder sogar mehrere Geräte zu nutzen.

Abra besteht aus Funktionen, die ihrerseits aus Funktionen bestehen können, die asymptotisch auf Funktionen konvergieren, die einen ternären Wert oder null zurückgeben können, was auf die Beendigung eines logischen Zweiges hinweist. Es gibt keinen Kontrollfluss, sondern eine implizite Verzweigung und Zusammenführungen von Daten, beim ausführen dieser Funktionen. Ein gegebener Endpunkt wird als der überlebende Funktionszweig betrachtet, der einen Wert zurückgegeben hat. Abra gehört damit zu einem Programmierparadigma, der sogenannten Datenflussprogrammierung und eignet sich für die sogenannte Wellen-Parallelverarbeitung. Die Daten können durch die verschiedenen Ebenen des Prozessors fließen, ohne dass Synchronisations- oder Pufferungsverzögerungen erforderlich sind. Es hat sich gezeigt, dass damit die Taktfrequenzen 2- bis 7-fach höher sind als bei herkömmlichen Parallelverarbeitung.

Eine letzte Anmerkung zu den Optimierungen: Abra wird mit einer Bibliothek von vordefinierten Grundfunktionen für die gängigsten Plattformen geliefert. Obwohl die meisten Funktionen auf einem sehr niedrigen Niveau definiert sind, erlaubt es die Natur von Abra, Funktionen mit hardwarespezifischen Implementierungen zu überschreiben, die bei Bedarf effizienter sind.