3 Punkte von bus710 12 일 전 | 2 Kommentare | Auf WhatsApp teilen

Es wurde am 14. April 2026 veröffentlicht. An diesem Release haben 244 Mitwirkende über 8 Monate hinweg mit insgesamt 1.183 Commits gearbeitet.

I/O als Interface — der Kern dieses Releases

Das ist die größte Änderung in diesem Release. Fast alles, was blockieren kann — etwa Dateisystem, Netzwerk, Timer oder Synchronisierung — wurde unter dem neuen std.Io-Interface zusammengefasst. So wie man bei der Speicherallokation einen Allocator benötigt, muss nun sämtlicher Code, der I/O verwendet, eine Io-Instanz entgegennehmen. Dadurch lassen sich unabhängig vom Nebenläufigkeitsmodell wiederverwendbare Pakete bauen, und Event Loops können auch auf Sprachebene sauber behandelt werden.

Es gibt drei Implementierungen:

  • Io.Threaded — eine vollständige threadbasierte Implementierung. Sie unterstützt auch Cancellation, und beim Umstieg von 0.15.x bleibt das Verhalten unverändert
  • Io.Evented — eine experimentelle Implementierung auf Basis von Userspace-Stack-Switching (Green Threads)
  • Io.Uring — eine PoC-Implementierung auf Basis von Linux-io_uring

Compiler

  • Incremental Compilation funktioniert jetzt auch mit dem LLVM-Backend — bei Compilerfehlern wird der LLVM-Emit-Object-Schritt übersprungen, sodass sich Fehler deutlich schneller prüfen lassen
  • Die Type Resolution wurde grundlegend überarbeitet — der interne Abhängigkeitsgraph wurde von einer zyklischen Struktur in einen DAG umgewandelt. Typen, die nur als Namespace verwendet werden, müssen nicht mehr unnötig analysiert werden, was auch die Binärgröße reduziert. Auch Fehlermeldungen zu Abhängigkeitszyklen zeigen nun viel klarer, wo sich etwas verhakt hat
  • aarch64-Backend — wird aktiv mit dem Ziel entwickelt, als Standard im Debug-Modus zu dienen
  • Der eingebaute Fuzzer ist leistungsfähiger geworden — AST-Smith-basiertes Multiprozess-Fuzzing, Infinite Mode und Crash-Dumps wurden ergänzt

Sprachänderungen (Breaking Changes)

Dies sind Änderungen, für die eine Migration erforderlich ist:

  • @cImport wurde in das Build-System verschoben
  • Das Builtin @Type wurde entfernt — ersetzt durch separate typspezifische Builtins
  • Lazy Field Analysis wurde eingeführt — Typen, die nur als Namespace verwendet werden, werden nicht auf ihre Felder analysiert
  • Pointer in packed union/struct sind nicht mehr erlaubt
  • Viele APIs rund um posix und os.windows wurden entfernt

Standardbibliothek

  • heap.ArenaAllocator ist jetzt thread-sicher und lock-free, und der heap.ThreadSafe Allocator wurde entfernt
  • Deflate-Kompression wurde hinzugefügt, und auch die API zur Dekompression wurde vereinfacht
  • std.crypto wurde um AES-SIV, AES-GCM-SIV, Ascon-AEAD und Ascon-Hash erweitert
  • Thread.Pool, GenericReader / AnyReader / FixedBufferStream wurden entfernt
  • Windows-Netzwerkfunktionen arbeiten jetzt auch ohne ws2_32.dll, und die Migration zu NtDll ist abgeschlossen

Toolchain-Updates

Aktualisiert wurde auf LLVM 21, musl 1.2.5, glibc 2.43, Linux-6.19-Header, macOS-26.4-Header und FreeBSD-15.0-libc.


Ausrichtung des nächsten Releases (0.17.0)

Die wichtigsten Ziele sind die Stabilisierung von async I/O, die Umstellung des aarch64-Backends auf den Standard im Debug-Modus, das Entfernen der LLD-Abhängigkeit und die Implementierung eines Linkers mit Unterstützung für Incremental Compilation.

2 Kommentare

 
bus710 12 일 전

Letzte Nacht wurde auch der Zig Language Server in Version 0.16 veröffentlicht.

Da der Language Server oft erst einige Monate nach der Sprachversion erschien, habe ich gezögert, die neueste Version zu verwenden. Diesmal kam die passende Version aber wirklich schnell heraus. Dadurch lässt sich diese neue Version jetzt schneller und einfacher nutzen.