È stato rilasciato il linguaggio di programmazione Crystal 1.2, il cui sviluppo cerca di combinare la facilità di utilizzo di Ruby con le alte prestazioni delle applicazioni tipiche del 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:
- È stata aggiunta la possibilità di assegnare una sottoclasse di una classe generica a un elemento della classe genitore. class Foo(T); end class Bar(T) < Foo(T); end x = Foo x = Bar
- Nei macro, ora si può utilizzare il simbolo di sottolineatura per ignorare il valore nel ciclo 'for'. {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- È stato aggiunto il metodo 'file_exists?' nei macro per controllare l'esistenza di un file.
- È stata implementata la gestione dei numeri interi a 128 bit nella libreria standard.
- È stato aggiunto il modulo Indexable::Mutable(T) con l'implementazione di operazioni avanzate per collezioni come BitArray e Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
- È stato aggiunto il metodo XML::Node#namespace_definition per estrarre uno spazio dei nomi specifico da XML.
- I metodi IO#write_utf8 e URI.encode sono stati dichiarati obsoleti e dovrebbero essere sostituiti con IO#write_string e URI.encode_path.
- Il supporto per l'architettura x86 a 32 bit è stato spostato al secondo livello (i pacchetti pronti non vengono più creati). È in preparazione il passaggio al primo livello di supporto per l'architettura ARM64.
- Proseguono i lavori per garantire un supporto completo alla piattaforma Windows. È stata aggiunta la compatibilità con i socket di Windows.
- Per macOS è stato aggiunto un pacchetto universale, funzionante sia su dispositivi con processori x86 che su hardware con chip Apple M1.
Fonte: opennet.ru
