Programmiersprache: Crystal erfolgreich auf Version 1.0 gezĂĽchtet
Nach zehn Jahren Entwicklungszeit gilt die von Ruby inspirierte, objektorientierte und statisch typisierte Programmiersprache als stabil.
Die Programmiersprache Crystal ist in Version 1.0 erschienen. Die Schöpfer Ary Borenzweig, Brian J. Cardiff und Juan Wajnerman haben in einem gemeinsamen Beitrag die Veröffentlichung des 1.0 Release und die weiteren Pläne verkündet. Insgesamt blickt das Open-Source-Projekt auf eine fast zehnjährige Geschichte zurück.
Die Syntax von Crystal orientiert sich an der von Ruby, und die Sprache zielt durchaus auf erfahrene Ruby-Entwickler. Crystal startete 2011 zunächst unter dem Namen Joy, den Borenzweig aber laut einem Blogbeitrag von 2016 bereits nach drei Tagen auf Crystal änderte. Die Programmiersprache setzt auf statische Typisierung. Entwicklerinnen und Entwickler müssen aber nicht alle Typen explizit definieren, da Typinferenz die meisten herleitet. Im Gegensatz zu Ruby setzt Crystal auf einen Compiler, statt den Code zur Laufzeit zu interpretieren.
Ruby und C ohne Null
Das Readme im GitHub-Repository beschreibt die Motivation hinter der Sprache folgendermaßen: "Wir lieben die Effizienz von Ruby zum Schreiben von Code. Wir lieben die Effizienz von C zum Ausführen von Code. Wir möchten das Beste aus beiden Welten. Wir wollen, dass der Compiler versteht, was wir im Sinn haben, ohne dass wir Typen überall spezifizieren müssen. Wir wollen volles OOP. Oh, und wir wollen keinen C-Code schreiben, damit das Programm schneller läuft."
FĂĽr den letzten Punkt bringt die Sprache eine eigene Syntax fĂĽr den Aufruf von nativen Libraries mit, die sich unter anderem um die passende Typzuweisung ĂĽber Aliase kĂĽmmert. Ein lib
-Binding deklariert den Inhalt von C-Bibliotheken. Die darin enthalten Funktionen lassen sich darunter als fun
deklarieren.
Nullen unerwĂĽnscht
Außerdem setzt Crystal von Haus aus auf Null-Safety: Standardmäßig dürfen Variablen unabhängig vom Typ nicht den Wert Nil
haben, und der Compiler prĂĽft beim Ăśbersetzen auf Null-Referenzen. So fĂĽhrt beispielsweise das Kompilieren des folgenden Codeausschnitts von der Crystal-Site:
if rand(2) > 0
my_string = "hello world"
end
puts my_string.upcase
zu einer Fehlermeldung, da die Variable my_string
je nach Berechnung der Zufallszahl entweder nicht deklariert und somit Nil
ist oder die Zeichenkette hello world
enthält. Der Compiler meldet dazu folgenden Fehler:
$ crystal hello_world.cr
Error in hello_world.cr:5: undefined method 'upcase' for Nil \
(compile-time type is (String | Nil))
puts my_string.upcase
Makros und Bibliotheken
Die Programmiersprache hat zudem ein Makrosystem für die Metapgrogrammierung. Die Makros können beliebige Knoten innerhalb des abstrakten Syntaxbaums (Abstract Syntax Tree, AST) aufnehmen. Die Inhalte müssen dabei vollständige Crystal-Anweisungen sein. So benötigt beispielsweise jede def
-Anweisung ein abschlieĂźendes end
.
Crystal-Bibliotheken werden zu sogenannten Shards (also Kristallscherben oder -splittern als Alternative zu den RubyGems) gepackt. Ein zentrales Repository wie RubyGems.org fĂĽr Ruby, NPM fĂĽr JavaScript oder PyPI fĂĽr Python existiert nicht. Stattdessen erfolgt das Einbinden direkt ĂĽber die in der dependencies
-Sektion angegebenen Git-Repositories:
name: my-project
version: 0.1
license: MIT
crystal: 0.21.0
dependencies:
mysql:
github: crystal-lang/crystal-mysql
version: ~> 0.3.1
Versionssprung auf die 1.0
Wer bereits vor dem aktuellen Release mit Crystal gearbeitet hat, findet seit dem 0.36.1-Release kaum Ă„nderungen an der Sprache selbst. Nennenswert ist eine Erweiterung fĂĽr den typsicheren Zugriff auf Tupel. Bei der Standard-Library fallen zudem in Version 1.0 zahlreiche zuvor als deprecated (ĂĽberholt) gekennzeichnete Elemente weg.
Wichtig ist vor allem die mit dem Versionssprung versprochene Stabilität der Sprache. So soll jeder Code für Crystal 1.0 auf allen künftigen 1.x-Releases ohne "signifikante Inkompatibilitäten" laufen. Das Team verspricht, dass es Features in der Sprache und in der Standard-Library weder entfernen noch in einer Weise ändern wird, die existierenden Code beeinflusst.
Ziel ist, die integrierte Standardbibliothek weiterzuentwickeln, aber dabei stets die Rückwärtskompatibilität im Blick zu halten. Änderungen, die zu Breaking Changes führen, sollen in einem separaten Crystal-2.0-Zweig entstehen. Künftige Minor Releases der aktuellen Sprachversion werden als 1.x erscheinen, und 1.x.y-Patch-Versionen bringen Bugfixes mit.
Offene Baustellen
In einigen Bereichen ist der Kristall noch nicht fertig gezüchtet. Unter anderem läuft die Version 1.0 noch nicht unter Windows. Auch das Multithreading ist derzeit noch eine Baustelle. Schließlich sollen mit Crystal geschriebene Anwendungen mittelfristig auf ARM-Plattformen laufen, wozu es wohl schon einige Schritte in die richtige Richtung gegeben hat, die aber noch nicht zum Ziel geführt haben.
Weitere Details zu der Programmiersprache, dem 1.0-Release und den damit verbundenen Neuerungen lassen sich der offiziellen AnkĂĽndigung entnehmen. Die Sprache ist unter Apache-2-Lizenz auf GitHub verfĂĽgbar. Die Dokumentation findet sich auf der Crystal-Site.
(rme)