Zig 0.17.0 Release Notes
De ontwikkeling van Zig wordt gefinancierd via de Zig Software Foundation, een non-profitorganisatie (501(c)(3)).
Deze release bevat vijf maanden werk, met bijdragen van 206 verschillende ontwikkelaars, verdeeld over 925 commits. Hoewel werd voorspeld dat deze cyclus korter zou zijn, is de release aanzienlijk geworden. Het build-systeem is herzien, inclusief de introductie van het Build Server Protocol, en de ELF Linker is verbeterd tot een punt waarop we verwachten dat incrementele compilatie voor iedereen op x86_64-linux zal werken.
Ondersteuning voor Targets
Zig ondersteunt een breed scala aan architecturen en besturingssystemen. De onderstaande secties behandelen de targets waarvoor Zig programma's kan bouwen.
Belangrijke wijzigingen
- aarch64-openbsd: Wordt nu native getest in de CI van Zig, wat zorgt voor hoogwaardige ondersteuning in de toekomst.
- aarch64-freebsd en aarch64-netbsd: CI-jobs draaien nu ook op pull requests, naast master-pushes.
- aarch64-windows: Er is een workaround geïmplementeerd voor een LLVM-bug die de meeste binaire bestanden brak, inclusief de Zig Compiler.
- aarch64-openbsd: De compiler past nu verplichte code-hardening technieken toe zodat de resulterende binaries daadwerkelijk werken.
- 32-bit ARM en SPARC: Zig biedt nu stack traces bij crashes en mislukte assertions.
- AArch64: Zig handelt nu pointer-authenticatie opcodes af tijdens stack unwinding.
- loongarch32-linux-gnu[sf]: Ondersteuning is toegevoegd.
- 64-bit SPARC (vooral sparc64-linux): De ondersteuning is nu algemeen bruikbaar, grotendeels dankzij de nieuwe ELF linker die betere ondersteuning biedt dan LLD.
- x32 en N32 ABI's: De Zig Standard Library is geporteerd naar deze niche ILP32 ABI's op respectievelijk x86-64 en 64-bit MIPS. Hiermee kan de 64-bit instructieset worden gebruikt met 32-bit pointers om geheugengebruik te verlagen en cache-benutting te verbeteren.
- Gameconsoles: Target-informatie is toegevoegd voor
aarch64-switch,arm-gba,mipsel-psxenpowerpc-wiiu. - xtensa-linux: Vroege ondersteuning is toegevoegd via de C-backend of de experimentele LLVM-backend.
- C-backend ondersteuning: De Standard Library ondersteunt nu
arc[eb]-linux,csky-linuxenm88k-openbsd. - No-libc ondersteuning: De Standard Library ondersteunt nu
microblaze[el]-linux,sh[eb]-linuxensparc-linux. - PowerPC: Zig dwingt nu
-mabi=ieeelongdoubleaf voor alle PowerPC-targets. Hierdoor vervalt de ondersteuning voorpowerpc-linux-gnueabi[hf](omdat glibc daar alleen het "double-double" formaat ondersteunt), maarpowerpc-linux-musleabi[hf]blijft ondersteund. - powerpc64-linux-gnu: Ondersteuning is verwijderd omdat Zig alleen ELFv2-binaries voor 64-bit PowerPC ondersteunt, en glibc dit niet officieel ondersteunt op big endian of met IEEE long double.
- CPU-detectie: De mogelijkheid om het native CPU-model en de functies te detecteren is sterk verbeterd voor bijna elke architectuur op elk ondersteund OS.
Gewijzigde baseline CPU-modellen
aarch64-haiku: cortex_a55m68k-*: M68030mips64-openbsd: octeonpowerpc-netbsd: 750powerpc64-freebsd: pwr8powerpc64-linux: pwr8powerpc64-openbsd: pwr9s390x-*: arch11sparc-*: genericsparc-linux: v9sparc64-*: ultrasparcxtensa-*: esp32
In de target query-syntax vindt detectie van de native libc-versie nu alleen plaats als de triple daadwerkelijk native libc gebruikt (d.w.z. wanneer het ABI-component wordt weggelaten).
Tier-Systeem
De ondersteuning van Zig is onderverdeeld in vier tiers, waarbij Tier 1 het hoogste niveau is. Het doel is dat Tier 1-targets nul uitgeschakelde tests hebben.
Tier 1
- Alle niet-experimentele taalfuncties werken correct.
- De compiler kan machinecode genereren zonder afhankelijk te zijn van LLVM.
- De geïntegreerde fuzzer werkt op dit target (indien van toepassing).
Tier 2
- De cross-platform abstracties van de Standard Library zijn geïmplementeerd.
- Mislukte assertions en crashes produceren stack traces.
- libc is beschikbaar, ook bij cross-compilatie (indien van toepassing).
- CI-machines bouwen de module-tests bij elke push.
Tier 3
- De compiler kan machinecode genereren via een externe backend zoals LLVM.
- De linker kan object-bestanden, libraries en executables produceren.
Tier 4
- De compiler kan assembly of C-broncode genereren.
Ondersteuningstabel
| Tier | Target | Code Gen. | Linker | Lang. Feat. | Std. Lib. | Stack Traces | Fuzzer | libc | CI |
|---|---|---|---|---|---|---|---|---|---|
| 1 | x86_64-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64[_be]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64-maccatalyst | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64-macos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64[_be]-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | aarch64-windows | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | arm-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | arm[eb]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | arm[eb]-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | arm-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | hexagon-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | loongarch32-linux | � | |||||||
| ❔ | � | ||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | loongarch64-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | mips[el]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | mips[el]-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | mips64[el]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | mips64[el]-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | powerpc-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | powerpc-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | powerpc-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | powerpc64[le]-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | powerpc64[le]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | powerpc64-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | riscv32-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | riscv32-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | � | ||||||||
| 2 | riscv64-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | � | ||||||||
| 2 | riscv64-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | riscv64-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | � | ||||||||
| 2 | riscv64-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | s390x-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | sparc64-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | thumb[eb]-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | wasm32-wasi | � | |||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | ❌ | � | |||||||
| � | |||||||||
| � | |||||||||
| 2 | x86-linux | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ⚠️ | � | ||||||||
| 2 | x86-windows | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86_64-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86_64-maccatalyst | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | � | ||||||||
| 2 | x86_64-macos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ⚠️ | � | ||||||||
| 2 | x86_64-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86_64-openbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 2 | x86_64-windows | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| � | |||||||||
| 3 | aarch64-haiku | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | aarch64-ios | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | aarch64-serenity | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | aarch64-tvos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | aarch64-visionos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | aarch64-watchos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | arm-haiku | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | mips64[el]-netbsd | � | |||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | ❌ | � | |||||||
| 3 | riscv64-haiku | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | riscv64-serenity | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | thumb-windows | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 3 | wasm64-wasi | � | |||||||
| ❔ | ❌ | ⚠️ | ❌ | ❌ | ❌ | � | |||
| 3 | x86-freebsd | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 3 | x86-haiku | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | x86-illumos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 3 | x86_64-dragonfly | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | x86_64-haiku | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | x86_64-illumos | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 3 | x86_64-serenity | � | |||||||
| � | |||||||||
| � | |||||||||
| � | |||||||||
| ❔ | ❌ | ❌ | � | ||||||
| 4 | alpha-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 4 | alpha-netbsd | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 4 | alpha-openbsd | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 4 | arc[eb]-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 4 | csky-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 4 | hppa-linux | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ❌ | � |
| 4 | hppa-netbsd | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | hppa-openbsd | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | hppa64-linux | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ❌ | � |
| 4 | m68k-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 4 | m68k-netbsd | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 4 | m88k-openbsd | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 4 | microblaze[el]-linux | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | or1k-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | ❌ | ❌ | � | ||||||
| 4 | sh[eb]-linux | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | sh[eb]-netbsd | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | sh-openbsd | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
| 4 | sparc-linux | ❌ | ❔ | � | |||||
| � | |||||||||
| ❌ | � | ||||||||
| ❌ | � | ||||||||
| 4 | sparc-netbsd | ❌ | ❔ | � | |||||
| ❌ | ❌ | � | |||||||
| ❌ | � | ||||||||
| 4 | sparc64-netbsd | ⚠️ | � | ||||||
| � | |||||||||
| ❌ | � | ||||||||
| � | |||||||||
| ❌ | � | ||||||||
| 4 | sparc64-openbsd | ⚠️ | � | ||||||
| � | |||||||||
| ❌ | ❌ | � | |||||||
| ❌ | � | ||||||||
| 4 | xtensa[eb]-linux | ❌ | ❔ | � | |||||
| ❌ | ❌ | ❌ | ❌ | � | |||||
OS Versie-eisen
De Zig Standard Library heeft minimale versie-eisen voor sommige ondersteunde besturingssystemen:
| OS | Versie |
|---|---|
| Darwin | 15.0+ |
| DragonFly BSD | 6.4+ |
| FreeBSD | 14.0+ |
| Linux | 5.10+ |
| NetBSD | 10.1+ |
| OpenBSD | 7.8+ |
| Windows | 10+ |
Aanvullende Platforms
Zig biedt diverse niveaus van ondersteuning voor deze targets, waarvoor het tier-systeem niet volledig van toepassing is: aarch64-driverkit, aarch64[be]-freestanding, aarch64-fuchsia, aarch64-hurd, aarch64-switch, aarch64-uefi, alpha-freestanding, amdgcn-amdhsa, amdgcn-amdpal, amdgcn-mesa3d, arc[eb]-freestanding, arm[eb]-freestanding, arm-3ds, arm-fuchsia, arm-gba, arm-uefi, arm-vita, avr-freestanding, bpf(eb,el)-freestanding, csky-freestanding, ez80-freestanding, ez80-tios, hexagon-freestanding, hppa[64]-freestanding, kalimba-freestanding, kvx-freestanding, lanai-freestanding, loongarch(32,64)-freestanding, loongarch(32,64)-uefi, m68k-freestanding, m88k-freestanding, microblaze[el]-freestanding, mips[64][el]-freestanding, mipsel-psx, mipsel-psp, msp430-freestanding, nvptx[64]-cuda, nvptx[64]-nvcl, or1k-freestanding, powerpc-wiiu, powerpc[64][le]-freestanding, powerpc64-ps3, propeller-freestanding, riscv(32,64)[be]-freestanding, riscv(32,64)-uefi, riscv64-fuchsia, riscv64-hurd, s390x-freestanding, sh[eb]-freestanding, sparc[64]-freestanding, spirv(32,64)-opencl, spirv(32,64)-opengl, spirv(32,64)-vulkan, spork8-freestanding, thumb[eb]-freestanding, thumb-fuchsia, thumb-gba, thumb-vita, ve-freestanding, wasm(32,64)-emscripten, wasm(32,64)-freestanding, x86[16,64]-freestanding, x86[64]-hurd, x86[64]-uefi, x8664-driverkit, x8664-fuchsia, x8664-plan9, x8664-ps4, x8664-ps5, xcore-freestanding, xtensa[eb]-freestanding.
Taalwijzigingen
Vooruitgang in Taalstabiliteit
Sinds de release van Zig 0.16.0 is er veel vooruitgang geboekt in het stabiliseren van de taal. Dit is een cruciale stap in de roadmap naar Zig 1.0. Er zijn ongeveer 25 taalvoorstellen geaccepteerd en 125 afgewezen.
Wijzigingen aan @bitCast
Zig 0.17.0 wijzigt de definitie van de @bitCast builtin.
De nieuwe definitie is dat @bitCast de logische bit-representatie van een waarde herinterpreteert als een ander type. Dit geldt voor:
void,bool.- Integer-types (behalve
comptime_int). - Floating-point types (behalve
comptime_float). - Integer-backed types:
enum(T),packed struct(T), enpacked union(T). - Arrays of vectoren van bovenstaande types.
Dit betekent dat de nieuwe @bitCast volledig endian-agnostisch is. Casts tussen extern struct of extern union types zijn niet langer toegestaan; gebruik hiervoor @ptrCast of een extern union.
Voorbeeld van migratie:
Foutieve code:
const TwoBytes = extern struct { b0: u8, b1: u8 };
const bytes: TwoBytes = .{ .b0 = 0x12, .b1 = 0xAB };
const int: u16 = @bitCast(bytes); // Error in 0.17.0
Correcte code:
const TwoBytes = extern struct { b0: u8, b1: u8 };
const bytes: TwoBytes = .{ .b0 = 0x12, .b1 = 0xAB };
const int_ptr: *align(1) const u16 = @ptrCast(&bytes);
const int = int_ptr.*;
Formeel Gespecificeerde en Gefuzzed Grammar
Er is een tool geschreven die de grammar.peg van Zig gebruikt om een recursive descent parser te genereren. Deze wordt gebruikt als orakel voor fuzz-testing en vergeleken met de handgeschreven std.zig.Ast.parse(). Dit zorgt voor één enkele bron van waarheid voor de grammatica.
C-translatie verplaatst naar extern pakket
@cImport is verwijderd. std.Build.Step.TranslateC is deprecated ten gunste van een expliciete package dependency op het officiële ZSF translate-c pakket.
Update-instructie: zig fetch --save git+https://codeberg.org/ziglang/translate-c
Nieuwe builtins: @backingInt en @fromBackingInt
Deze vervangen de deprecated @intFromEnum en @enumFromInt.
@backingInt: Werkt met alle enums, bitpacks met expliciete backing integer types, en tagged unions (geeft de integer van de actieve tag terug).@fromBackingInt: Inferert het resultaattype (enum of bitpack). Bij enums resulteert een ongeldige tagwaarde in "Illegal Behavior" (veiligheidscheck).
@SpirvType toegevoegd
Voor SPIR-V targets kunnen nu types zoals images en samplers worden gedeclareerd die geen equivalent hebben in het normale Zig-type-systeem.
Verwijdering Array Vermenigvuldigingssyntax
De syntax a ** b is verwijderd. Gebruik nu @splat.
Migratie:
- Oud:
var result = [1]u8{0} ** window_size; - Nieuw:
var result: [window_size]u8 = @splat(0);
@divCeil toegevoegd
De nieuwe @divCeil builtin voert integer-deling uit afgerond naar positieve oneindigheid. Voorbeeld: @divCeil(5, 3) == 2 en @divCeil(-5, 3) == -1.
Wijziging in @hasDecl
@hasDecl geeft nu alleen true terug voor publieke declaraties, ongeacht in welk bestand de controle wordt uitgevoerd.
Slices en Array Pointers
Het is nu toegestaan om een slice te derefereren of te coercen naar een array pointer van comptime lengte.
const slice: []const u16 = &.{ 1, 2, 3 };
const array: [3]u16 = slice.*;
const array_ptr: *const [3]u16 = slice;
Overige taalwijzigingen
void{}syntax verwijderd: Gebruik{}.errdefercapture verwijderd: De capture|err|is niet langer toegestaan. Splits de functie in twee delen om de fout afzonderlijk af te handelen.i0verwijderd: Dit type was onzinnig; vervang het dooru0.- Global Linkage:
internalenlink_oncetags vanstd.lang.GlobalLinkagezijn verwijderd.
Standard Library
Nieuwe functies en verbeteringen
f128ondersteuning voor@expen@exp2.std.Io.Semaphore.waitTimeouttoegevoegd.std.spirvhelpers voor images toegevoegd.ArrayHashMap.setKeyoptimalisatie (herberekent niet langer de volledige index).std.Target.parseCpuModelgeeft nu een optional terug in plaats van een error.std.debug.Pdb: deduplicatie van inline bronlocaties.std.fs.path: appending varianten voorrelativeenresolvetoegevoegd.
Deprecations
std.heap.memorypool.AlignedManaged$\to$std.heap.memorypool.Aligned.std.heap.memorypool.ExtraManaged$\to$std.heap.memorypool.Extra.std.builtin$\to$std.lang.std.meta.fieldInfo,fieldNames,fieldTypes$\to$@typeInfo.std.DoublyLinkedList.pop$\to$std.DoublyLinkedList.popLast.std.gpu$\to$std.spirv.- Diverse
std.asciienstd.bit_setfuncties zijn hernoemd of verwijderd ten gunste van modernere varianten.
StackFallbackAllocator Herzien
StackFallbackAllocator is nu flexibeler. De buffer wordt nu als argument meegegeven in plaats van via een generiek type.
Migratie:
- Oud:
var stack = std.heap.StackFallbackAllocator(Size).init(gpa); - Nieuw:
var stackbuf: [Size]Item = undefined; var stack = std.heap.StackFallbackAllocator.init(@ptrCast(&stackbuf), gpa);
Introductie SafeAllocator
std.heap.DebugAllocator is vervangen door SafeAllocator, een thread-safe allocator met garanties tegen leaks, double frees en memory corruption. Elke allocatie wordt gevolgd door een AllocFooter met metadata en checksums.
ArrayList Wijzigingen
getLastOrNull$\to$last.getLast$\to$lastin combinatie met.?.lastPtrtoegevoegd (retourneert?*T).
Overige Std Lib wijzigingen
debug.SafetyLock: Ondersteuning voor shared locking toegevoegd (lockShared/unlockShared).fmt.allocPrint: Verplaatst naarmem.Allocator(nuarena.print).- Formatted Printing:
{q}specifier heeft nu relaxed escaping voor UTF-8;{qf}is geïntroduceerd voor het ontsnappen vanformat()output. std.zon.parse: Herzien om struct-args te gebruiken en resultaten vanuit een arena te alloceren.bit_set: Types hernoemd voor consistentie (bijv.IntegerBitSet$\to$Integer).std.lang.Type: Gebruikt nu Struct-Of-Arrays stijl bij type-reflectie.lang.OptimizeMode: Hernoemd naarlang.Optimize(bijv.ReleaseSafe$\to$safe).@import("builtin"): Constanten zoalscpu,osenabizijn deprecated; gebruiktarget.cpu,target.os, etc.mem.eqlenmem.findDiff: Correcte afhandeling van floats (geen short-circuiting meer bij NaN).Uriennet.HostName: Ontkoppeld.Uri.getHostis verplaatst naarHostName.fromUri.
Build Systeem
Maker en Configurer Processen
zig build draait de build.zig code nu in een apart executable (het "maker" proces), gescheiden van het proces dat package management en de build graph uitvoert. Dit maakt zig build sneller.
Herzien Cache-systeem
- Directory ondersteuning: Wijzigingen in directories kunnen nu een cache-miss veroorzaken.
- Metadata mode: Cache-miss op basis van grootte, inode of mtime, ongeacht de inhoud.
- Binair formaat: Gebruikt nu een binair formaat, wat resulteert in $\approx 25\%$ kleinere bestanden en snellere cache-hits (5-10%).
Configure Cache Poisoning
Het concept "cache poisoning" is geïntroduceerd voor situaties waarin de configuratie-logica side-effects heeft die niet door het cachesysteem gevolgd kunnen worden (bijv. het aanroepen van findProgram). Gebruik std.Build.dependOnFileContents als alternatief.
findProgram en findProgramLazy
findProgram: Zoekt direct tijdens de configuratiefase (vergiftigt de cache).findProgramLazy: Cre
Groetjes,