4 poin oleh GN⁺ 2025-12-04 | Belum ada komentar. | Bagikan ke WhatsApp
  • Bahasa Zig memperkenalkan model baru berbasis antarmuka Io untuk mengurangi kompleksitas desain I/O asinkron yang ada
  • Model ini mempertahankan struktur fungsi yang sama tanpa membedakan kode sinkron dan asinkron, serta menyediakan dua implementasi: Io.Threaded dan Io.Evented
  • Io.Threaded pada dasarnya menjalankan eksekusi sinkron, sedangkan Io.Evented melakukan eksekusi asinkron berbasis event loop
  • Pengembang dapat mengontrol eksekusi paralel melalui fungsi async() dan concurrent(), sehingga optimasi performa dimungkinkan tanpa mengubah kode
  • Pendekatan ini menyelesaikan masalah function coloring sambil tetap mempertahankan kesederhanaan dan kemampuan kontrol khas Zig untuk meraih performa asinkron

Perubahan Desain Asinkron di Zig

  • Zig mencari pendekatan baru karena desain asinkron sebelumnya kurang selaras dengan filosofi minimalisme bahasa tersebut
    • Desain lama memiliki tingkat integrasi yang rendah dengan fitur lain
    • Model baru memungkinkan I/O sinkron dan asinkron ditangani dengan struktur kode yang sama
  • Desain baru berpusat pada antarmuka generik Io
    • Semua fungsi I/O dijalankan dengan menerima instance Io sebagai parameter
    • Strukturnya mirip dengan antarmuka Allocator, sehingga I/O dapat dikendalikan dengan cara yang serupa seperti alokasi memori

Struktur Antarmuka Io

  • Pustaka standar menyertakan dua implementasi dasar
    • Io.Threaded: pada dasarnya eksekusi sinkron, dengan pemrosesan paralel berbasis thread bila diperlukan
    • Io.Evented: eksekusi asinkron berbasis event loop (menggunakan io_uring, kqueue, dan lain-lain)
  • Pengguna juga dapat menulis implementasi Io baru sendiri, sehingga bisa mengontrol cara eksekusi dengan lebih rinci

Contoh Kode dan Cara Kerjanya

  • Fungsi contoh saveFile() membuat file, menulis isinya, lalu menutupnya
    • Saat menggunakan Io.Threaded, fungsi ini berjalan lewat system call biasa
    • Saat menggunakan Io.Evented, fungsi ini dijalankan melalui backend asinkron
    • Dalam kedua kasus, penyelesaian pekerjaan dijamin pada saat pemanggilan writeAll()
  • Kode yang sama berjalan identik baik di lingkungan sinkron maupun asinkron
    • Penulis library tidak perlu memikirkan metode eksekusinya

Eksekusi Paralel dan async() / concurrent()

  • Fungsi async() meminta eksekusi asinkron, tetapi pada Io.Threaded bisa saja dijalankan segera
    • Pada Io.Evented, dua file benar-benar dapat disimpan secara bersamaan lewat eksekusi asinkron
  • Fungsi concurrent() digunakan ketika eksekusi paralel yang nyata memang diperlukan
    • Io.Threaded memanfaatkan thread pool
    • Io.Evented menanganinya dengan cara yang sama seperti async()
  • Pemilihan fungsi yang salah (async alih-alih concurrent) dianggap sebagai bug, dan tidak bisa dicegah di tingkat bahasa

Gaya Kode dan Integrasi Bahasa

  • Gaya kode Zig biasa tetap dipertahankan tanpa sintaks khusus untuk asinkron
    • Sintaks alur kontrol yang ada seperti try, defer, dan lainnya tetap digunakan apa adanya
    • Andrew Kelley menyebutnya “terbaca seperti kode Zig standar”
  • Sebagai contoh, ditunjukkan implementasi lookup DNS asinkron
    • Tidak seperti getaddrinfo(), implementasi ini hanya mengembalikan respons sukses pertama dan membatalkan permintaan lainnya

Rencana Ke Depan dan Status Pengembangan

  • Io.Evented masih berada pada tahap eksperimental, dan belum mendukung sebagian OS
  • Implementasi Io yang kompatibel dengan WebAssembly sedang direncanakan dan memerlukan pengembangan fitur terkait
  • Ada 24 item pekerjaan lanjutan terkait Io, dan sebagian besar masih belum selesai
  • Zig masih belum mencapai versi 1.0, dan I/O asinkron serta pembuatan kode native adalah tugas besar yang masih tersisa
  • Dengan desain ini, diharapkan frekuensi penulisan ulang kode akibat perubahan antarmuka I/O akan berkurang

Ringkasan Diskusi Komunitas

  • Sejumlah komentar menilai pendekatan Zig lebih sederhana dan fleksibel dibanding model async/await Rust
    • Rust menjadi lebih kompleks ketika beberapa executor digunakan bersamaan
    • Zig melalui antarmuka Io membuka kemungkinan koeksistensi banyak executor
  • Sebagian pihak menyoroti bahwa kodenya bisa menjadi agak lebih bertele-tele
    • Namun, desain API yang eksplisit meningkatkan kemampuan kontrol atas keamanan, performa, dan pengujian
  • Diskusi teknis juga berlanjut mengenai perbedaan eksekusi asinkron dan berbasis thread, serta pendekatan implementasi stackful vs stackless coroutine
  • Io di Zig diimplementasikan sebagai perluasan pustaka standar tanpa perlakuan khusus di tingkat bahasa
    • Ke depan, fitur stackless coroutine akan ditambahkan

Kesimpulan

  • Model asinkron baru Zig bertujuan menyeimbangkan kesederhanaan bahasa dan I/O berperforma tinggi
  • Dengan menyelesaikan masalah function coloring, menyatukan kode sinkron dan asinkron, serta menyediakan struktur kontrol yang eksplisit, ini dinilai sebagai langkah kunci menuju stabilisasi Zig 1.0

Belum ada komentar.

Belum ada komentar.