Die Version 1.2 der Programmiersprache Crystal wurde veröffentlicht. Die Entwickler versuchen, die Entwicklungsfreundlichkeit von Ruby mit der hohen Anwendungsleistung von C zu kombinieren. Die Syntax von Crystal ähnelt der von Ruby, ist jedoch nicht vollständig mit ihr kompatibel, obwohl einige Ruby-Programme ohne Anpassungen ausgeführt werden können. Der Compiler-Code ist in Crystal verfasst und steht unter der Apache 2.0 Lizenz.
Die Sprache verwendet eine statische Typprüfung, die ohne die Notwendigkeit der expliziten Angabe von Variablen- und Methodenargumenttypen im Code implementiert ist. Programme in Crystal werden in ausführbare Dateien kompiliert, wobei Makros berechnet und Code zur Kompilierungszeit generiert werden. In Crystal-Programmen können Bindungen, die in C geschrieben sind, eingebunden werden. Die Parallelisierung des Codes erfolgt mithilfe des Schlüsselworts „spawn“, das es ermöglicht, einen Hintergrundtask asynchron zu starten, ohne den Hauptthread zu blockieren, in Form von leichten Threads, die als Fibers bezeichnet werden.
Die Standardbibliothek bietet eine umfangreiche Sammlung typischer Funktionen, darunter Werkzeuge zur Verarbeitung von CSV, YAML und JSON, sowie Komponenten zur Erstellung von HTTP-Servern und zur Unterstützung von WebSocket. Bei der Entwicklung ist das Verwenden des Befehls „crystal play“ praktisch, welcher eine Web-Oberfläche (standardmäßig localhost:8080) für die interaktive Ausführung von Code in der Sprache Crystal bereitstellt.
Wesentliche Änderungen:
- Die Möglichkeit, eine Unterklasse einer generischen Klasse einem übergeordneten Klassenobjekt zuzuweisen, wurde hinzugefügt. class Foo(T); end class Bar(T) < Foo(T); end x = Foo x = Bar
- In Makros kann nun das Unterstrich-Symbol verwendet werden, um Werte in der Schleife „for“ zu ignorieren. {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- In Makros wurde die Methode „file_exists?“ hinzugefügt, um die Existenz einer Datei zu überprüfen.
- Die Standardbibliothek unterstützt jetzt 128-Bit-Ganzzahlen.
- Es wurde das Modul Indexable::Mutable(T) mit erweiterten Operationen für Sammlungen wie BitArray und Deque hinzugefügt. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
- Die Methode XML::Node#namespace_definition wurde hinzugefügt, um spezifische Namespaces aus XML zu extrahieren.
- Die Methoden IO#write_utf8 und URI.encode wurden als veraltet erklärt. An ihrer Stelle sollten IO#write_string und URI.encode_path verwendet werden.
- Die Unterstützung für die 32-Bit-Architektur x86 wurde auf die zweite Stufe verschoben (fertige Pakete werden nicht mehr erstellt). Die Umstellung auf die erste Unterstützungsebene für ARM64-Architektur wird vorbereitet.
- Die Arbeiten zur vollständigen Unterstützung der Windows-Plattform werden fortgesetzt. Windows-Sockets wurden hinzugefügt.
- Ein universelles Paket für macOS wurde hinzugefügt, das sowohl auf Geräten mit x86-Prozessoren als auch auf Geräten mit Apple M1-Chip funktioniert.
Quelle: opennet.ru
