Lanzamento da linguaxe de programación Crystal 1.5

Publicouse o lanzamento da linguaxe de programación Crystal 1.5, cuxos desenvolvedores están tentando combinar a comodidade de desenvolver na linguaxe Ruby co alto rendemento da aplicación inherente á linguaxe C. A sintaxe de Crystal é próxima, pero non totalmente compatible con Ruby, a pesar de que algúns programas de Ruby se executan sen reelaborar. O código do compilador está escrito en Crystal e distribúese baixo a licenza Apache 2.0.

A linguaxe usa a comprobación de tipos estáticos, implementada sen necesidade de especificar explícitamente os tipos de variables e argumentos do método no código. Os programas Crystal compílanse en ficheiros executables, con avaliación de macros e xeración de código no momento da compilación. Nos programas Crystal, permítese conectar enlaces escritos en linguaxe C. A paralelización da execución de código realízase mediante a palabra clave "spawn", que permite executar unha tarefa en segundo plano en modo asíncrono, sen bloquear o fío principal, en forma de fíos lixeiros chamados fibras (Fiber).

A biblioteca estándar ofrece un gran conxunto de funcións xenéricas, incluíndo ferramentas para manexar CSV, YAML e JSON, compoñentes para crear servidores HTTP e compatibilidade con WebSocket. Durante o proceso de desenvolvemento, é conveniente usar o comando "crystal play", que xera unha interface web (localhost:8080 por defecto) para a execución de código interactivo na linguaxe Crystal.

Principais cambios:

  • O compilador engadiu unha comprobación da correspondencia entre os nomes dos argumentos na implementación do método abstracto e na súa definición. A falta de coincidencia de nomes xera agora un aviso: clase abstracta FooAbstract abstract def foo(número : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name: Int32): Nil ^— Aviso: o parámetro posicional 'nome' corresponde ao parámetro 'número' do método anulado FooAbstract#foo(número : Int32), que ten un nome diferente e pode afectar o paso do argumento nomeado
  • Cando asigna o valor dunha variable a un argumento dun método non tipificado, ese argumento agora está restrinxido polo tipo desa variable. clase Foo @x : Int64 def initialize(x) @x = x # o parámetro x será de tipo @x end end
  • Permítese engadir anotacións aos parámetros de métodos ou macros. def foo(@[MaybeUnused] x); fin #OK
  • Engadido soporte para usar constantes como índices e nomes en tuplas. KEY = "s" foo = {s: "String", n: 0} pon foo[KEY].size
  • Engadíronse novos métodos File#delete? á API de ficheiros para eliminar ficheiros e directorios. e Dir#delete?, que devolven false se o ficheiro ou directorio non existe.
  • Reforzouse a protección do método File.tempfile, que agora non permite caracteres nulos nas cadeas que forman un nome de ficheiro.
  • Engadiuse a variable de ambiente NO_COLOR para desactivar o resaltado na saída do compilador e do intérprete.
  • Mellorouse significativamente o traballo no modo intérprete.

Fonte: opennet.ru

Engadir un comentario