
Si Python es demasiado lento para ti, Crystal podría ser tu salvador
febrero 9, 2023
Aprender un nuevo lenguaje de programación puede abrir tu mente de maneras que nunca creíste posibles. Al igual que aprender un nuevo idioma humano como el español o el mandarín, aprendes a pensar en diferentes palabras y estructuras.
Accede a las culturas y comunidades de los hablantes y aprende cómo ven el mundo. Es gratificante, por decir lo menos.
Lo bueno de los lenguajes de programación es que el primero que aprendes siempre es el más difícil. Una vez que comprenda las estructuras básicas, como las cláusulas if y los bucles for, las verá aparecer en muchos idiomas nuevos que podría aprender.
¡Consigue tus entradas para el TNW València en marzo!
El corazón de la tecnología llega al corazón del Mediterráneo
Y, a diferencia de los lenguajes humanos, los nuevos lenguajes de programación son mucho más rápidos de aprender. Son más lógicos y tienen menos palabras, o debería decir comandos.
De ello se deduce que la mayoría de los programadores y científicos de datos dominan más de un lenguaje de programación.
Pueden tener un plato principal o un favorito. Pero la mayoría de los desarrolladores de software que conozco usan al menos cinco idiomas a la semana, si se cuentan los lenguajes de programación.
La mayoría de los programadores también intentan aprender un nuevo lenguaje de vez en cuando.
Es parte del trabajo. La codificación se trata de mantener la curiosidad.
caso de cristal
Crystal, según su publicidad, es un lenguaje rápido como C y fluido como Ruby.
La parte de su suavidad es cierta. Se compila y escribe estáticamente, lo que tiene sus propias ventajas y desventajas. Pero sobre todo, es muy parecido a Ruby en su estilo.
Personalmente, nunca he escrito un proyecto más grande en Ruby. Pero como desarrollador de Python bastante experimentado, ¡el código de Crystal siempre se ve muy claro!
Aquí hay un ejemplo de un bucle recursivo que calcula factoriales:
El comando suena un poco extraño para las personas que no están acostumbradas a Ruby. Es básicamente una versión impresa de mal gusto en otros idiomas. Hay algunas diferencias sutiles entre puts y print, pero no las analizaremos aquí.
Aparte de eso, este ejemplo parece bastante pitónico, ¿no?
Es similar para las cláusulas if:

Aparte de la expresión divertida a la que no están acostumbrados los nativos que no son de Ruby, nuevamente es muy legible.
En términos generales, la sintaxis de Crystal es clara, incluso cuando se trata de problemas más grandes y complejos.
Escritura estática
Crystal tiene tipado estático, pero es posible que haya notado que no hay muchos identificadores de tipo en los ejemplos anteriores. Esto se debe a que Crystal solo le pide que especifique el tipo de una variable si es ambigua.
Esta práctica, por supuesto, ayuda a los programadores a ser más productivos.
macros
Los lenguajes de tipo estático tienden a ser quisquillosos con las macros. Crystal, sin embargo, se sale con la suya.
Como muestra este ejemplo, puede usar una macro de Crystal para modificar un fragmento de código en tiempo de compilación a través de un razonamiento estático, basado en el contenido de otro fragmento de ese mismo código. Intenta hacerlo en C++ y fallarás o necesitarás más de 500 líneas de código.
¿O no es así, genio? Avísame si me equivoco…
Esto viene con algunas advertencias porque, como dice el refrán, un gran poder conlleva una gran responsabilidad. La escritura estática generalmente reduce algo de peligro, pero las cosas increíblemente poderosas (como las que permite Crystal) niegan esa protección un poco.
Sin errores Cero
Hablando de seguridad, Crystal tiene protecciones adicionales en otros lugares. Nil es un tipo separado para el compilador Crystal. Entonces, si intenta acceder a un método o contenedor que resulta ser nulo, el compilador le advertirá. Esto puede hacer que la compilación falle, pero al menos puede corregir el error antes de ejecutar un código potencialmente grande.
No más infierno de dependencia
Si alguna vez ha lidiado con un gran problema en Python, probablemente sepa cómo es el infierno de dependencia.
Un módulo de Python puede depender de algunos otros, y una vez que importa todos los módulos que necesita, se da cuenta de que las diferentes versiones del módulo no son compatibles. Ahora debe averiguar qué versiones usar para que todo encaje, y todo eso puede llevar horas cuando su proyecto tiene un tamaño determinado.
En Crystal, estos módulos se denominan fragmentos y se compilan en su ejecutable binario a través de enlaces estáticos. Podría entrar en detalles sobre esto, pero resumamos la historia: administrar las dependencias es mucho, mucho más fácil de esta manera.
El gran inconveniente: Crystal es pequeño
Crystal tuvo un momento en 2017 cuando saltó del puesto 60 al 32 en el índice TIOBE en solo un mes. Las razones de este ascenso meteórico son difíciles de decir, pero es muy probable que los creadores de Crystal hicieran un marketing considerable en ese momento y despertaran la curiosidad de los programadores de Ruby.
Sin embargo, el momento de gloria de Crystal no duró mucho. Al momento de escribir este artículo, Crystal no se encuentra ni cerca de los 50 principales lenguajes de programación en el índice TIOBE.
Debido a su creciente popularidad, algunas personas esperaban que pudiera ver niveles de popularidad similares a los de Rust.
Esto, sin embargo, no se materializó.
Los programadores expresaron su frustración con los proyectos de muestra o las bases de código. Además, la documentación parece un poco incompleta. Esto desanimó a los nuevos programadores en masa.
Y debido a esto, la comunidad de Crystal es tan pequeña que tendrá que esperar un tiempo para obtener ayuda si tiene algún problema. Simplemente no hay muchas respuestas en StackOverflow, GitHub y similares.
El otro inconveniente: Crystal no es tan rápido como prometió
Los creadores de Crystal querían que el lenguaje fuera tan rápido como C.
Esto puede ser cierto en casos aislados. Sin embargo, la mayoría de las veces, Crystal tarda aproximadamente el doble de tiempo en ejecutarse que C.
No es raro que los lenguajes de programación (o las empresas de tecnología, en realidad) tengan declaraciones de misión exageradas. Y, para ser justos, la mitad de rápido que C sigue siendo bastante rápido.
No obstante, Crystal está cumpliendo significativamente por debajo de su promesa original. Es tan obvio que no puedo culpar al desarrollador promedio por estar decepcionado.
Últimas palabras famosas: Crystal es solo para programadores experimentados
Me encanta explorar nuevos lenguajes de programación, pero prefiero lenguajes bien documentados con una comunidad grande y de apoyo. Muchos programadores sienten lo mismo.
Crystal tuvo la oportunidad de alcanzar la corriente principal, pero en general fracasó en los últimos años.
Eso no significa que no haya grandes casos de uso para Crystal. Esta podría ser una opción interesante para las personas que trabajan con tecnología blockchain. Puedes crear una criptomoneda bastante poderosa con Crystal.
Dicho esto, a menos que mejore la documentación, el marketing y el soporte general de la comunidad para Crystal, tampoco será una gran opción para el desarrollador promedio de blockchain.
Si quieres jugar con un lenguaje como Crystal, mejor trae algo de experiencia. Porque cuando te enfrentas a un problema, puede que no haya nadie que te ayude.
Este artículo fue escrito por Ari Joury y apareció originalmente en Medium. Puede leerlo aquí.