È stata pubblicata la versione 1.6 del linguaggio di programmazione Crystal, il cui obiettivo è combinare la facilità di sviluppo di Ruby con le elevate performance delle applicazioni tipiche del linguaggio C. La sintassi di Crystal è simile a quella di Ruby, ma non è completamente compatibile, sebbene alcuni programmi Ruby possano essere eseguiti senza modifiche. Il codice del compilatore è scritto in Crystal e distribuito sotto licenza Apache 2.0.
Il linguaggio utilizza un controllo statico dei tipi, implementato senza la necessità di specificare esplicitamente i tipi di variabili e argomenti dei metodi nel codice. I programmi in Crystal vengono compilati in file eseguibili, con il calcolo dei macro e la generazione di codice durante la compilazione. È possibile collegare binding scritti in C nei programmi Crystal. La parallelizzazione dell'esecuzione del codice avviene tramite la parola chiave «spawn», che consente di avviare un'attività in background in modalità asincrona, senza bloccare il thread principale, sotto forma di thread leggeri, noti come fiber.
La libreria standard offre un ampio set di funzioni comuni, inclusi strumenti per la gestione di CSV, YAML e JSON, componenti per la creazione di server HTTP e supporto WebSocket. Durante lo sviluppo, è utile utilizzare il comando «crystal play» che crea un'interfaccia web (per impostazione predefinita localhost:8080) per l'esecuzione interattiva del codice in Crystal.
Principali modifiche:
- La logica di sovraccarico è stata modificata: ora i union type vengono considerati prima dei single type durante il sovraccarico. Ad esempio, l'esecuzione del codice riportato qui sotto ora restituirà il valore true, non 'a', come avveniva nelle versioni precedenti. module Foo(T) end class Bar1 include Foo(Int32) end class Bar2 include Foo(Int32) end def foo(x : Foo(Int32)) 'a' end def foo(x : Bar1 | Bar2) true end foo(Bar1.new)
- Sono stati implementati i metodi #system_echo e #system_raw per tutte le piattaforme, rendendo obsoleti i macro FileDescriptor «cooked_from_tc_mode!», «noecho_from_tc_mode!» e «raw_from_tc_mode!». Inoltre, ora i metodi #noecho! e #raw! restituiscono nil invece del valore LibC.tcsetattr.
- Migliorato l'API File, che ora restituisce un oggetto interno (viene restituito File::Info al posto di Crystal::System::FileInfo).
- È stata migliorata l'operatività in modalità interpretativa. Per abilitare il supporto per l'interprete, è possibile utilizzare il comando «make interpreter = 1».
- Il compilatore e la libreria standard sono stati arricchiti con nuove ottimizzazioni delle performance.
- Migliorato il supporto per la piattaforma Windows nel compilatore, includendo per Windows la possibilità di compilare l'interprete e il supporto per Mutex.
- Aggiunto il supporto per Unicode 15.0 e implementato un'API per la normalizzazione delle sequenze Unicode.
Fonte: opennet.ru
