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