Veröffentlichung der Programmiersprache Crystal 1.5

Die Veröffentlichung der Programmiersprache Crystal 1.5 wurde veröffentlicht, deren Entwickler versuchen, den Komfort der Entwicklung in der Ruby-Sprache mit der hohen Anwendungsleistung der C-Sprache zu kombinieren. Die Syntax von Crystal ähnelt Ruby, ist jedoch nicht vollständig mit diesem kompatibel, obwohl einige Ruby-Programme ohne Änderungen ausgeführt werden können. Der Compilercode ist in Crystal geschrieben und wird unter der Apache 2.0-Lizenz vertrieben.

Die Sprache verwendet eine statische Typprüfung, die implementiert wird, ohne dass die Typen von Variablen und Methodenargumenten im Code explizit angegeben werden müssen. Crystal-Programme werden in ausführbare Dateien kompiliert, wobei zur Kompilierungszeit Makros ausgewertet und Code generiert werden. In Crystal-Programmen ist es möglich, in C geschriebene Bindungen zu verbinden. Die Parallelisierung der Codeausführung erfolgt mithilfe des Schlüsselworts „spawn“, mit dem Sie eine Hintergrundaufgabe asynchron ausführen können, ohne den Hauptthread zu blockieren, und zwar in Form von leichtgewichtigen Threads, sogenannten Fibers.

Die Standardbibliothek bietet einen großen Satz allgemeiner Funktionen, darunter Tools zur Verarbeitung von CSV, YAML und JSON, Komponenten zum Erstellen von HTTP-Servern und WebSocket-Unterstützung. Während des Entwicklungsprozesses ist es praktisch, den Befehl „crystal play“ zu verwenden, der eine Webschnittstelle (standardmäßig localhost:8080) für die interaktive Ausführung von Code in der Crystal-Sprache generiert.

Wichtigste Änderungen:

  • Der Compiler hat eine Prüfung auf Übereinstimmung von Argumentnamen in der Implementierung einer abstrakten Methode und in ihrer Definition hinzugefügt. Bei Namenskonflikten 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): Null ^ – Warnung: Der Positionsparameter „name“ entspricht dem Parameter „number“ der überschriebenen Methode FooAbstract#foo(number : Int32), die einen anderen Namen hat und sich möglicherweise auf die Übergabe benannter Argumente auswirkt
  • Wenn Sie einer untypisierten Methode ein Argument zum Wert einer Variablen zuweisen, ist das Argument jetzt auf den Typ dieser Variablen beschränkt. class Foo @x : Int64 def initialize(x) @x = x # Parameter x wird @x end end eingegeben
  • Ermöglicht das Hinzufügen von Anmerkungen zu Parametern von Methoden oder Makros. def foo(@[MaybeUnused] x); Ende # OK
  • Unterstützung für die Verwendung von Konstanten als Indizes und Namen in Tupeln hinzugefügt. KEY = "s" foo = {s: "String", n: 0} setzt foo[KEY].size
  • Der Datei-API wurden neue File#delete?-Methoden zum Löschen von Dateien und Verzeichnissen hinzugefügt. und Dir#delete?, die false zurückgeben, wenn die Datei oder das Verzeichnis fehlt.
  • Der Schutz der File.tempfile-Methode wurde verstärkt, sodass nun keine Nullzeichen in den Zeilen zulässig sind, die den Dateinamen bilden.
  • Umgebungsvariable NO_COLOR hinzugefügt, die die Farbhervorhebung in der Compiler- und Interpreter-Ausgabe deaktiviert.
  • Die Arbeit im Dolmetschermodus wurde deutlich verbessert.

Source: opennet.ru

Kommentar hinzufügen