Vydání programovacího jazyka Crystal 1.5

Bylo zveřejněno vydání programovacího jazyka Crystal 1.5, jehož vývojáři se snaží spojit pohodlí vývoje v jazyce Ruby s vysokým aplikačním výkonem charakteristickým pro jazyk C. Syntaxe Crystal je blízká, ale není plně kompatibilní s Ruby, ačkoli některé Ruby programy běží bez úprav. Kód kompilátoru je napsán v Crystal a distribuován pod licencí Apache 2.0.

Jazyk používá statickou kontrolu typu, implementovanou bez nutnosti explicitně specifikovat typy proměnných a argumenty metod v kódu. Programy Crystal jsou kompilovány do spustitelných souborů, přičemž makra jsou vyhodnocována a kód je generován v době kompilace. V programech Crystal je možné propojit vazby napsané v C. Paralelizace spouštění kódu se provádí pomocí klíčového slova „spawn“, které umožňuje spouštět úlohu na pozadí asynchronně, bez blokování hlavního vlákna, ve formě odlehčených vláken nazývaných vlákna.

Standardní knihovna poskytuje velkou sadu běžných funkcí, včetně nástrojů pro zpracování CSV, YAML a JSON, komponent pro vytváření HTTP serverů a podpory WebSocket. Při vývoji je vhodné použít příkaz „crystal play“, který vygeneruje webové rozhraní (standardně localhost:8080) pro interaktivní spouštění kódu v jazyce Crystal.

Hlavní změny:

  • Kompilátor přidal kontrolu shody názvů argumentů při implementaci abstraktní metody a v její definici. Pokud dojde k neshodě názvu, zobrazí se nyní varování: abstraktní třída FooAbstract abstract def foo(číslo : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Varování: poziční parametr 'name' odpovídá parametru 'number' přepsané metody FooAbstract#foo(number : Int32), která má jiný název a může ovlivnit předávání pojmenovaného argumentu
  • Při přiřazování argumentu netypové metodě k hodnotě proměnné je nyní argument omezen na typ této proměnné. class Foo @x : Int64 def initialize(x) @x = x # parametr x bude napsán @x end end
  • Umožňuje přidávat anotace k parametrům metod nebo maker. def foo(@[MaybeUnused] x); konec # OK
  • Přidána podpora pro použití konstant jako indexů a jmen v n-ticích. KEY = "s" foo = {s: "String", n: 0} vloží foo[KEY].size
  • Do File API byly přidány nové metody File#delete? pro mazání souborů a adresářů. a Dir#delete?, které vrátí false, pokud soubor nebo adresář chybí.
  • Byla posílena ochrana metody File.tempfile, která nyní nepovoluje prázdné znaky v řádcích tvořících název souboru.
  • Přidána proměnná prostředí NO_COLOR, která zakáže barevné zvýraznění ve výstupu kompilátoru a interpretu.
  • Práce v režimu tlumočníka byla výrazně vylepšena.

Zdroj: opennet.ru

Přidat komentář