2 poin oleh GN⁺ 2026-02-04 | 1 komentar | Bagikan ke WhatsApp
  • Bahasa Zig sedang beralih ke arah mengimplementasikan fungsi libc langsung di pustaka standar Zig, sambil secara bertahap menghapus kode sumber C yang ada
  • Hingga saat ini sekitar 250 file sumber C telah dihapus, dan masih tersisa 2032 file
  • Peralihan ini menghasilkan efek seperti peningkatan kecepatan kompilasi, pengurangan ukuran instalasi, dan pengecilan ukuran biner saat static linking
  • Perbaikan terbaru memungkinkan zig libc dioptimalkan bersama kode lain di dalam Zig Compilation Unit (ZCU) alih-alih sebagai arsip statis terpisah, sehingga penghapusan kode duplikat dan optimisasi setingkat LTO menjadi mungkin
  • Seiring Zig beralih menjadi penyedia static libc sendiri, jika terjadi masalah terkait maka laporan bug perlu dikirim langsung ke proyek Zig

Gambaran umum proyek Zig libc

  • Beberapa kontributor ikut serta dalam subproyek zig libc, menggantikan implementasi libc berbasis C yang ada dengan wrapper pustaka standar Zig
    • Tujuannya adalah menghapus kode C yang duplikatif, serta menyediakan fungsi seperti memcpy, atan2 sebagai pemetaan sederhana atau dalam bentuk wrapper fungsi umum seperti strnlen
    • Sebagai contoh, fungsi strnlen diimplementasikan menggunakan std.mem.findScalar milik Zig
  • Hingga saat ini sekitar 250 file sumber C telah dihapus, dan 2032 file masih tersisa

Peningkatan performa dan struktural

  • Semakin banyak fungsi yang dipindahkan ke Zig, semakin kecil ketergantungan pada proyek eksternal dan bahasa C
    • Efeknya mencakup peningkatan kecepatan kompilasi, penyederhanaan dan pengurangan ukuran instalasi, serta pengecilan ukuran biner aplikasi pengguna yang di-static link
  • Perubahan terbaru membuat zig libc dikompilasi di dalam Zig Compilation Unit (ZCU) bersama kode Zig lain
    • Tidak lagi ditautkan sebagai arsip statis terpisah, melainkan memanfaatkan struktur terpadu compiler dan linker
    • Dengan demikian, penghapusan kode duplikat dan optimisasi antar fungsi menjadi mungkin
    • Ini mirip dengan link-time optimization (LTO), tetapi dilakukan di tahap frontend, bukan tahap linker

Kemungkinan pengembangan ke depan

  • Jika digabungkan dengan perubahan terbaru pada std.Io, ada kemungkinan pengguna dapat mengendalikan perilaku I/O libc
    • Contoh: mengintegrasikan pemanggilan read, write ke dalam event loop io_uring
    • Fitur deteksi kebocoran resource juga bisa diterapkan pada kode C pihak ketiga
    • Namun saat ini masih berupa gagasan eksperimental yang belum diuji

Pengujian dan jaminan kualitas

  • Proyek libc-test milik Szabolcs Nagy sangat membantu dalam mencegah regresi pada fungsi matematika
    • Kumpulan pengujian ini digunakan untuk memverifikasi akurasi Zig libc

Panduan untuk pengguna

  • Zig sedang beralih ke tahap menyediakan sendiri fungsi musl, mingw-w64, dan wasi-libc
    • Jika terjadi masalah terkait, pengguna perlu mengirim laporan bug langsung ke proyek Zig
    • Ini untuk mencegah issue yang salah arah terkirim ke maintainer proyek libc independen yang sudah ada

Penutup

  • Kalimat terakhir tulisan ini berbunyi “Abolish ICE” (tanpa penjelasan tambahan)

