Lanzamiento del lenguaje de programación Crystal 1.16

Se ha publicado el lanzamiento del lenguaje de programación Crystal 1.16, 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ática, que se implementa 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 realiza utilizando la palabra clave "spawn", que permite ejecutar una tarea en segundo plano en modo asincrónico sin bloquear el hilo principal, en forma de hilos ligeros llamados fibras.

La biblioteca estándar proporciona un conjunto de funciones típicas, incluyendo herramientas para procesar CSV, YAML y JSON, componentes para crear servidores HTTP y compatibilidad con WebSockets. Durante el desarrollo, puede usar el comando "crystal play", que crea una interfaz web (localhost:8080 por defecto) para la ejecución interactiva de código Crystal.

Cambios importantes:

  • Se agregó soporte experimental para ejecutar subprocesos livianos (fibra) en contextos de ejecución separados (Contextos de ejecución), lo que permite una ejecución paralela más eficiente de tareas: bloquear subprocesos en un contexto no detiene la ejecución en otro. mt_context = Fiber::ExecutionContext::MultiThreaded.new(«worker-threads», 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new(«Gtk») do Gtk.main end gtk.wait
  • El método Slice.literal ahora proporciona inferencia de tipo para los elementos contenidos en una porción y agrega soporte para trabajar en un intérprete.
  • Las macros sizeof y alignof proporcionan información sobre los tipos estables.
  • Se han agregado nuevos métodos a la biblioteca estándar: Indexable#find, #find!, EventLoop#wait_readable y #wait_writable.
  • El compilador tiene una versión larga de la opción "-o", "--output", y se ha implementado la capacidad de especificar un directorio en lugar de un archivo (el nombre del archivo se seleccionará de acuerdo con el nombre del archivo con el código).
  • El generador de documentación ahora tiene la capacidad de incluir objetos privados y protegidos, así como objetos en enlaces de biblioteca (lib, fun, union, cstruct, external, type) en la documentación.
  • En el archivo "File.match?" Método Se ha implementado un nuevo algoritmo de coincidencia de rutas de archivos, que ha eliminado algunos problemas y limitaciones. Por ejemplo, el escape de caracteres (la máscara "\\t" coincide con "\t" pero no con el carácter "t"), la división de rutas (la máscara "a**" coincide con "ab" pero falla para "ab/c", mientras que la máscara "**/a" coincide con "a"), los patrones anidados (la máscara "{[}]}" coincide con "}") y los rangos (la máscara "[a-]" coincide con "-") ahora se manejan correctamente.
  • Los sufijos "?" Se han dejado obsoletos en los nombres de parámetros en definiciones (defs), macros y bloques. Y "!".
  • En los métodos Enumerable#sum y #product, se ha eliminado la determinación automática del tipo de valor de retorno si el tipo de elemento es una unión. Al llamar a estos métodos, ahora debe especificar explícitamente el tipo; por ejemplo, en lugar de "[1, 10000000000_u64].sum", debe escribir "[1, 10000000000_u64].sum(0_u64)".
  • HTTP::Request garantiza el análisis correcto de las partes de la URL.
  • Se agregó soporte para el paquete de compiladores LLVM 20.
  • Las llamadas a LLVM::ABI y LLVM::TargetMachine#abi han quedado obsoletas.

    Fuente: opennet.ru

Añadir un comentario