A liberazione di a lingua di prugrammazione Crystal 1.5 hè stata publicata, i sviluppatori di quale anu pruvatu à cumminà a cunvenzione di sviluppà in a lingua Ruby cù l'altu rendiment di l'applicazione inherente in a lingua C. A sintassi di Crystal hè vicinu à, ma micca cumplettamente cumpatibile cù, Ruby, malgradu u fattu chì certi prugrammi di ruby funzionanu senza rielaborazione. U codice compilatore hè scrittu in Crystal è distribuitu sottu a licenza Apache 2.0.
A lingua usa a verificazione di tipu static, implementata senza a necessità di specificà esplicitamente i tipi di variàbili è l'argumenti di u metudu in u codice. I prugrammi Crystal sò compilati in fugliali eseguibili, cù valutazione macro è generazione di codice in tempu di compilazione. In i prugrammi Crystal, hè permessu di cunnette ligami scritti in lingua C. Parallelizazione di l'esekzione di u codice hè realizatu utilizendu a chjave "spawn", chì permette di eseguisce un compitu di fondo in modu asincronu, senza bluccà u filu principale, in forma di filamenti ligeri chjamati fibre (Fibra).
A biblioteca standard furnisce un grande inseme di funzioni generiche, cumprese l'arnesi per a gestione di CSV, YAML è JSON, cumpunenti per a custruzione di servitori HTTP è supportu WebSocket. Durante u prucessu di sviluppu, hè cunvenutu à aduprà u cumandamentu "crystal play", chì genera una interfaccia web (localhost: 8080 per difettu) per l'esekzione di codice interattivu in a lingua Crystal.
I cambiamenti principali:
- U compilatore hà aghjustatu un verificatu di a currispundenza trà i nomi di l'argumenti in l'implementazione di u metudu astrattu è in a so definizione. A discrepanza di u nome genera avà un avvisu: classa astratta FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo (name : Int32) : Nil p name end end 6 | def foo(name: Int32): Nil ^— Attenzione: u paràmetru posizionale 'name' currisponde à u paràmetru 'number' di u metudu overrided FooAbstract#foo (number: Int32), chì hà un nome diversu è pò influenzà u passaghju di l'argumentu chjamatu.
- Quandu assignate u valore di una variabile à un argumentu di un metudu micca tipatu, quellu argumentu hè avà limitatu da u tipu di quella variabile. class Foo @x : Int64 def initialize (x) @x = x # parametru x serà di tipu @x end end
- Hè permessu di aghjunghje annotazioni à i paràmetri di metudi o macros. def foo(@[MaybeUnused] x); fine #OK
- Aghjunghje supportu per l'usu di custanti cum'è indici è nomi in tuple. KEY = "s" foo = {s: "String", n: 0} mette foo[KEY].size
- Aggiunti novi metudi File#delete? à l'API File per sguassà i fugliali è i cartulari. è Dir#delete?, chì torna falsi se u schedariu o u cartulare ùn esiste micca.
- Rinfurzata a prutezzione di u metudu File.tempfile, chì avà ùn permette micca caratteri nulli in strings chì formanu un nome di schedariu.
- Aggiunta a variabile d'ambiente NO_COLOR per disattivà l'evidenziazione di u culore in u compilatore è l'interprete.
- U travagliu significativamente miglioratu in u modu di interprete.
Source: opennet.ru