2 poin oleh GN⁺ 2025-10-28 | Belum ada komentar. | Bagikan ke WhatsApp
  • Penulis mencoba pendekatan baru saat mempelajari bahasa Zig sambil mengerjakan proyek penulisan ulang indeks AcoustID, dipicu oleh keterbatasan dalam pemrograman jaringan
  • Untuk menghadirkan model I/O asinkron dan konkurensi yang sebelumnya digunakan di C++ dan Go ke Zig, ia memutuskan mengembangkan pustakanya sendiri
  • Hasilnya, ia membuat pustaka Zio yang mengimplementasikan model konkurensi bergaya Go agar sesuai dengan Zig, sehingga memungkinkan penulisan kode asinkron yang terlihat seperti sinkron tanpa callback
  • Zio mendukung I/O jaringan dan berkas asinkron, channel, primitive sinkronisasi, pemantauan sinyal dan lainnya, serta menunjukkan performa lebih cepat daripada Go atau Tokio milik Rust dalam mode single-thread
  • Proyek ini menunjukkan kemungkinan menggabungkan performa tingkat sistem Zig dengan model konkurensi modern, dan dinilai sebagai titik balik penting dalam perluasan ekosistem Zig

Bahasa Zig dan motivasi awal

  • Penulis sebelumnya telah mengamati Zig, yang awalnya dirancang sebagai bahasa tingkat rendah untuk perangkat lunak audio, tetapi belum merasa ada kebutuhan praktis untuk menggunakannya
    • Ia mulai tertarik setelah melihat Andrew Kelley, pencipta Zig, mengimplementasikan ulang algoritme Chromaprint milik penulis dalam Zig
  • Ia menjadikan proyek penulisan ulang inverted index di AcoustID sebagai kesempatan untuk belajar Zig, dan pada akhirnya berhasil mencapai implementasi yang lebih cepat dan lebih skalabel dibanding versi C++
  • Namun, pada tahap penambahan antarmuka server, ia menghadapi masalah kurangnya dukungan jaringan asinkron

Pendekatan sebelumnya dan keterbatasannya

  • Pada versi C++ sebelumnya, framework Qt digunakan untuk menangani I/O asinkron; walaupun berbasis callback, pendekatan ini tetap dapat dipakai berkat dukungannya yang kaya
  • Dalam prototipe berikutnya, ia memanfaatkan kemudahan jaringan dan konkurensi dari bahasa Go, tetapi Zig tidak memiliki abstraksi pada tingkat yang setara
  • Untuk mengimplementasikan server TCP dan lapisan klaster di Zig, muncul inefisiensi karena harus membuat banyak thread
    • Untuk mengatasinya, ia menulis sendiri klien Zig untuk sistem pesan NATS (nats.zig) sambil mendalami fitur jaringan di Zig

Munculnya pustaka Zio

  • Berdasarkan pengalaman tersebut, ia merilis Zio: pustaka I/O asinkron dan konkurensi untuk Zig
  • Zio bertujuan memungkinkan penulisan kode asinkron tanpa callback, dengan struktur yang secara internal bekerja secara asinkron tetapi dari luar terlihat seperti sinkron
  • Zio mengimplementasikan model konkurensi bergaya Go secara terbatas agar sesuai dengan Zig
    • Task di Zio berbentuk stackful coroutine dengan stack berukuran tetap
    • Saat stream.read() dipanggil, operasi I/O dijalankan di latar belakang, lalu task dilanjutkan kembali setelah selesai untuk mengembalikan hasil
  • Pendekatan ini sekaligus memberikan penyederhanaan pengelolaan state dan peningkatan keterbacaan kode

Susunan fitur dan struktur runtime

  • Zio mendukung I/O jaringan dan berkas asinkron penuh, primitive sinkronisasi (mutex, condition variable, dll.), channel bergaya Go, pemantauan sinyal OS, dan lainnya
  • Task dapat dijalankan dalam mode single-thread maupun multi-thread
    • Dalam mode multi-thread, task dapat berpindah antar-thread, sehingga memberikan efek penurunan latensi dan peningkatan penyeimbangan beban
  • Zio mengimplementasikan antarmuka Reader/Writer standar untuk memastikan kompatibilitas dengan pustaka eksternal

Performa dan perbandingan

  • Penulis belum merilis benchmark resmi, tetapi menyebut telah mengonfirmasi performa yang lebih cepat daripada Go dan Tokio milik Rust dalam mode single-thread
  • Biaya context switching turun hingga setara pemanggilan fungsi, sehingga kecepatan perpindahannya nyaris gratis
  • Mode multi-thread masih belum sekuat Go/Tokio, tetapi menunjukkan performa serupa atau sedikit lebih cepat
    • Di masa depan, penambahan fitur fairness dapat membuat performanya sedikit menurun

Contoh kode dan pemanfaatan

  • Dokumentasi mencakup contoh kode server HTTP berbasis Zio
    • Menggunakan zio.net.Stream untuk menerima koneksi dan menangani tiap koneksi sebagai task terpisah
    • zio.Runtime mengelola eksekusi task dan penjadwalan I/O
  • Struktur ini memungkinkan penulisan I/O asinkron seperti kode sinkron, sekaligus menghadirkan kontrol alur yang jelas dan pengelolaan pelepasan sumber daya

Rencana ke depan dan makna proyek

  • Melalui Zio, penulis menilai bahwa Zig dapat berkembang melampaui sekadar bahasa untuk kode sistem berperforma tinggi, menjadi bahasa untuk pengembangan aplikasi jaringan yang lengkap
  • Sebagai langkah berikutnya, ia berencana menulis ulang klien NATS berbasis Zio dan mengembangkan pustaka klien/server HTTP berbasis Zio
  • Proyek ini dinilai mendorong perluasan infrastruktur jaringan dan konkurensi dalam ekosistem Zig, serta sebagai upaya membangun model runtime modern yang sebanding dengan Go atau Rust

Belum ada komentar.

Belum ada komentar.