1 komentar

 
GN⁺ 2026-02-04
Komentar Hacker News
  • 250 file C telah dihapus, dan sekarang tersisa 2032
    Menyaksikan proses Zig menggantikan libc dari dalam adalah proyek yang cukup mendebarkan dalam jangka panjang

    • Ini selalu menjadi hal yang saya kagumi dari Zig
      Banyak bahasa mengklaim sebagai pengganti C, tetapi Zig hampir satu-satunya yang benar-benar mengintegrasikan C ABI dan sistem build secara alami
      Fitur translate-c juga bekerja dengan sangat baik
      Daripada mencoba mempertahankan kompatibilitas 99% seperti C++, menurut saya lebih bijak memilih mempertahankan kesederhanaan C sambil menghindari jebakan bahasanya
  • Saya penasaran apakah dalam jangka panjang ini berarti Zig tidak akan berjalan di OpenBSD
    Karena OpenBSD memblokir syscall langsung dan memaksa pemanggilan hanya lewat libc
    Lihat thread ini untuk konteks terkait

    • Ini hanya berlaku untuk libc statis
      Jika memberi opsi -dynamic -lc, fungsi libc dari sistem target akan disediakan
      Ada juga sistem seperti macOS yang hanya mendukung libc dinamis, dan setahu saya OpenBSD juga mendukung libc statis
    • Jawaban terkait bisa dilihat di sini
  • Ini adalah perubahan yang sangat menarik dalam cara proyek Zig menautkan pustaka C
    Tetapi saya penasaran, saat melakukan cross-compile program C untuk Windows yang memakai MinGW dengan Zig, apakah masih bisa menautkan libc MinGW secara statis

    • Dalam kasus ini tidak ada perubahan
      Jika menentukan -target x86_64-windows-gnu -lc, sebagian fungsi libc disediakan Zig, sebagian lagi oleh vendored mingw-w64
      Zig menyediakan semuanya tanpa perlu instalasi mingw-w64 terpisah
      Jika mau, Anda juga bisa langsung menentukan libc eksternal dengan --libc libc.txt
  • Ini ide yang keren, tetapi saya khawatir apakah kita tetap harus terus melacak kerentanan CVE dari glibc atau musl untuk kode yang sudah di-porting

    • Hal yang sama sudah dilakukan di standard library
      Pada jalur kode bersama seperti matematika, justru potensi bug bisa berkurang
  • Ada penjelasan bahwa ini “mirip mengaktifkan LTO melintasi batas libc, tetapi dilakukan dengan benar di frontend, bukan linker”
    Saya penasaran kenapa pada tahap linker sudah terlambat, dan apakah Zig bisa melakukan lebih banyak optimasi dibanding linker pada level LLVM IR

    • Di frontend, inlining dan penghapusan dead code bisa dilakukan
      Dalam pustaka statis yang sudah dioptimalkan, optimasi seperti ini sulit dilakukan saat link time
  • Jika digabungkan dengan perubahan std.Io terbaru, menarik bahwa pengguna bisa mengendalikan sendiri perilaku I/O libc
    Misalnya dengan membuat semua panggilan read/write ikut masuk ke event loop io_uring
    Secara pribadi saya lebih tertarik ke sisi kqueue, tetapi kutipan ini tampaknya juga berlaku di sana

  • Ada banyak bagian libc yang menakutkan, tetapi ini benar-benar proyek yang menarik

    • Tentu ada juga fungsi yang berguna
      Misalnya hal-hal seperti "memfrob" atau "strfry", walau bercanda, ini hanya ada di glibc :)
  • Saya penasaran apakah Rust juga punya sesuatu seperti ini
    Bukan mau memulai debat Zig vs Rust, tetapi saya juga ingin membuat lingkungan yang lebih mandiri di proyek Rust

    • Rust juga punya beberapa implementasi libc
      • c-ward: implementasi libc yang ditulis dalam Rust
      • relibc: untuk Redox OS, tetapi juga berjalan di Linux
      • rustix: binding aman ke API POSIX tanpa menggunakan C
  • Saya penasaran apakah ada yang tahu kapan Zig akan mencapai versi 1.0
    Saya sangat tertarik dengan bahasanya, tetapi perubahannya masih banyak sehingga saya ragu memakainya untuk proyek penting

    • Tidak ada yang tahu pasti
      Meski begitu, proyek produksi besar seperti Bun, Ghostty, dan Tigerbeetle mengikutinya dengan baik
      Semantik Zig sederhana, jadi saat upgrade versi biasanya cukup memperbarui compiler dan melakukan beberapa perbaikan mekanis
      Yang menghalangi saya hanya kemauan rekan kerja untuk mengadopsinya, jadi untuk sekarang saya mulai dari proyek yang bisa saya buat sendiri
    • Tidak ada jadwal resmi untuk 1.0
      Sebagai referensi, video ini mungkin menarik