Rilascio del linguaggio di programmazione Crystal 1.5

È stato pubblicato il rilascio del linguaggio di programmazione Crystal 1.5, i cui sviluppatori stanno cercando di combinare la comodità dello sviluppo nel linguaggio Ruby con le elevate prestazioni applicative caratteristiche del linguaggio C. La sintassi di Crystal è vicina a Ruby, ma non completamente compatibile con, sebbene alcuni programmi Ruby vengano eseguiti senza modifiche. Il codice del compilatore è scritto in Crystal e distribuito sotto la licenza Apache 2.0.

Il linguaggio utilizza il controllo del tipo statico, implementato senza la necessità di specificare esplicitamente i tipi di variabili e gli argomenti del metodo nel codice. I programmi Crystal vengono compilati in file eseguibili, con le macro valutate e il codice generato in fase di compilazione. Nei programmi Crystal è possibile collegare collegamenti scritti in C. La parallelizzazione dell'esecuzione del codice viene effettuata utilizzando la parola chiave "spawn", che consente di eseguire un'attività in background in modo asincrono, senza bloccare il thread principale, sotto forma di thread leggeri chiamati fibre.

La libreria standard fornisce un ampio set di funzioni comuni, inclusi strumenti per l'elaborazione di CSV, YAML e JSON, componenti per la creazione di server HTTP e supporto WebSocket. Durante il processo di sviluppo, è conveniente utilizzare il comando “crystal play”, che genera un'interfaccia web (localhost:8080 per impostazione predefinita) per l'esecuzione interattiva del codice nel linguaggio Crystal.

Principali modifiche:

  • Il compilatore ha aggiunto un controllo per la corrispondenza dei nomi degli argomenti nell'implementazione di un metodo astratto e nella sua definizione. Se c'è una mancata corrispondenza del nome, viene emesso un avviso: abstract class 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 ^— Avvertenza: il parametro posizionale 'name' corrisponde al parametro 'number' del metodo sottoposto a override FooAbstract#foo(number : Int32), che ha un nome diverso e può influenzare il passaggio dell'argomento denominato
  • Quando si assegna un argomento a un metodo non tipizzato al valore di una variabile, l'argomento è ora vincolato al tipo di quella variabile. class Foo @x : Int64 def inizializza(x) @x = x # il parametro x verrà digitato @x end end
  • Consente di aggiungere annotazioni ai parametri di metodi o macro. def foo(@[ForseUnused] x); fine#OK
  • Aggiunto il supporto per l'utilizzo delle costanti come indici e nomi nelle tuple. KEY = "s" foo = {s: "String", n: 0} inserisce foo[KEY].size
  • Nuovi metodi File#delete? sono stati aggiunti all'API File per eliminare file e directory. e Dir#delete?, che restituiscono false se il file o la directory mancano.
  • È stata rafforzata la protezione del metodo File.tempfile che ora non ammette caratteri nulli nelle righe che compongono il nome del file.
  • Aggiunta la variabile d'ambiente NO_COLOR, che disabilita l'evidenziazione del colore nell'output del compilatore e dell'interprete.
  • Il lavoro in modalità interprete è stato notevolmente migliorato.

Fonte: opennet.ru

Aggiungi un commento