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
