Llançament del llenguatge de programació Crystal 1.5

S'ha publicat el llançament del llenguatge de programació Crystal 1.5, els desenvolupadors del qual intenten combinar la comoditat del desenvolupament en el llenguatge Ruby amb l'alt rendiment de l'aplicació característica del llenguatge C. La sintaxi de Crystal és propera a Ruby, però no és totalment compatible, encara que alguns programes Ruby s'executen sense modificacions. El codi del compilador està escrit en Crystal i es distribueix sota la llicència Apache 2.0.

El llenguatge utilitza la verificació de tipus estàtica, implementada sense necessitat d'especificar explícitament els tipus de variables i els arguments del mètode al codi. Els programes Crystal es compilen en fitxers executables, amb macros avaluades i codi generat en temps de compilació. Als programes Crystal, és possible connectar enllaços escrits en C. La paral·lelització de l'execució del codi es realitza mitjançant la paraula clau "spawn", que permet executar una tasca en segon pla de manera asíncrona, sense bloquejar el fil principal, en forma de fils lleugers anomenats fibres.

La biblioteca estàndard ofereix un gran conjunt de funcions comunes, incloses eines per processar CSV, YAML i JSON, components per crear servidors HTTP i suport WebSocket. Durant el procés de desenvolupament, és convenient utilitzar l'ordre "crystal play", que genera una interfície web (localhost:8080 per defecte) per a l'execució interactiva de codi en el llenguatge Crystal.

Principals canvis:

  • El compilador ha afegit una comprovació de la correspondència dels noms dels arguments en la implementació d'un mètode abstracte i en la seva definició. Si hi ha una discrepància de nom, ara s'emet un avís: classe abstracta FooAbstract abstract def foo(número : Int32) : Nil end class Foo < FooAbstract def foo (nom : Int32) : Nil p name end end 6 | def foo(nom: Int32): Nil ^— Avís: el paràmetre posicional 'nom' correspon al paràmetre 'número' del mètode substituït FooAbstract#foo(número: Int32), que té un nom diferent i pot afectar el pas de l'argument amb nom
  • Quan s'assigna un argument a un mètode no tipificat al valor d'una variable, ara l'argument es limita al tipus d'aquesta variable. classe Foo @x : Int64 def initialize(x) @x = x # el paràmetre x s'escriurà @x end end
  • Permet afegir anotacions als paràmetres de mètodes o macros. def foo(@[MaybeUnused] x); final # D'acord
  • S'ha afegit suport per utilitzar constants com a índexs i noms en tuples. KEY = "s" foo = {s: "String", n: 0} posa foo[KEY].size
  • S'han afegit nous mètodes File#delete a l'API File per suprimir fitxers i directoris. i Dir#delete?, que retornen false si falta el fitxer o el directori.
  • S'ha reforçat la protecció del mètode File.tempfile, que ara no permet caràcters nuls a les línies que formen el nom del fitxer.
  • S'ha afegit la variable d'entorn NO_COLOR, que desactiva el ressaltat de color a la sortida del compilador i de l'intèrpret.
  • El treball en mode intèrpret s'ha millorat significativament.

Font: opennet.ru

Afegeix comentari