Version des Programmiersprachens Crystal 1.16

Die Version 1.16 der Programmiersprache Crystal wurde veröffentlicht. Die Entwickler versuchen, die Benutzerfreundlichkeit von Ruby mit der hohen Anwendungsleistung, die für die Programmiersprache C charakteristisch ist, zu kombinieren. Die Syntax von Crystal ähnelt der von Ruby, ist jedoch nicht vollständig mit ihr kompatibel, obwohl einige Ruby-Programme ohne Änderungen ausgeführt werden können. Der Code des Compilers ist in Crystal geschrieben und wird unter der Apache 2.0-Lizenz vertrieben.

In dieser Sprache wird eine statische Typprüfung verwendet, die ohne das ausdrückliche Angeben von Variablen- und Methodentypen im Code realisiert ist. Programme in Crystal werden in ausführbare Dateien kompiliert, wobei während der Kompilierung Makros berechnet und Code generiert wird. In Crystal-Programmen können Bindings, die in C geschrieben sind, eingebunden werden. Die Parallelisierung der Codeausführung erfolgt mithilfe des Schlüsselworts „spawn“, das es ermöglicht, eine Hintergrundaufgabe asynchron zu starten, ohne den Hauptthread zu blockieren, in Form von leichtgewichtigen Threads, die als Fibers bezeichnet werden.

Die Standardbibliothek bietet eine Reihe typischer Funktionen, darunter Tools zur Verarbeitung von CSV, YAML und JSON, Komponenten zur Erstellung von HTTP-Servern und zur Unterstützung von WebSocket. Während der Entwicklung kann der Befehl „crystal play“ verwendet werden, der eine Web-Oberfläche (standardmäßig localhost:8080) zum interaktiven Ausführen von Code in der Sprache Crystal erstellt.

Wesentliche Änderungen:

  • Es wurde experimentelle Unterstützung für die Ausführung leichter Threads (Fibers) in separaten Ausführungskontexten (Execution Contexts) hinzugefügt, was eine effizientere parallele Ausführung von Aufgaben ermöglicht – die Blockierung von Threads in einem Kontext stoppt nicht die Ausführung in einem anderen. mt_context = Fiber::ExecutionContext::MultiThreaded.new(«worker-threads», 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new(«Gtk») do Gtk.main end gtk.wait
  • Im Methode Slice.literal wird der Typ der Elemente, die im Slice enthalten sind, ausgegeben und die Unterstützung für die Arbeit im Interpreter hinzugefügt.
  • In den Makros sizeof und alignof wird die Bereitstellung von Informationen über stabile Typen sichergestellt.
  • Die Standardbibliothek hat neue Methoden hinzugefügt: Indexable#find, #find!, EventLoop#wait_readable und #wait_writable.
  • Im Compiler wurde die lange Version der Option „-o“ – „—output“ – hinzugefügt und die Möglichkeit implementiert, ein Verzeichnis anstelle einer Datei anzugeben (der Dateiname wird entsprechend dem Namen der Code-Datei gewählt).
  • Im Dokumentationsgenerator wurde die Möglichkeit hinzugefügt, private und geschützte Objekte sowie Objekte in Bibliotheksverpackungen (lib, fun, union, cstruct, external, type) in die Dokumentation einzuschließen.
  • In der Methode „File.match?“ wird jetzt ein neuer Algorithmus zur Übereinstimmung von Datei-Pfaden verwendet, der einige Probleme und Einschränkungen beseitigt hat. Beispielsweise wird jetzt die Escape-Behandlung von Zeichen korrekt verarbeitet (die Maske „\\t“ erfasst „\t“, nicht das Zeichen „t“), das Trennen von Pfaden (die Maske „a**“ erfasst „ab“, funktioniert aber nicht mit „ab/c“, während die Maske „**/a“ „a“ erfasst), geschachtelte Muster (die Maske „{[}]}“ erfasst „}“), und Bereiche (die Maske „[a-]“ erfasst „-“).
  • In den Namen von Parameterdefinitionen (defs), Makros und Blöcken wurden die veralteten Endungen „?“ und „!“ deklariert.
  • In den Methoden Enumerable#sum und #product wurde die automatische Bestimmung des Rückgabetyps entfernt, wenn der Elementtyp eine Vereinigung (Union) ist. Bei der Verwendung dieser Methoden muss nun der Typ explizit angegeben werden, zum Beispiel anstelle von „[1, 10000000000_u64].sum“ sollte man „[1, 10000000000_u64].sum(0_u64)“ schreiben.
  • In HTTP::Request wurde eine korrekte Analyse der Teile der URL sichergestellt.
  • Die Unterstützung für die LLVM 20 Compiler-Suite wurde hinzugefügt.
  • Die Aufrufe von LLVM::ABI und LLVM::TargetMachine#abi wurden als veraltet erklärt.

    Quelle: opennet.ru
Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster