Lanzamiento del lenguaje de programación Crystal 1.2

Se ha publicado el lanzamiento del lenguaje de programación Crystal 1.2, cuyos desarrolladores están tratando de combinar la conveniencia del desarrollo en lenguaje Ruby con el alto rendimiento de las aplicaciones característico del lenguaje C. La sintaxis de Crystal es similar a la de Ruby, pero no es totalmente compatible, aunque algunos programas de Ruby se ejecutan sin modificaciones. El código del compilador está escrito en Crystal y distribuido bajo la licencia Apache 2.0.

El lenguaje utiliza verificación de tipos estáticos, implementada sin la necesidad de especificar explícitamente los tipos de variables y argumentos del método en el código. Los programas Crystal se compilan en archivos ejecutables, con macros evaluadas y código generado en tiempo de compilación. En los programas Crystal, es posible conectar enlaces escritos en C. La paralelización de la ejecución del código se lleva a cabo utilizando la palabra clave "spawn", que le permite ejecutar una tarea en segundo plano de forma asincrónica, sin bloquear el hilo principal, en forma de hilos livianos llamados fibras.

La biblioteca estándar proporciona un gran conjunto de funciones comunes, incluidas herramientas para procesar CSV, YAML y JSON, componentes para crear servidores HTTP y compatibilidad con WebSocket. Durante el proceso de desarrollo, es conveniente utilizar el comando “crystal play”, que genera una interfaz web (localhost:8080 por defecto) para la ejecución interactiva de código en lenguaje Crystal.

Cambios importantes:

  • Se agregó la capacidad de asignar una subclase de una clase genérica a un elemento de una clase principal. clase Foo(T); clase final Bar(T) < Foo(T); final x = Foo x = barra
  • Las macros ahora pueden usar un guión bajo para ignorar un valor en un bucle for. {% para _, v, i en {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% fin %}
  • Se agregó el método "file_exists?" a las macros. para comprobar la existencia de un archivo.
  • La biblioteca estándar ahora admite números enteros de 128 bits.
  • Se agregó el módulo Indexable::Mutable(T) con implementación de operaciones avanzadas para colecciones como BitArray y Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
  • Se agregó el método XML::Node#namespace_definition para extraer un espacio de nombres específico de XML.
  • Los métodos IO#write_utf8 y URI.encode han quedado obsoletos y deben reemplazarse por IO#write_string y URI.encode_path.
  • La compatibilidad con la arquitectura x32 de 86 bits se ha trasladado al segundo nivel (ya no se generan paquetes listos para usar). Se está preparando una transferencia al primer nivel de soporte para la arquitectura ARM64.
  • Se continúa trabajando para garantizar el soporte total para la plataforma Windows. Se agregó soporte para sockets de Windows.
  • Se ha agregado un paquete universal para macOS, que funciona tanto en dispositivos con procesadores x86 como en equipos con el chip Apple M1.

Fuente: opennet.ru

Añadir un comentario