Bahasa Pemrograman Zig Memperkenalkan Perubahan Besar yang Merusak dengan Pembaruan Sistem I/O

Tim Komunitas BigGo
Bahasa Pemrograman Zig Memperkenalkan Perubahan Besar yang Merusak dengan Pembaruan Sistem I/O

Bahasa pemrograman Zig telah merilis serangkaian perubahan signifikan yang merusak dengan pembaruan terbarunya, yang sepenuhnya merombak sistem input/output (I/O). Perubahan ini, yang dijuluki Writergate #24329, merupakan salah satu modifikasi paling substansial pada pustaka standar bahasa hingga saat ini, memicu perdebatan sengit dalam komunitas pengembang tentang keseimbangan antara inovasi dan stabilitas.

Pembaruan ini menggantikan semua pembaca dan penulis I/O yang ada dengan versi non-generik baru yang menjanjikan performa dan optimisasi yang lebih baik. Sistem baru memindahkan buffer di atas vtable, yang berarti buffer sekarang menjadi bagian dari antarmuka daripada implementasi. Perubahan arsitektur ini memungkinkan optimisasi transparan sambil mempertahankan jalur panas konkret untuk operasi buffer.

Perubahan API Utama dalam Pembaruan Writergate:

  • std.fs.File.readerstd.fs.File.deprecatedReader
  • std.fs.File.writerstd.fs.File.deprecatedWriter
  • std.fmtstd.fmt.deprecatedFormat
  • std.fmt.fmtSliceEscapeLowerstd.ascii.hexEscape
  • std.fmt.fmtSliceEscapeUpperstd.ascii.hexEscape
  • Perubahan tanda tangan metode Format dari anytype.* menjadi *std.io.Writer
  • Perubahan penanganan error dari set error yang disimpulkan menjadi error(WriteFailed)

Komunitas Terpecah tentang Filosofi Perubahan yang Merusak

Komunitas pengembang tetap terbagi dalam tentang pendekatan Zig terhadap perubahan yang sering merusak. Banyak pengembang mengungkapkan frustrasi dengan kebutuhan konstan untuk memperbarui kode mereka, terutama mereka yang bekerja pada sistem tertanam dan mikrokontroler di mana stabilitas sangat penting. Beberapa telah meninggalkan proyek Zig sepenuhnya, mengutip beban pemeliharaan untuk mengikuti perubahan bahasa.

Namun, para pendukung berargumen bahwa perubahan ini diperlukan untuk kesehatan bahasa jangka panjang. Perusahaan seperti TigerBeetle , yang menggunakan Zig dalam produksi, secara aktif merangkul pembaruan ini. Mereka melihat perubahan yang merusak sebagai bukti keputusan desain yang bijaksana yang akan menguntungkan bahasa selama beberapa dekade mendatang.

Inilah mengapa kami memilih Zig . Keputusan desain Andrew dalam bahasa selalu sempurna.

Perpecahan ini menyoroti ketegangan fundamental dalam pengembangan bahasa pemrograman antara bergerak cepat untuk memperbaiki masalah desain dan mempertahankan stabilitas untuk pengguna yang ada.

Perbaikan Teknis dan Fitur Baru

Sistem I/O baru memperkenalkan beberapa konsep inovatif yang tidak umum ditemukan dalam bahasa pemrograman lain. Sistem ini mencakup konsep pembuangan untuk pembacaan, yang memungkinkan lewatan data yang efisien tanpa pemrosesan. Untuk penulisan, ini memperkenalkan splatting - operasi memset logis yang dapat melewati pipeline I/O tanpa penyalinan memori, berpotensi mengubah operasi O(MN) yang mahal menjadi operasi O(M).

Pembaruan ini juga menambahkan kemampuan penanganan file baru yang menyimpan informasi kunci tentang handle file, termasuk ukuran dari panggilan stat, posisi seek saat ini, dan status kesalahan. Pendekatan ini menyediakan tipe konkret untuk meneruskan informasi file, yang dilaporkan pengembang sebagai sangat berguna dalam praktik.

Catatan: vtable (tabel virtual) adalah mekanisme yang digunakan dalam pemrograman untuk mendukung pengiriman dinamis panggilan fungsi

Fitur Sistem I/O Baru:

  • Desain non-generik: Buffer dipindahkan di atas vtable untuk optimisasi yang lebih baik
  • Konsep discarding: Melewati data secara efisien selama pembacaan tanpa pemrosesan
  • Operasi splatting: Memset logis yang melewati pipeline I/O tanpa penyalinan memori
  • Memoization file: Caching otomatis ukuran file, posisi seek, dan status error
  • Penyalinan langsung fd-ke-fd: Dukungan untuk operasi gaya sendfile ketika OS mendukungnya
  • Buffer yang disediakan pengguna: Pengguna stream menyediakan buffer sementara implementasi menentukan ukuran minimum

Kekhawatiran Penggunaan Produksi

Frekuensi perubahan yang merusak menimbulkan pertanyaan tentang kesiapan Zig untuk penggunaan produksi. Bahasa ini tetap dalam versi 0.14, menunjukkan bahwa belum mencapai rilis stabil pertamanya. Status pra-1.0 ini berarti perubahan yang merusak diharapkan, tetapi ruang lingkup dan frekuensinya masih mengkhawatirkan banyak pengembang.

Beberapa berargumen bahwa nomor versi di bawah 1.0 telah kehilangan makna tradisionalnya, menunjuk pada proyek-proyek sukses yang mempertahankan versi 0.x untuk periode yang diperpanjang. Yang lain berpendapat bahwa tujuan 1.0 Zig yang terdokumentasi dengan baik membenarkan ketidakstabilan saat ini, karena bahasa bekerja menuju tonggak spesifik termasuk fungsionalitas async/await.

Risiko fragmentasi ekosistem tampak besar, dengan pengembang khawatir tentang dilema tahanan yang dihadapi pengelola paket yang harus memilih antara mendukung versi lama atau bergerak maju dengan perubahan yang merusak.

Melihat ke Depan

Pembaruan I/O ini merupakan bagian dari serangkaian perubahan yang lebih besar menuju implementasi async/await Zig dan tujuan I/O sebagai Antarmuka. Tim pengembangan telah menunjukkan bahwa perubahan yang merusak tambahan akan mengikuti saat mereka bekerja melalui sistem terkait termasuk TLS , HTTP , JSON , dan manajemen paket.

Komitmen tim Zig untuk mendapatkan desain fundamental yang benar sebelum rilis 1.0 mencerminkan visi jangka panjang mereka untuk bahasa. Apakah pendekatan ini pada akhirnya akan menguntungkan atau menghambat adopsi masih harus dilihat, tetapi jelas bahwa Zig memprioritaskan keunggulan teknis daripada kekhawatiran stabilitas jangka pendek.

Referensi: Writergate #24329