Byla vydána nová verze Crystal, kompilovaného programovacího jazyka se syntaxí Ruby, jehož hlavními rysy jsou runtime s „vestavěným“ event loopem, v němž jsou všechny operace vstupu a výstupu asynchronní, podpora vícerozměrnosti (zatím se aktivuje flagem při kompilaci) a výjimečně jednoduchá a pohodlná práce s knihovnami v C.
Od verze 0.34.0 jazyk oficiálně začíná pevně postupovat k první skutečné verzi (tj. verze 1.0).
V nové verzi Crystal lze zaznamenat následující změny a vylepšení podle jejich důležitosti:
Do API byla přidána nová knihovna pro protokolování Log, která, na rozdíl od staré, umí směrovat zprávy do různých backendů a podle „zdroje“ tyto zprávy různě filtrovat.
Relikty ze světa vývoje v C, Errno a WinError, používané pro primitivy vstupu a výstupu, ustupují do minulosti díky hierarchii výjimek IO::Error (přesto však nikdo zatím nezakazuje používat Errno).
Bylo odstraněno automatické doplňování else nil z operátoru case/when/else. To bylo provedeno, aby se vyloučilo náhodné opomenutí jedné z vět programátorem when při matchování podle determinovaných případů jako například enumerace a průchodu přes typy z Union. Jinými slovy, takový kód již nebude fungovat bez uvedení dalšího when (when Char) nebo zadání else-větve:
a = 1 || ‘x’ || "foo"
case a
when Int32
# …
when String
# …
end
Možnost kompilátoru disable_overflow již není k dispozici. Pro operace s přetečením použijte metody &+, &-, &*.
Array#fill nyní létá rychlostí kulky, díky nahrazení hloupého cyklu jedním jednoduchým memset;
Manažer shardů (balíčků), nazývaných, což je paradoxní, shards, nyní používá rychlejší a efektivnější algoritmus pro uspokojení závislostí Molinillo, převzatý z CocoaPods (Swift) a Builder (Ruby).
Byla přidána podpora LLVM 10, což by mělo teoreticky přinést určitý růst výkonu, stability atd.
… a mnohá další vylepšení, která se podle mého subjektivního názoru zdají méně zásadní.
Je třeba poznamenat, že Crystal je jazyk postavený na LLVM, který umožňuje psaní aplikací někdy rychleji, jednodušeji a stručněji než jeho interpretované "související jazyky", a přitom produkuje poměrně rychlý binární soubor. Na rozdíl od Golang vyčnívá jako plnohodnotný OOP, podporuje generika a má velmi jednoduchou a přehlednou syntaxi. Co do účelu je do značné míry analogický jazyku Nim, ale jasně se zaměřuje na praktické použití "tady a teď", díky čemuž má ve svém API arzenálu řadu dobře dokumentovaných, užitečných a kvalitních nástrojů, které jsou podporovány vývojáři jazyka a proto jsou velmi stabilní.
Zdroj: linux.org.ru
