- Die Programmiersprache Zig stellt die libc-Funktionalität direkt in der Zig-Standardbibliothek bereit und entfernt dabei schrittweise den bestehenden C-Quellcode
- Bisher wurden etwa 250 C-Quelldateien gelöscht, 2032 sind noch übrig
- Diese Umstellung bringt schnellere Kompilierung, geringere Installationsgröße und kleinere Binärdateien bei statischem Linking
- Durch eine aktuelle Verbesserung wird zig libc nicht mehr als separates statisches Archiv, sondern innerhalb der Zig Compilation Unit (ZCU) gemeinsam mit anderem Code optimiert, wodurch Duplikate entfernt und Optimierungen auf LTO-Niveau möglich werden
- Da Zig zu einem eigenen Anbieter einer statischen libc wird, sollten bei entsprechenden Problemen Bug-Reports direkt an das Zig-Projekt gesendet werden
Überblick über das Zig-libc-Projekt
- Mehrere Mitwirkende arbeiten am zig-libc-Teilprojekt, das die bisherige C-basierte libc-Implementierung durch Wrapper in der Zig-Standardbibliothek ersetzt
- Ziel ist es, doppelten C-Code zu entfernen und Funktionen wie
memcpy, atan2 als einfache Zuordnungen oder wie strnlen als allgemeine Funktions-Wrapper bereitzustellen
- Die Funktion
strnlen wird zum Beispiel mit Zigs std.mem.findScalar implementiert
- Bislang wurden etwa 250 C-Quelldateien gelöscht, 2032 bleiben noch übrig
Performance- und Strukturverbesserungen
- Mit jeder nach Zig migrierten Funktion sinken die Abhängigkeiten von externen Projekten und der Programmiersprache C
- Das führt zu höherer Kompiliergeschwindigkeit, einfacherer und kleinerer Installation sowie kleineren Binärdateien statisch gelinkter Benutzeranwendungen
- Durch die jüngste Änderung wird zig libc innerhalb der Zig Compilation Unit (ZCU) zusammen mit anderem Zig-Code kompiliert
- Statt als separates statisches Archiv gelinkt zu werden, nutzt es die integrierte Struktur aus Compiler und Linker
- Dadurch werden Entfernung doppelten Codes und funktionsübergreifende Optimierungen möglich
- Das ähnelt der Link Time Optimization (LTO), findet jedoch nicht in der Linker-Phase, sondern im Frontend statt
Künftige Erweiterungsmöglichkeiten
- In Verbindung mit den jüngsten std.Io-Änderungen könnte es künftig möglich werden, dass Nutzer das I/O-Verhalten der libc steuern
- Beispiel:
read- und write-Aufrufe in eine io_uring-Event-Loop integrieren
- Auch Funktionen zur Erkennung von Resource Leaks könnten auf C-Code von Drittanbietern angewendet werden
- Derzeit ist das allerdings noch eine ungetestete Idee
Tests und Qualitätssicherung
- Das libc-test-Projekt von Szabolcs Nagy hilft erheblich dabei, Regressionen bei mathematischen Funktionen zu vermeiden
- Mit diesem Testsatz wird die Korrektheit von Zig libc überprüft
Hinweise für Nutzer
- Zig befindet sich im Übergang dazu, die Funktionen von musl, mingw-w64 und wasi-libc selbst bereitzustellen
- Bei entsprechenden Problemen sollten Bug-Reports direkt an das Zig-Projekt gesendet werden
- So soll verhindert werden, dass versehentlich falsche Issues an die Maintainer der bisherigen eigenständigen libc-Projekte gehen
Schluss
- Der letzte Satz des Artikels endet mit „Abolish ICE“ (ohne weitere Erläuterung)
Noch keine Kommentare.