- Los expertos señalaban que el "código que puede ejecutarse en tiempo de compilación" era una "idea tonta", pero Andrew Kelley, creador de Zig, siguió adelante y lo implementó
- Años después, esto se convirtió en una de las características más poderosas de Zig
- Lo que en Zig se llama
comptime es código que debe ejecutarse en tiempo de compilación
- Los desarrolladores de Zig pueden aprovechar la capacidad de ejecutar código Zig durante la compilación para escribir código genérico y realizar metaprogramación, incluso sin soporte para genéricos/plantillas
2 comentarios
Ya hay un problema desde el primer párrafo... En el ámbito de los lenguajes de programación, el cómputo en tiempo de compilación es una de las formas de implementar metaprogramación, lo que se conoce como programación multietapa. No es una idea tonta en absoluto.
En lenguajes como C++, que terminaron implementando programación multietapa "por accidente", surge el problema de que el código cambia drásticamente entre cada etapa (en este caso, tiempo de compilación y tiempo de ejecución) —C++ ahora tiene
constexpr, pero sigue quedándose corto en varios aspectos—. Zig, en cambio, fue diseñado desde el principio teniendo en mente la programación multietapa, por lo que tiene la ventaja de permitir usar casi el mismo código en tiempo de compilación y en tiempo de ejecución, junto con la desventaja de que hay pocas cosas que puedan predecirse en tiempo de compilación.O sea... parece que se puede entender más o menos como que primero se ejecuta en tiempo de compilación mediante pruebas inevitables como
unittest,y así se adelantan a errores de compilación cosas que podrían terminar siendo errores en tiempo de ejecución...
Por lo que vi por encima en la documentación y en preguntas y respuestas, también resulta bastante atractivo que pueda reemplazar a C como drop-in. A diferencia de Rust, está bueno que la sintaxis sea simple. Claro, no será tan seguro como Rust, pero... da la impresión de que usando Rust se siente un poco menos esa sensación de estar haciendo overengineering. También se menciona mucho a Go como punto de comparación, y supongo que habrá situaciones en las que Zig, al no tener runtime, resulte menos pesado. Sobre todo si se baja más al bajo nivel, o si no hace falta manejar una gran cantidad de solicitudes, podría terminar siendo una opción que uno elija antes que Go...
Así que, si logra posicionarse bien entre Rust y Go, me da la impresión de que podría ser una opción bastante buena, incluso más de lo esperado.