Reka Bentuk I/O Async Baharu Zig Mencetuskan Debat Mengenai Falsafah dan Pelaksanaan Bahasa

Pasukan Komuniti BigGo
Reka Bentuk I/O Async Baharu Zig Mencetuskan Debat Mengenai Falsafah dan Pelaksanaan Bahasa

Pelancaran akan datang Zig versi 0.12.0 memperkenalkan pendekatan novel terhadap I/O tak segerak yang menimbulkan perbincangan signifikan dalam komuniti pengaturcaraan. Berbeza dengan pelaksanaan async/await tradisional dalam bahasa lain, reka bentuk Zig memperlakukan operasi async sebagai antara muka yang boleh dipasang dan bukannya konstruk pada tahap bahasa, mencipta kedua-dua kegembiraan dan kebimbangan dalam kalangan pembangun mengenai hala tuju dan falsafah bahasa tersebut.

Pendekatan Berbeza untuk Pengaturcaraan Tak Segerak

Inovasi teras dalam sistem I/O tak segerak baharu Zig terletak pada pemisahan pertimbangan antara menyatakan ketaksegerakan dan melaksanakannya. Daripada menandakan fungsi dengan kata kunci async yang mengubahnya menjadi mesin keadaan, Zig memperkenalkan parameter antara muka io yang boleh diluluskan kepada fungsi. Ini membolehkan pelaksanaan I/O yang berbeza - daripada pendekatan berbenang ringkas kepada sistem korutin yang canggih - berfungsi dengan kod aplikasi yang sama. Reka bentuk ini menekankan keselamatan pembatalan dan pengurusan sumber melalui primitif seperti nocancel yang secara automatik mengendalikan pembersihan apabila operasi gagal atau dibatalkan.

Seorang pengulas menyatakan perbezaan asas daripada bahasa lain: Dalam Zig, pengkompil pernah menyokong korutin tetapi ini telah dialih keluar. Dalam reka bentuk baharu, async dan await hanyalah fungsi. Dalam pelaksanaan berbenang yang digunakan dalam demo, await hanya menyekat benang sehingga operasi selesai.

Primitif Utama Zig Async I/O:

  • io.async: Melaksanakan fungsi di latar belakang, berjalan serta-merta jika tiada konkurensi tersedia
  • await: Menyekat sehingga operasi async selesai
  • nocancel: Seperti await tetapi juga meminta pembatalan
  • Kedua-dua await dan nocancel adalah idempoten antara satu sama lain

Kebimbangan Komuniti Mengenai Kerumitan dan Reka Bentuk

Komuniti pengaturcaraan telah menunjukkan reaksi bercampur terhadap hala tuju baharu ini. Sesetengah pembangun bimbang bahawa Zig semakin menjauhi falsafah asalnya sebagai bahasa peringkat rendah yang ringkas. Pengenalan apa yang kelihatan seperti sistem kesan untuk I/O dan pengagihan telah menimbulkan persoalan sama ada kerumitan ini selari dengan nilai teras Zig. Pengkritik menunjukkan bahawa antara muka IO menyerupai pengaturcaraan berorientasikan objek tetapi mungkin melanggar prinsip seperti prinsip penggantian Liskov, mencipta interaksi yang tidak dijangka apabila objek IO dikongsi merentasi sempadan pustaka.

Saya mendapati hala tuju zig mengelirukan. Adakah ia sepatutnya menjadi bahasa yang ringkas atau kompleks? Peringkat rendah atau peringkat tinggi? Ciri ini bagi saya ialah campuran pelik fungsi peringkat tinggi dan rendah dan agak kompleks.

Perbincangan ini menyerlahkan ketegangan dalam reka bentuk bahasa: bagaimana untuk menyediakan abstraksi yang berkuasa sambil mengekalkan kesederhanaan dan kebolehramalan. Sesetengah pembangun menghargai bahawa Zig bereksperimen dengan alternatif kepada async/await tradisional, manakala yang lain bimbang tentang lengkung pembelajaran dan potensi untuk aliran kawalan tersembunyi.

