Lanzamento da linguaxe de programación Crystal 1.2

Publicouse o lanzamento da linguaxe de programación Crystal 1.2, 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:

  • Engadida a posibilidade de asignar unha subclase dunha clase xenérica a un elemento dunha clase pai. clase Foo(T); clase final Bar(T) < Foo(T); final x = Foo x = Bar
  • Agora as macros poden usar un guión baixo para ignorar un valor nun bucle for. {% para _, v, i en {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% final %}
  • Engadiuse o método "file_exists?" ás macros. para comprobar a existencia dun ficheiro.
  • A biblioteca estándar agora admite números enteiros de 128 bits.
  • Engadiuse o módulo Indexable::Mutable(T) con implementación de operacións avanzadas para coleccións como BitArray e Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
  • Engadiuse o método XML::Node#namespace_definition para extraer un espazo de nomes específico de XML.
  • Os métodos IO#write_utf8 e URI.encode quedaron en desuso e deberían substituírse por IO#write_string e URI.encode_path.
  • O soporte para a arquitectura x32 de 86 bits trasladouse ao segundo nivel (xa non se xeran paquetes preparados). Estase preparando unha transferencia ao primeiro nivel de soporte para a arquitectura ARM64.
  • Continúa o traballo para garantir o soporte total para a plataforma Windows. Engadido soporte para sockets de Windows.
  • Engadiuse un paquete universal para macOS, que funciona tanto en dispositivos con procesadores x86 como en equipos co chip Apple M1.

Fonte: opennet.ru

Engadir un comentario