Die Programmiersprache Crystal 1.0 ist verfügbar

Die Veröffentlichung der Programmiersprache Crystal 1.0 fand statt. Dieses Release wird als erster bedeutender Meilenstein angesehen, der 8 Jahre Entwicklung zusammenfasst und die Stabilisierung der Sprache und deren Einsatzbereitschaft in Arbeitsprojekten markiert. In der 1.x-Reihe wird Abwärtskompatibilität unterstützt, und Änderungen in der Sprache sowie in der Standardbibliothek, die sich negativ auf den bestehenden Code auswirken, werden garantiert nicht vorgenommen.

Die Versionen 1.0.y werden nur Korrekturen enthalten, während die Versionen 1.x.0 neue Funktionen und wesentliche Änderungen bieten werden, wobei die Kompatibilität zum bestehenden Code gewahrt bleibt. Neue Ideen und möglicherweise inkompatible Änderungen werden in einem separaten Branch entwickelt, aus dem später die Veröffentlichung von Crystal 2.0 hervorgehen wird. Einige Funktionen von Crystal 1.0 sind als vorläufig gekennzeichnet und unterliegen, obwohl sie in der 1.0-Branch vorhanden sind, keiner offiziellen Unterstützung. Dazu gehören unter anderem die Ein-Threadigkeit, die Nutzung auf der Windows-Plattform und die Verwendung auf Systemen mit ARM-Prozessoren.

Es sei daran erinnert, dass die Entwickler von Crystal versuchen, die Benutzerfreundlichkeit der Programmiersprache Ruby mit der hohen Anwendungsleistung von C 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 steht unter der Apache 2.0-Lizenz.

Die Sprache nutzt eine statische Typprüfung, die ohne die Notwendigkeit zur expliziten Angabe von Typen für Variablen und Methodeneingabeargumente im Code implementiert ist. 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 möglich, Bindings, die in C geschrieben sind, zu integrieren. Die Parallelisierung der Codeausführung erfolgt durch das Schlüsselwort „spawn“, das es ermöglicht, eine Hintergrundaufgabe im asynchronen Modus zu starten, ohne den Hauptthread zu blockieren, und zwar in Form von leichten Threads, die als Fiber 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:

  • In Tupeln ist indexierter Zugriff auf Elemente unterschiedlicher Typen erlaubt, da der Compiler Informationen über den Typ jedes Elements hat. Zum Beispiel: tuple = {1, „hello“, ‘x’} v = tuple[0..1] # gibt {1, „hello“} zurück typeof(v) # => Tuple(Int32, String)
  • In Zeichen- und String-Literalen ist die Verwendung von Surrogatkürzeln in Unicode-Escape-Sequenzen, wie „\uD834“, verboten. Für die Kodierung beliebiger Werte sollte die Notation „\x“ verwendet werden.
  • In der Standardbibliothek wurden viele Definitionen, Makros und Methoden entfernt, die zuvor als veraltet markiert waren. 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 nun die Angabe des Rückgabetyps zwingend erforderlich.
  • Die Standard-Rundungsmethode wurde auf TIES_EVEN geändert ("Bankers Rounding", auf die nächstgelegene Ganzzahl, und in Grenzfällen auf die nächstgelegene gerade Zahl). In Number#round wurde der 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 den Sammlungen wird die Funktionalität von Enumerable#flat_map und Iterator#flat_map mit gemischten Typen unterstützt.
  • Bei der Serialisierung von Enum-Sequenzen werden jetzt Darstellungen in Form von Strings mit Unterstrichen verwendet.
  • Die im XML-Modul definierten Typen wurden von struct auf class umgestellt.
  • Aus Sicherheitsgründen wurde das Dekodieren von Cookie-Namen sowie das Kodieren und Dekodieren von Cookie-Werten eingestellt (die Rekodierung liegt nun in der Verantwortung von Frameworks und Anwendungen). Die Methode HTTP::Cookies.from_headers wurde in zwei Varianten aufgeteilt für Server und Clients.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster