Zig v0.17.0 está disponible, y contiene cinco meses de trabajo de 206 colaboradores a través de 925 commits en una sola versión. El lenguaje y la herramienta de código abierto para construir software robusto, óptimo y reutilizable acaba de alcanzar un hito importante, y la actualización muestra el impulso del proyecto antes de su etiqueta 1.0 planificada.
Las notas de la versión son extensas, cubriendo todo, desde cambios en la sintaxis del lenguaje hasta soporte para nuevas plataformas. La función principal es la reestructuración del Sistema de Construcción, que introduce el Protocolo del Servidor de Construcción. El Enlazador ELF también se ha mejorado hasta el punto en que se espera que la Compilación Incremental funcione para todos en x86_64-linux.
La Reestructuración del Sistema de Construcción.
La reestructuración del Sistema de Construcción es una función destacada de esta versión. Incluye la introducción del Protocolo del Servidor de Construcción, que forma parte de un esfuerzo mayor para hacer que el sistema de construcción sea más flexible y fácil de extender.
La Compilación Incremental es otra gran victoria. Las mejoras del Enlazador ELF significan que los cambios se manejan de manera más eficiente. Se espera que esto funcione para todos en x86_64-linux.
Soporte de Plataforma se Amplía.
Zig v0.17.0 agrega soporte para varios nuevos objetivos, particularmente en el espacio ARM. aarch64-openbsd ahora se prueba de forma nativa en el CI de Zig, lo que garantiza un soporte de alta calidad en el futuro. Los trabajos de CI de aarch64-freebsd y aarch64-netbsd ahora se ejecutan en solicitudes de extracción, no solo en pushes de master. Se han solucionado los binarios de aarch64-windows, incluidos el Compilador Zig, para que los binarios resultantes realmente funcionen.
Se agregaron los objetivos loongarch32-linux-gnu[sf], y se agregó soporte para sparc64-linux a Zig. El nuevo Enlazador ELF ahora tiene un mejor soporte para este objetivo que LLD, lo que es un logro significativo para el proyecto.
Se han agregado varios otros objetivos también:
- arm-gba
- mipsel-psx
- powerpc-wiiu
- xtensa-linux)
Estos solo pueden ejercerse actualmente a través del backend de C o el backend experimental de LLVM.
Los objetivos PowerPC sufren un revés
La versión también elimina el soporte para algunos objetivos PowerPC. La razón es simple: glibc solo admite el formato «double-double» para long double en los objetivos powerpc-linux-gnueabi[hf], y Zig nunca ha admitido ese formato de IBM y probablemente nunca lo hará. Como resultado, esta versión elimina el soporte para esos objetivos.
Los objetivos powerpc-linux-musleabi[hf] siguen estando soportados porque utilizan el formato IEEE. Para powerpc64-linux-gnu, Zig solo ha admitido la vinculación de binarios ELFv2 para PowerPC de 64 bits, y glibc no admite oficialmente ELFv2 en big endian o long double IEEE. Eso significa que también se eliminan esos objetivos.
| Objetivo) | Estado) |
|---|---|
| powerpc-linux-gnueabi[hf]) | Eliminado debido a la dependencia de glibc «double-double») |
| powerpc-linux-musleabi[hf]) | Sigue estando soportado, formato IEEE) |
| powerpc64-linux-gnu) | Descontinuado, glibc no es compatible con ELFv2 en big endian (1) |
Nuevo Soporte de Hardware (2)
Variantes de hardware específicas también están recibiendo atención. aarch64-haiku soporta cortex_a55. m68k- soporta M68030. mips64-openbsd soporta octeon. powerpc-netbsd soporta 750. powerpc64-freebsd soporta pwr8. powerpc64-linux soporta pwr8. powerpc64-openbsd soporta pwr9. s390x- soporta arch11. sparc- soporta generic. sparc-linux soporta v9. sparc64- soporta ultrasparc. xtensa-* soporta esp32. (3)
Estos son objetivos obsoletos, lo que significa que el compilador y la biblioteca estándar brindan soporte de mejor esfuerzo para ellos, pero se espera que este soporte se elimine eventualmente. (4)
Cambios de Lenguaje y Biblioteca (5)
Las notas de la versión documentan una serie de cambios de lenguaje y biblioteca. Se han agregado las funciones @bitCast, cambios@backingInt y @fromBackingInt. Se han introducido @SpirvType, @divCeil y @hasDecl. Este último devuelve verdadero solo para Declaraciones Públicas de tiempo de compilación. (6)
Se han eliminado varias características por completo. Se ha eliminado errdefer Capture, así como i0. Se han eliminado la palabra clave internal y el Linkage Global link_once. Se ha eliminado debug.SafetyLock en favor de Shared Lockingfmt.allocPrint, que se ha movido a mem.Allocator. (7)
std.zon.parse ha sido reestructurado y las Variantes bit_set han sido obsoletas. Managed Ones std.lang.Type y lang.OptimizeMode han sido reemplazados por lang.Optimize y lang.Optimize.runtimeSafety. mem.eql y mem.findDiff han sido actualizados. Uri y net.HostName han sido agregados. Step.Options ha ganado addOptionPathDirectory. (8)
El Camino a 1.0 (9)
Las notas de la versión describen el trabajo de estabilización como un paso clave en el mapa de ruta, un requisito antes de etiquetar Zig 1.0. Desde el lanzamiento de Zig 0.16.0, se ha logrado mucho progreso hacia la estabilización del lenguaje. (10)
The Zig Software Foundation, una organización sin fines de lucro 501(c)(3), financia el desarrollo. Se alientan las donaciones, especialmente las recurrentes, para ofrecer más horas facturables al equipo principal. La fundación también proporciona recibos de donación y apoya la migración desde GitHub Sponsors a través de Every.org. (11)
Lo Que Muestra Esta Lanzamiento (12)
La escala del lanzamiento es impresionante. Cinco meses de trabajo de 206 colaboradores a través de 925 commits es mucho trabajo de ingeniería. El hecho de que el lanzamiento haya resultado sustancial, a pesar de que originalmente se predijo que sería más corto, habla de la salud del proyecto.
Las adiciones a la plataforma son notables porque cubren una amplia gama de hardware, desde sistemas integrados hasta arquitecturas de clase servidor. La decisión de eliminar los objetivos PowerPC no compatibles es pragmática. La razón técnica es el formato «double-double» de glibc, que Zig nunca ha admitido y probablemente nunca lo hará.
La reestructuración del sistema de compilación y las mejoras en la compilación incremental son logros para los desarrolladores. Los objetivos obsoletos son un recordatorio de que los proyectos de código abierto deben tomar decisiones difíciles sobre lo que mantienen. El soporte a mejor esfuerzo es mejor que nada, pero no es un compromiso.
Para cualquier persona que esté evaluando Zig, las notas de lanzamiento son un mapa útil de lo que funciona y lo que no. La matriz de objetivos es detallada, y la sección de hoja de ruta describe el camino hacia la versión 1.0. El proyecto está avanzando de forma constante, y esta versión muestra cómo se ve eso en la práctica.
El lanzamiento es una señal clara de que Zig está avanzando. El proyecto se está estabilizando, agregando nuevas plataformas y eliminando peso muerto. El camino hacia la versión 1.0 se está volviendo más claro con cada lanzamiento.
Material fuente: “Zig v0.17.0”, ziglang.org.
Recibe El Cuaderno.
Las mejores historias del día y cada veredicto nuevo, en español claro, en tu correo a las siete. Un correo al día, nada más.

