Kemunculan Semula Async/Await Zig Cetusan Debat Mengenai Ciri Paling Kontroversi Dalam Pengaturcaraan
Dunia pengaturcaraan gempar dengan kemunculan semula async/await dalam keluaran Zig 0.11.0 yang akan datang, namun perbincangan telah berkembang jauh melampaui sekadar ciri bahasa lain. Semasa pembangun mengkaji pendekatan baharu Zig terhadap pengaturcaraan tak segerak, mereka mempersoalkan sama ada async/await sendiri telah menjadi inovasi paling memecahbelahkan dalam pengaturcaraan sejak pengecualian C++.
Konundrum Pewarnaan Fungsi
Di teras perdebatan ini terletak apa yang pembangun namakan sebagai pewarnaan fungsi - sifat viralis fungsi async yang memaksa keseluruhan timbunan panggilan menjadi async. Ini mencipta apa yang digambarkan oleh seorang pengulas sebagai dua bahasa yang menyamar sebagai satu, di mana percampuran kod segerak dan tak segerak menjadi sangat sukar. Komuniti ini berpecah sama ada penandaan eksplisit ini merupakan ciri yang diperlukan atau kecacatan reka bentuk asas.
Mengetahui sama ada sesuatu fungsi akan menghasilkan thread sebenarnya merupakan pengetahuan yang sangat relevan dan anda mahu ianya tersedia.
Penyokong berhujah bahawa penandaan async yang eksplisit memberikan maklumat penting tentang bila pelaksanaan mungkin menghasilkan, membolehkan corak seperti pengaturcaraan GUI di mana anda mahu memastikan operasi tertentu dilaksanakan sehingga selesai tanpa gangguan. Pengkritik membalas bahawa jangkitan ini menyukarkan penyusunan semula dan mencipta perpecahan ekosistem.
Mencari Alternatif Lebih Baik
Ramai pembangun mempersoalkan sama ada kita telah menyelesaikan masalah yang salah selama ini. Perbincangan mendedahkan bahawa async/await muncul sebagai penyelesaian untuk menangani batasan sistem pengendalian dan bukannya penyelesaian ideal. Seperti yang dinyatakan oleh seorang pengulas, "Seluruh bidang kami sangat menderita akibat ketidakmampuan kami untuk mengubah asas API sistem pengendalian era 1970-an yang menjadikan thread mahal."
Beberapa alternatif sedang mendapat perhatian dalam ulasan. Thread hijau dan thread maya, seperti dalam Java 21+, menawarkan pendekatan yang lebih telus di mana pembangun tidak perlu menandai fungsi async secara eksplisit. Korutin bertimbunan yang dilaksanakan dalam pustaka ruang pengguna memberikan laluan lain, dengan seorang pembangun menyatakan mereka boleh mencipta dan mengurus korutin dalam kira-kira 300 nanosaat - kira-kira 1000x lebih pantas daripada thread sistem pengendalian.
Pertukaran Prestasi Melawan Kerumitan
Faedah prestasi pengaturcaraan async telah didokumenkan dengan baik, terutamanya untuk aplikasi intensif I/O seperti pelayan web dan pangkalan data. Walau bagaimanapun, pembangun mempersoalkan sama ada kos kerumitan wajar untuk keuntungan ini bagi kebanyakan aplikasi. Beberapa pengulas menyatakan bahawa banyak projek yang menggunakan async/await hanya mempunyai beberapa pengguna serentak namun menderita akibat overhead penyelenggaraan yang ketara.
Insiden futurelock dalam Rust - di mana masa depan boleh mengalami kebuntuan di bawah keadaan penjadualan tertentu - berfungsi sebagai kisah amaran tentang kerumitan tersembunyi pengaturcaraan async. Seperti yang diperhatikan oleh seorang pembangun, kod async kelihatan hebat dalam contoh yang bersih tetapi menjadi lebih sukar untuk difahami dalam kod dasar yang besar dan matang yang diselenggara oleh berbilang pembangun selama bertahun-tahun.
Pendekatan Novel Zig
Pelaksanaan Zig menonjol dengan memperlakukan I/O sebagai parameter yang diluluskan kepada fungsi, serupa dengan cara pengendali ingatan berfungsi. Ini membolehkan kod yang sama berjalan dengan backend I/O yang berbeza - sama ada berbilang thread, satu thread, atau segerak sepenuhnya - tanpa perubahan. Pendekatan ini bertujuan untuk memberikan faedah pengaturcaraan async tanpa pewarnaan fungsi viralis yang membelenggu pelaksanaan lain.
Fokus bahasa terhadap pengurusan sumber eksplisit dan pengendalian ralat meluas ke model asyncnya, dengan perhatian teliti terhadap pembersihan yang betul apabila ralat berlaku. Ini selari dengan falsafah Zig untuk menjadikan pengurusan sumber boleh diramal dan kelihatan kepada pembangun.
Masa Depan Pengaturcaraan Serentak
Melihat ke hadapan, komuniti nampaknya berpecah antara tiga laluan: memperhalusi async/await dengan pelaksanaan yang lebih baik seperti Zig, beralih ke arah thread maya dan thread hijau yang menyembunyikan kerumitan, atau mengharapkan inovasi sistem pengendalian yang menjadikan thread cukup murah untuk digunakan secara meluas. Setiap pendekatan mempunyai penyokong yang bersemangat dan pertukaran yang signifikan.
Apa yang jelas dari perbincangan ini ialah tiada penyelesaian yang mengimbangi prestasi, kesederhanaan, dan fleksibiliti dengan sempurna. Perdebatan ini mungkin akan berterusan apabila lebih banyak bahasa mengguna pakai pendekatan Zig dan apabila thread maya menjadi lebih meluas dalam bahasa seperti Java.
Reaksi kuat komuniti pengaturcaraan terhadap kebangkitan semula async/await Zig mendedahkan betapa topik ini bergema dalam. Sama ada anda menyukainya atau membencinya, pengaturcaraan async telah mengubah asas cara kita berfikir tentang keserentakan - dan perbualan ini masih jauh dari selesai.
Rujukan: Async/Await is finally back in Zig