Se ha lanzado una nueva versión de Crystal, un lenguaje de programación compilado con sintaxis Ruby, cuyas principales características son un runtime con un «event loop» integrado, donde todas las operaciones de entrada/salida son asíncronas, soporte para multihilo (que se activa mediante una bandera durante la compilación) y un trabajo extremadamente sencillo y conveniente con bibliotecas en C.
A partir de la versión 0.34.0, el lenguaje comienza oficialmente a avanzar firme hacia su primer lanzamiento verdadero (es decir, la versión 1.0).
En la nueva versión de Crystal se pueden destacar los siguientes cambios y mejoras por orden de importancia:
Se ha añadido una nueva biblioteca de registro al API Log, que, a diferencia de la anterior, puede dirigir mensajes a diferentes backends y filtrar estos mensajes de diversas formas dependiendo de la «fuente».
Los rudimentos del mundo del desarrollo en C, Errno y WinError, que se utilizaban para primitivas de entrada/salida, pasan al pasado gracias a la jerarquía de excepciones IO::Error (sin embargo, nadie prohíbe usar Errno por ahora).
Se ha eliminado la sustitución automática de else nil del operador case/when/else. Esto se hizo para evitar que el desarrollador omitiera accidentalmente una de las ramas when al hacer matching en casos deterministas como enums y al pasar por tipos de Union. Es decir, en términos más simples, este tipo de código ya no funcionará sin especificar otra when (when Char) o asignar else-rama:
a = 1 || ‘x’ || "foo"
case a
when Int32
# …
when String
# …
end
La opción del compilador disable_overflow ya no está disponible. Para operaciones con desbordamiento, utilice los métodos &+, &-, &*.
Array#fill ahora vuela más rápido que una bala, gracias a la sustitución de un ciclo torpe por un simple memset;
El gestor de shards (paquetes), que se llama, paradójicamente, shards, ahora utiliza un algoritmo más rápido y eficiente llamado Molinillo para la satisfacción de dependencias, que fue observado en CocoaPods (Swift) y Builder (Ruby).
Se ha añadido soporte para LLVM 10, lo que, en teoría, nos dará un incremento en rendimiento, estabilidad, etc.
… y muchas otras mejoras que, en mi opinión subjetiva, son menos significativas.
Cabe mencionar que Crystal es un lenguaje construido sobre LLVM que permite escribir aplicaciones a veces más rápido, más fácilmente y de manera más concisa que en sus "hermanos" interpretados, y al mismo tiempo genera un binario bastante ágil. En comparación con Golang, destaca por tener un OOP completamente funcional, soporte de genéricos y una sintaxis muy simple y comprensible. Su propósito es en gran medida análogo al de Nim, pero claramente está orientado a la aplicación práctica "aquí y ahora", gracias a lo cual cuenta en su arsenal de API con múltiples herramientas bien documentadas, convenientes y de calidad, respaldadas por los desarrolladores del lenguaje, y por lo tanto bastante estables.
Fuente: linux.org.ru
