Die Version 1.5 der Programmiersprache Crystal wurde veröffentlicht. Die Entwickler versuchen, den Komfort der Ruby-Entwicklung mit der hohen Anwendungsleistung des C-Sprachens zu kombinieren. Die Syntax von Crystal ähnelt Ruby, ist jedoch nicht vollständig kompatibel, obwohl einige Ruby-Programme ohne Anpassungen ausgeführt werden können. Der Compiler-Code ist in Crystal geschrieben und wird unter der Lizenz Apache 2.0 verteilt.
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:
- Der Compiler hat eine Überprüfung der Übereinstimmung von Argumentnamen in der Implementierung einer abstrakten Methode und ihrer Definition hinzugefügt. Bei einer Namensabweichung wird nun eine Warnung ausgegeben: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Warnung: Der Positionsparameter 'name' entspricht dem Parameter 'number' der überschriebenen Methode FooAbstract#foo(number : Int32), welcher einen anderen Namen hat und dies kann die Übergabe benannter Argumente beeinflussen.
- Wenn einem Argument einer nicht typisierten Methode der Wert einer Variablen zugewiesen wird, wird dieses Argument nun auf den Typ dieser Variablen eingeschränkt. class Foo @x : Int64 def initialize(x) @x = x # Der Parameter x erhält den Typ von @x end end
- Es ist nun erlaubt, Anmerkungen zu Parametern von Methoden oder Makros hinzuzufügen. def foo(@[MaybeUnused] x); end # OK
- Die Unterstützung für die Verwendung von Konstanten als Indizes und Namen in Tupeln wurde hinzugefügt. KEY = „s“ foo = {s: „String“, n: 0} puts foo[KEY].size
- Im File-API wurden neue Methoden File#delete? und Dir#delete? hinzugefügt, die false zurückgeben, wenn die Datei oder das Verzeichnis nicht vorhanden ist.
- Die Sicherheitsmaßnahmen für die File.tempfile-Methode wurden verstärkt, sodass jetzt keine Nullzeichen mehr in den Streams erlaubt sind, die den Dateinamen bilden.
- Eine Umgebungsvariable NO_COLOR wurde hinzugefügt, die die Farbmarkierung in der Ausgabe des Compilers und Interpreters deaktiviert.
- Die Leistung im Interpretermode wurde erheblich verbessert.
Quelle: opennet.ru
