Die Programmiersprache Crystal 1.0 ist verfügbar.

Die Veröffentlichung der Programmiersprache Crystal 1.0 fand statt. Die Ausgabe wird als erster bedeutender Release betrachtet, der die Ergebnisse von 8 Jahren Arbeit zusammenfasst und die Stabilisierung der Sprache sowie die Bereitschaft zur Verwendung in Arbeitsprojekten markiert. In der Version 1.x wird die Abwärtskompatibilität gewährleistet und Änderungen an der Sprache sowie der Standardbibliothek, die die Kompilierung und Ausführung bestehenden Codes negativ beeinflussen, sind ausgeschlossen.

Die Versionen 1.0.y werden nur Korrekturen enthalten, während die Versionen 1.x.0 neue Funktionen und wesentliche Änderungen anbieten, jedoch die Kompatibilität mit dem Code wahren. Neue Ideen und potenziell inkompatible Änderungen werden in einem separaten Branch entwickelt, auf dessen Basis später die Version Crystal 2.0 erstellt wird. Einige Funktionen von Crystal 1.0 werden als vorläufig erklärt und unterliegen trotz ihrer Verfügbarkeit in der Version 1.0 nicht der offiziellen Unterstützung. Zu solchen Funktionen gehören Monothreading, die Ausführung auf der Windows-Plattform und die Nutzung auf Systemen mit ARM-Prozessoren.

Wir erinnern daran, dass die Entwickler von Crystal versuchen, die Benutzerfreundlichkeit der Entwicklung in der Sprache Ruby mit der hohen Leistung von Anwendungen, wie sie für die Sprache C typisch ist, zu kombinieren. Die Syntax von Crystal ähnelt der von Ruby, ist jedoch nicht vollständig kompatibel, obwohl einige Ruby-Programme ohne Umgestaltung ausgeführt werden. Der Compiler-Code ist in Crystal geschrieben und steht unter der Lizenz Apache 2.0.

In der Sprache wird eine statische Typprüfung verwendet, die ohne die Notwendigkeit der expliziten Angabe von Variablentypen und MethodenantArguments im Code umgesetzt wird. Programme in Crystal werden in ausführbare Dateien kompiliert, wobei Makros berechnet und Code während der Kompilierung generiert wird. In Crystal-Programmen ist es erlaubt, Bindings zu verwenden, die in C geschrieben sind. Die Parallelisierung der Codeausführung erfolgt durch das Schlüsselwort „spawn“, das es ermöglicht, eine Hintergrundaufgabe asynchron zu starten, ohne den Hauptthread zu blockieren, in Form von leichtgewichtigen Threads, die als Fibern (Fiber) bezeichnet werden.

Die Standardbibliothek bietet eine große Anzahl typischer Funktionen, einschließlich Werkzeuge zur Verarbeitung von CSV, YAML und JSON, Komponenten zur Erstellung von HTTP-Servern und Unterstützung für WebSocket. Im Entwicklungsprozess ist es praktisch, den Befehl „crystal play“ zu verwenden, der eine Web-Oberfläche (standardmäßig localhost:8080) für die interaktive Ausführung von Code in der Programmiersprache Crystal erstellt.

Hauptänderungen:

  • In Tupeln ist der indexierte Zugriff auf Elemente verschiedenen Typs erlaubt, da der Compiler Informationen über den Typ jedes Elements hat. Zum Beispiel: tuple = {1, „hallo“, ‘x’} v = tuple[0..1] # gibt {1, „hallo“} aus typeof(v) # => Tuple(Int32, String)
  • In String- und Zeichenliteralen ist die Verwendung von surrogate Abkürzungen in Escape-Sequenzen von Unicode, wie „\uD834“, verboten. Zur Kodierung willkürlicher Werte sollte die Notation „\x“ verwendet werden.
  • In der Standardbibliothek wurden eine große Anzahl von Definitionen, Makros und Methoden, die zuvor als veraltet gekennzeichnet waren, entfernt. Dazu gehören Methoden wie Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill usw.
  • In den Makros getter und property ist jetzt zwingend die Angabe des Rückgabetyps erforderlich.
  • Die Standardmethode zum Runden wurde auf TIES_EVEN geändert (sogenanntes „Bankier-Runden“, zu der nächsten Ganzzahl und für Grenzfälle zur nächsten geraden Zahl). In Number#round wurde ein Parameter RoundingMode hinzugefügt, der die Auswahl der Rundungsmethode ermöglicht. Zu den verfügbaren Methoden gehören: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
  • In Sammlungen wird die Funktionalität von Enumerable#flat_map und Iterator#flat_map mit Elementen gemischter Typen bereitgestellt.
  • Bei der Serialisierung von Enum-Sequenzen werden nun Darstellungen im Form von Strings mit Unterstrich verwendet.
  • Die im Modul XML definierten Typen wurden von struct auf class umgestellt.
  • Aus Sicherheitsgründen wurde die Dekodierung von Cookie-Namen sowie die Kodierung und Dekodierung von Cookie-Werten eingestellt (die Rekodierung obliegt nun den Frameworks und Anwendungen). Die Methode HTTP::Cookies.from_headers wurde in zwei Varianten aufgeteilt für Server und Clients.

Quelle: opennet.ru

60GB SSD 8Gb DDR4