Zig v0.17.0 ist erschienen und vereint fünf Monate Arbeit von 206 Mitwirkenden aus 925 Commits in einer einzigen Version. Die Open-Source-Sprache und Toolchain für den Aufbau robuster, optimaler und wiederverwendbarer Software hat gerade einen wichtigen Meilenstein erreicht, und das Update zeigt die Dynamik des Projekts im Hinblick auf das geplante 1.0-Tag.
Die Release Notes sind umfangreich und decken alles von Änderungen der Sprachsyntax bis hin zu neuer Plattformunterstützung ab. Das Hauptmerkmal ist die Überarbeitung des Build-Systems, die das Build Server Protocol einführt. Der ELF-Linker wurde ebenfalls verbessert, sodass Inkrementelle Kompilierung für alle auf x86_64-linux erwartet wird.
Das Build-System – Überarbeitung
Die Überarbeitung des Build-Systems ist ein Hauptmerkmal dieser Version. Sie umfasst die Einführung des Build Server Protocols, das Teil einer größeren Anstrengung ist, das Build-System flexibler und einfacher zu erweitern.
Inkrementelle Kompilierung ist ein weiterer großer Erfolg. Die Verbesserungen des ELF-Linkers bedeuten, dass Änderungen effizienter behandelt werden. Die Erwartung ist, dass dies für alle auf x86_64-linux funktionieren wird.
Plattformunterstützung erweitet sich
Zig v0.17.0 fügt Unterstützung für mehrere neue Ziele hinzu, insbesondere im ARM-Bereich. aarch64-openbsd wird jetzt nativ in Zigs CI getestet, was eine hochwertige Unterstützung für die Zukunft gewährleistet. aarch64-freebsd- und aarch64-netbsd-CI-Jobs werden jetzt bei Pull-Requests ausgeführt, nicht nur bei Master-Pushes. aarch64-windows-Binaries, einschließlich des Zig-Compilers, wurden so angepasst, dass die resultierenden Binaries tatsächlich funktionieren.
loongarch32-linux-gnu[sf]-Ziele wurden hinzugefügt, und Unterstützung für sparc64-linux wurde zu Zig hinzugefügt. Der neue ELF-Linker bietet nun eine bessere Unterstützung für dieses Ziel als LLD, was einen bedeutenden Erfolg für das Projekt darstellt.
Es wurden mehrere andere Ziele hinzugefügt:
- arm-gba
- mipsel-psx
- powerpc-wiiu
- xtensa-linux)
Diese können derzeit nur über das C-Backend oder das experimentelle LLVM-Backend genutzt werden.
PowerPC-Systeme erleiden Rückschlag
Die Veröffentlichung reduziert zudem die Unterstützung für einige PowerPC-Systeme. Der Grund ist einfach: glibc unterstützt das „double-double“-Format für long double auf powerpc-linux-gnueabi[hf]-Systemen, und Zig hat dieses IBM-Format nie unterstützt und wird es wahrscheinlich auch nie unterstützen. Infolgedessen wird die Unterstützung für diese Systeme mit dieser Veröffentlichung aufgegeben.
Powerpc-linux-musleabi[hf]-Systeme bleiben unterstützt, da sie das IEEE-Format verwenden. Für powerpc64-linux-gnu hat Zig ausschließlich das Verlinken von ELFv2-Binaries für 64-Bit-PowerPC unterstützt, und glibc unterstützt ELFv2 nicht offiziell auf Big-Endian- oder IEEE-long-double-Systemen. Das bedeutet, dass auch diese Systeme wegfallen.
| Zielsystem) | Status) |
|---|---|
| powerpc-linux-gnueabi[hf]) | Aufgegeben aufgrund der glibc-„double-double“-Abhängigkeit |
| powerpc-linux-musleabi[hf]) | Weiterhin unterstützt, IEEE-Format |
| powerpc64-linux-gnu) | Aufgegeben, glibc unterstützt ELFv2 auf Big Endian nicht. |
Neue Hardware-Unterstützung
Auch spezifische Hardware-Varianten erhalten Beachtung. aarch64-haiku unterstützt cortex_a55. m68k- unterstützt M68030. mips64-openbsd unterstützt octeon. powerpc-netbsd unterstützt 750. powerpc64-freebsd unterstützt pwr8. powerpc64-linux unterstützt pwr8. powerpc64-openbsd unterstützt pwr9. s390x- unterstützt arch11. sparc- unterstützt generic. sparc-linux unterstützt v9. sparc64- unterstützt ultrasparc. xtensa-* unterstützt esp32.
Dies sind alles veraltete Zielplattformen, was bedeutet, dass der Compiler und die Standardbibliothek dort zwar die beste Unterstützung möglich leisten, diese aber voraussichtlich irgendwann entfernt werden wird.
Sprach- und Bibliotheksänderungen
Die Versionshinweise dokumentieren eine Reihe von Sprach- und Bibliotheksänderungen. Die Funktionen @bitCast, Änderungen@backingInt und @fromBackingInt wurden hinzugefügt. @SpirvType, @divCeil und @hasDecl wurden eingeführt. Letzteres gibt nur für Public Declarations comptime true zurück.
Mehrere Funktionen wurden vollständig entfernt. errdefer Capture wurde entfernt, ebenso wie i0. Das interne Schlüsselwort und die link_once Global Linkage wurden entfernt. debug.SafetyLock wurde zugunsten von Shared Lockingfmt.allocPrint entfernt, das in mem.Allocator umgezogen ist.
std.zon.parse wurde überarbeitet, und bit_set Variants wurden veraltet. Die verwalteten Einzelobjekte std.lang.Type und lang.OptimizeMode wurden durch lang.Optimize und lang.Optimize.runtimeSafety ersetzt. mem.eql und mem.findDiff wurden aktualisiert. Uri und net.HostName wurden hinzugefügt. Step.Options hat addOptionPathDirectory erlangt.
Der Weg zu 1.0
Die Versionshinweise beschreiben die Stabilisierungsarbeit als einen wichtigen Schritt auf der Roadmap, eine Voraussetzung für das Taggen von Zig 1.0. Seit der Veröffentlichung von Zig 0.16.0 wurden große Fortschritte bei der Stabilisierung der Sprache erzielt.
Die Zig Software Foundation, eine 501(c)(3) gemeinnützige Organisation, finanziert die Entwicklung. Spenden werden ermutigt, insbesondere wiederkehrende, um dem Kernteam mehr abrechenbare Stunden anzubieten. Die Foundation stellt außerdem Spendenquittungen aus und unterstützt die Migration von GitHub Sponsors über Every.org.
Was diese Veröffentlichung zeigt
Der Umfang der Veröffentlichung ist beeindruckend. Fünf Monate Arbeit von 206 Mitwirkenden über 925 Commits sind eine beachtliche Leistung. Die Tatsache, dass die Veröffentlichung trotz anfänglicher Vorhersage einer kürzeren Dauer substanziell ausgefallen ist, spricht für die Gesundheit des Projekts.
Die Plattformergänzungen sind bemerkenswert, da sie eine breite Palette von Hardware abdecken, von eingebetteten Systemen bis hin zu Server-Klassen-Architekturen. Die Entscheidung, nicht mehr unterstützte PowerPC-Targets aufzugeben, ist pragmatisch. Der technische Grund ist das „double-double“-Format von glibc, das Zig noch nie unterstützt hat und wahrscheinlich auch nie unterstützen wird.
Die Überarbeitung des Build-Systems und die Verbesserungen bei der inkrementellen Kompilierung sind Erfolge für Entwickler. Die veralteten Targets sind eine Erinnerung daran, dass Open-Source-Projekte schwierige Entscheidungen darüber treffen müssen, was sie pflegen. Bestenfalls-Support ist besser als nichts, aber es ist keine Verpflichtung.
Für alle, die Zig evaluieren, sind die Versionshinweise eine nützliche Übersicht darüber, was funktioniert und was nicht. Die Zielmatrix ist detailliert, und der Abschnitt „Roadmap“ legt den Weg zu 1.0 dar. Das Projekt macht stetige Fortschritte, und diese Veröffentlichung zeigt, wie das in der Praxis aussieht.
Die Veröffentlichung ist ein deutliches Signal dafür, dass Zig voranschreitet. Das Projekt stabilisiert sich, fügt neue Plattformen hinzu und streicht totes Gewicht. Der Weg zu 1.0 wird mit jeder Veröffentlichung klarer.
Quelle: “Zig v0.17.0,” ziglang.org.
Das Notizbuch abonnieren.
Die besten Geschichten des Tages und jedes neue Urteil, in klarem Deutsch, um sieben im Postfach. Eine Mail am Tag, nicht mehr.

