Bolo zverejnené vydanie programovacieho jazyka Crystal 1.16, ktorého vývojári sa snažia spojiť pohodlie vývoja v jazyku Ruby s vysokým aplikačným výkonom charakteristickým pre jazyk C. Syntax Crystalu je blízka, ale nie je plne kompatibilná s Ruby, hoci niektoré Ruby programy bežia bez úprav. Kód kompilátora je napísaný v jazyku Crystal a distribuovaný pod licenciou Apache 2.0.
Jazyk využíva statickú kontrolu typu, ktorá je implementovaná bez potreby explicitného špecifikovania typov premenných a argumentov metód v kóde. Programy Crystal sú kompilované do spustiteľných súborov, pričom makrá sa vyhodnocujú a kód sa generuje v čase kompilácie. V programoch Crystal je možné spájať väzby napísané v jazyku C. Paralelizácia vykonávania kódu sa vykonáva pomocou kľúčového slova „spawn“, ktoré umožňuje spustiť úlohu na pozadí v asynchrónnom režime bez blokovania hlavného vlákna, vo forme odľahčených vlákien nazývaných vlákna.
Štandardná knižnica poskytuje sadu typických funkcií vrátane nástrojov na spracovanie CSV, YAML a JSON, komponentov na vytváranie HTTP serverov a podpory WebSocket. Počas vývoja môžete použiť príkaz „crystal play“, ktorý vygeneruje webové rozhranie (predvolene localhost:8080) pre interaktívne vykonávanie kódu Crystal.
Hlavné zmeny:
- Pridaná experimentálna podpora pre spúšťanie ľahkých vlákien (fiber) v samostatných kontextoch vykonávania (Execution Contexts), čo umožňuje efektívnejšie paralelné vykonávanie úloh - blokovanie vlákien v jednom kontexte nevedie k zastaveniu vykonávania v inom. mt_context = Fiber::ExecutionContext::MultiThreaded.new("pracovné vlákna", 4) 10-krát do mt_context.spawn do do_something koniec koniec gtk = Fiber::ExecutionContext::Isolated.new("Gtk") do Gtk.main koniec gtk.wait
- Metóda Slice.literal teraz poskytuje odvodenie typu pre elementy obsiahnuté v reze a pridáva podporu pre prácu v tlmočníkovi.
- Sizeof a alignof makrá poskytujú informácie o stabilných typoch.
- Do štandardnej knižnice boli pridané nové metódy: Indexable#find, #find!, EventLoop#wait_readable a #wait_writable.
- Kompilátor má dlhú verziu voľby „-o“, „--output“, a implementovaná je možnosť zadať adresár namiesto súboru (názov súboru bude vybraný v súlade s názvom súboru s kódom).
- Generátor dokumentácie má teraz možnosť zahrnúť do dokumentácie súkromné a chránené objekty, ako aj objekty vo väzbách knižníc (lib, fun, union, cstruct, external, type).
- V "File.match?" metóda Bol implementovaný nový algoritmus zhody cesty k súboru, ktorý odstránil niektoré problémy a obmedzenia. Napríklad escapovanie (maska "\\t" sa zhoduje s "\t", ale nie "t"), rozdelenie cesty (maska "a**" sa zhoduje s "ab", ale zlyhá pre "ab/c", zatiaľ čo maska "**/a" sa zhoduje s "a"), vnorené vzory (maska "{[}]}" sa zhoduje s "}") a rozsahy (maska "[a-]" sa teraz správne zhoduje s "-".
- Prípony "?" boli zastarané v názvoch parametrov v definíciách (defs), makrách a blokoch. A "!".
- V metódach Enumerable#sum a #product bolo odstránené automatické určenie návratového typu, ak je typ prvku zjednotenie. Pri volaní týchto metód je teraz potrebné explicitne špecifikovať typ, napríklad namiesto „[1, 10000000000_u64].sum“ by ste mali napísať „[1, 10000000000_u64].sum(0_u64)“.
- HTTP::Request zabezpečuje správnu analýzu častí URL.
- Pridaná podpora pre kompilátor LLVM 20.
- Volania LLVM::ABI a LLVM::TargetMachine#abi boli zastarané.
Zdroj: opennet.ru
