Zig 0.17 bringt inkrementelle Builds für die meisten x86_64-Linux-Projekte
Zig 0.17.0 ist am 1. Oktober erschienen. Laut den Release Notes stecken darin fünf Monate Arbeit von 206 Beteiligten mit 925 Commits. Der Zyklus dauerte länger als geplant; die größten Baustellen waren das Build-System und der Linker.
Inkrementelle Kompilierung wird für die meisten Linux-x86_64-Projekte brauchbar. Der im vorigen Release eingeführte neue ELF-Linker beherrscht inzwischen genug – statische und dynamische Bibliotheken, GOT-Erzeugung, DWARF-Debuginformationen, Symbolversionierung –, dass das Projekt inkrementelle Kompilierung nun für die meisten Projekte mit Ziel x86_64-linux erwartet. Mit zig build -fincremental --watch beobachtet das Build-System die Quelldateien und baut nur neu, was sich geändert hat. Allgemein ist der neue Linker noch nicht Standard, in diesem inkrementellen Fall wird er aber bereits verwendet; im nächsten Release soll der alte ELF-Linker verschwinden.
Das Build-System wird zweigeteilt. zig build führt die build.zig eines Projekts jetzt in einem eigenen Prozess aus, getrennt von dem Prozess, der Pakete verwaltet und den Build-Graphen abarbeitet. Dieser zweite Teil wird nach der Installation einmal mit Optimierungen gebaut und muss bei Änderungen an build.zig nicht neu entstehen. Die Konfiguration wird in ein kompaktes Binärformat serialisiert, das Teil eines neuen Build Server Protocol für Editoren und andere Werkzeuge ist; der frühere Weg, den Build-Runner zu forken, wird nicht mehr unterstützt. --print-configuration gibt die Konfiguration als .zon aus. Auch der Cache wurde umgebaut: Er kennt nun Verzeichnisse und einen Metadatenmodus, in dem geänderte Größe, Inode oder Änderungszeit immer als Fehlschlag gelten.
Eine Sprachänderung verlangt eine Prüfung von Hand. @bitCast interpretiert jetzt die logische Bitdarstellung eines Werts neu, unabhängig von der Byte-Reihenfolge. Casts zwischen Ganzzahlen und auf gepackte Structs verhalten sich wie bisher, Casts mit Arrays oder Vektoren können aber andere Ergebnisse liefern – laut Release Notes ohne Compilerfehler. Casts mit extern struct und extern union sind nicht mehr erlaubt. Entfernt wurden außerdem die Array-Multiplikation, void{}, i0 und das Capture bei errdefer; die C-Übersetzung wandert in ein externes Paket.
Im Zyklus hat das Projekt nach eigenen Angaben rund 25 Sprachvorschläge angenommen und rund 125 abgelehnt, als Schritt zur Stabilisierung vor 1.0. Weggefallen sind unter anderem die Ziele powerpc-linux-gnueabi[hf] und powerpc64-linux-gnu; 64-Bit-SPARC ist dafür nun allgemein nutzbar.

Warum das wichtig ist
Für Teams unter Linux ist der Rebuild im Watch-Modus der praktische Grund für das Update. Die @bitCast-Änderung ist der Grund, vorher die Notes zu lesen: Code, der Arrays oder Vektoren castet, besonders auf Big-Endian-Zielen, sollte von Hand geprüft werden, weil der Compiler ihn nicht markiert.