Disponibile il linguaggio di programmazione Crystal 1.0

È stato rilasciato il linguaggio di programmazione Crystal 1.0. Il rilascio è segnato come il primo significativo, che riassume 8 anni di lavoro e segna la stabilizzazione del linguaggio e la sua prontezza per l'uso in progetti di lavoro. Nella ramificazione 1.x sarà mantenuta la compatibilità retroattiva e si garantisce l'assenza di modifiche nel linguaggio e nella libreria standard che influenzino negativamente la compilazione e il funzionamento del codice esistente.

Le versioni 1.0.y includeranno solo correzioni di bug, mentre le versioni 1.x.0 offriranno nuove funzionalità e cambiamenti significativi, mantenendo la compatibilità con il codice. Nuove idee e cambiamenti potenzialmente non compatibili saranno sviluppati in una ramificazione separata, sulla quale sarà successivamente basato il rilascio di Crystal 2.0. Alcune funzionalità di Crystal 1.0 sono dichiarate come preliminari e, nonostante siano presenti nella ramificazione 1.0, non sono supportate ufficialmente. Tra queste funzionalità ci sono la monoprocessualità, il funzionamento sulla piattaforma Windows e l'uso su sistemi con processori ARM.

Ricordiamo che gli sviluppatori di Crystal cercano di combinare la facilità di sviluppo del linguaggio Ruby con l'alta prestazione delle applicazioni, tipica del linguaggio C. La sintassi di Crystal è simile a quella di Ruby, ma non è completamente compatibile con essa, nonostante alcune applicazioni ruby possano essere eseguite senza modifiche. Il codice del compilatore è scritto in linguaggio Crystal e distribuito con licenza Apache 2.0.

Nel linguaggio viene applicato 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 la valutazione delle macro e la generazione di codice durante la compilazione. Nei programmi in linguaggio Crystal è consentito includere bindings scritti in linguaggio C. La parallelizzazione dell'esecuzione del codice avviene tramite la parola chiave "spawn", che permette di avviare un'attività in background in modalità asincrona, senza bloccare il thread principale, sotto forma di thread leggeri, chiamati fiber.

La libreria standard offre un ampio set di funzioni standard, inclusi strumenti per la gestione di CSV, YAML e JSON, componenti per la creazione di server HTTP e supporto per WebSocket. Durante lo sviluppo, è comodo utilizzare il comando «crystal play» che crea un'interfaccia web (localhost:8080 per impostazione predefinita) per l'esecuzione interattiva del codice in Crystal.

Variazioni principali:

  • Negli array è consentito l'accesso indicizzato a elementi di tipi diversi, poiché il compilatore ha informazioni sul tipo di ogni elemento. Ad esempio: tuple = {1, «hello», ‘x’} v = tuple[0..1] # restituirà {1, «hello»} typeof(v) # => Tuple(Int32, String)
  • Nelle stringhe e nei literali carattere è vietato l'uso delle abbreviazioni surrogate nelle sequenze di escape Unicode, come «\uD834». Per codificare valori arbitrari, si deve utilizzare la notazione «\x».
  • Nella libreria standard è stata rimossa una grande porzione di definizioni, macro e metodi precedentemente contrassegnati come obsoleti. Inclusi i metodi Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill, ecc.
  • Negli macro getter e property ora è obbligatorio specificare il tipo di ritorno.
  • Il metodo di arrotondamento predefinito è stato cambiato in TIES_EVEN («arrotondamento del banchiere», al numero intero più vicino e, in situazioni critiche, al numero pari più vicino). È stato aggiunto un parametro RoundingMode in Number#round per scegliere il metodo di arrotondamento. Tra i metodi disponibili: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
  • Nelle collezioni sono supportati Enumerable#flat_map e Iterator#flat_map con elementi di tipi misti.
  • Nella serializzazione delle sequenze Enum vengono ora utilizzate rappresentazioni in forma di stringhe con trattini bassi.
  • I tipi definiti nel modulo XML sono stati convertiti da struct a class.
  • Per motivi di sicurezza, è stato interrotto il decodifica dei nomi dei Cookie, così come la codifica e la decodifica dei valori dei Cookie (la ricodifica è stata trasferita ai framework e alle applicazioni). Il metodo HTTP::Cookies.from_headers è stato suddiviso in due varianti per server e i client.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster