Rilascio del linguaggio di programmazione Crystal 1.16

È stata pubblicata la versione 1.16 del linguaggio di programmazione Crystal, i cui sviluppatori cercano di combinare la facilità di sviluppo del linguaggio Ruby con le alte prestazioni tipiche del linguaggio C. La sintassi di Crystal è simile a quella di Ruby, ma non è completamente compatibile con essa, anche se alcuni programmi Ruby vengono eseguiti senza modifiche. Il codice del compilatore è scritto in Crystal e distribuito sotto licenza Apache 2.0.

Il linguaggio utilizza il controllo dei tipi statici, implementato senza la necessità di specificare esplicitamente i tipi delle variabili e degli argomenti dei metodi nel codice. I programmi in Crystal vengono compilati in file eseguibili, con calcolo dei macro e generazione del codice durante la compilazione. Nei programmi scritti in Crystal è possibile collegare binding scritti in C. La parallelizzazione dell'esecuzione del codice viene effettuata mediante 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 chiamati fiber.

La libreria standard fornisce un insieme di funzioni tipiche, tra cui strumenti per l'elaborazione di CSV, YAML e JSON, componenti per la creazione di server HTTP e supporto per WebSocket. Durante lo sviluppo, è possibile utilizzare il comando «crystal play», che genera un'interfaccia web (per impostazione predefinita localhost:8080) per l'esecuzione interattiva del codice nel linguaggio Crystal.

Principali modifiche:

  • È stato aggiunto il supporto sperimentale per l'esecuzione di thread leggeri (fiber) in contesti di esecuzione separati (Execution Contexts), il che consente un'esecuzione più efficiente dei compiti: il blocco dei thread in un contesto non ferma l'esecuzione in un altro. mt_context = Fiber::ExecutionContext::MultiThreaded.new(«worker-threads», 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new(«Gtk») do Gtk.main end gtk.wait
  • Nel metodo Slice.literal è stata garantita la visualizzazione del tipo di elementi contenuti nell'affettatore (slice), e aggiunto il supporto per l'esecuzione nell'interprete.
  • Nei macro sizeof e alignof è stata fornita informazione sui tipi stabili.
  • Nella libreria standard sono stati aggiunti nuovi metodi: Indexable#find, #find!, EventLoop#wait_readable e #wait_writable.
  • Nel compilatore è stata aggiunta la versione lunga dell'opzione «-o» — «—output» e implementata la possibilità di specificare una directory invece di un file (il nome del file sarà scelto in base al nome del file sorgente).
  • Nel generatore di documentazione è stata aggiunta la possibilità di includere nella documentazione oggetti privati e protetti, nonché oggetti in wrap di librerie (lib, fun, union, cstruct, esterno, tipo).
  • Nel metodo «File.match?» è stato introdotto un nuovo algoritmo per la corrispondenza dei percorsi dei file, che ha risolto alcuni problemi e limitazioni. Ad esempio, ora vengono gestite correttamente l'escape dei caratteri (la maschera «\\t» corrisponde a «\t», e non al carattere «t»), la separazione dei percorsi (la maschera «a**» copre «ab», ma non funziona per «ab/c», mentre la maschera «**/a» copre «a»), i modelli nidificati (la maschera «{[}]}» copre «}»), e i range (la maschera «[a-]» copre «-«).
  • Nei nomi dei parametri delle definizioni (defs), delle macro e dei blocchi sono stati dichiarati obsoleti i suffissi «?» e «!».
  • Nei metodi Enumerable#sum e #product è stata rimossa la determinazione automatica del tipo di valore restituito, se il tipo degli elementi è un'unione (union). Ora, quando si chiamano questi metodi, è necessario specificare esplicitamente il tipo; ad esempio, invece di scrivere «[1, 10000000000_u64].sum» bisogna scrivere «[1, 10000000000_u64].sum(0_u64)».
  • In HTTP::Request è garantito un corretto parsing delle parti dell'URL.
  • Aggiunto supporto per il set di compilatori LLVM 20.
  • Le chiamate LLVM::ABI e LLVM::TargetMachine#abi sono state dichiarate obsolete.

    Fonte: opennet.ru
Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS | ProHoster