Taburan Sentimen Komuniti:

  • Menyokong inovasi: ~40%
  • Bimbang tentang kerumitan: ~35%
  • Neutral/memerhatikan: ~25%
  • Kebimbangan utama: Konsistensi perpustakaan standard, aliran kawalan tersembunyi, penjajaran falsafah

Debat Pustaka Piawai dan Evolusi Bahasa

Di luar perbincangan I/O tak segerak, komen mendedahkan perdebatan berterusan mengenai falsafah reka bentuk pustaka piawai Zig. Sesetengah ahli komuniti mendapati pustaka piawai tidak konsisten, menggambarkannya sebagai koleksi pakej kecil, bukannya unit yang koheren. Kekurangan pengubah suai keterlihatan dan pemisahan yang jelas antara antara muka awam dan butiran pelaksanaan dalaman telah mengecewakan pembangun yang mahukan jaminan enkapsulasi yang lebih kukuh.

Pada masa yang sama, pembangun lain menghargai keupayaan untuk mengakses butiran pelaksanaan dalaman apabila diperlukan. Seorang pengulas berkongsi: Secara jujur, peluang untuk mengacau butiran pelaksanaan dalaman adalah bahagian kegemaran saya menggunakan pustaka piawai Zig. Ini mencerminkan falsafah Zig untuk memberikan kawalan maksimum kepada pengaturcara, walaupun ia bermaksud menerima lebih banyak tanggungjawab untuk penggunaan yang betul.

Masa Depan Cerita Konkurensi Zig

Melihat ke hadapan, cerita I/O tak segerak Zig masih berkembang. Pelaksanaan semasa menggunakan benang, tetapi terdapat rancangan untuk korutin berstack penuh menggunakan io_uring dan kqueue, serta potensi korutin tanpa stack. Walau bagaimanapun, cabaran teknikal yang ketara masih kekal, terutamanya berkaitan pengiraan saiz stack statik untuk korutin berstack penuh. Ini memerlukan pengharaman atau penjejakan berhati-hati terhadap rekursi dan panggilan fungsi dinamik - kekangan bukan remeh untuk bahasa pengaturcaraan sistem.

Komuniti kelihatan terbahagi mengenai sama ada rancangan bercita-cita tinggi ini akan berjaya direalisasikan. Sesetengah melihat potensi untuk inovasi yang memecah tradisi, manakala yang lain bimbang tentang perisian wap memandangkan kerumitan masalah yang sedang diselesaikan. Perbincangan mengenai penghapusan limpahan stack melalui analisis statik adalah terutamanya bercita-cita tinggi dan boleh memberikan faedah yang ketara untuk sistem terbenam jika dilaksanakan dengan jayanya.

Implementasi I/O yang Dirancang:

  • Threaded (implementasi semasa)
  • Stackful coroutines menggunakan io_uring/kqueue
  • Stackless coroutines (fasa reka bentuk)
  • Semua implementasi berfungsi dengan kod aplikasi yang sama melalui antara muka io

Kesimpulan

Reka bentuk I/O tak segerak baharu Zig mewakili eksperimen berani dalam reka bentuk bahasa yang mencabar pendekatan konvensional terhadap konkurensi. Dengan memperlakukan async sebagai antara muka yang boleh dipasang dan bukannya ciri bahasa, Zig bertujuan untuk mengelakkan masalah pewarnaan fungsi yang membelenggu bahasa lain sambil memberikan fleksibiliti dalam pelaksanaan. Walau bagaimanapun, pendekatan ini datang dengan kerumitannya sendiri dan persoalan falsafah tentang jenis bahasa apakah yang sepatutnya menjadi Zig.

Seperti yang dirumuskan secara tepat oleh seorang pengulas, Zig bukan sahaja penuh dengan idea-idea hebat, terdapat seluruh kuburan idea yang telah dibuang. Cadangan I/O tak segerak semasa meneruskan tradisi penilaian reka bentuk yang ketat ini. Sama ada idea khusus ini akan berkembang atau menyertai kuburan itu masih belum dapat dipastikan, tetapi perbincangan komuniti yang meriah memastikan evolusi Zig akan terus berfikir dan sengaja.

Rujukan: Zig's New Async I/O (Text Version)