- Para ahli menunjukkan bahwa "kode yang dapat dijalankan saat kompilasi" adalah "ide bodoh", tetapi Andrew Kelley, pencipta Zig, terus melangkah maju dan mengimplementasikannya
- Beberapa tahun kemudian, ini menjadi salah satu fitur andalan Zig
- Apa yang di Zig disebut
comptime adalah kode yang harus dijalankan saat kompilasi
- Dengan memanfaatkan kemampuan menjalankan kode Zig selama proses kompilasi, pengembang Zig dapat menulis kode generik dan melakukan metaprogramming tanpa harus mendukung generic/template
2 komentar
Sudah ada masalah sejak paragraf pertama... Dalam ranah bahasa pemrograman, komputasi saat waktu kompilasi adalah salah satu cara untuk mengimplementasikan metaprogramming, yang disebut sebagai pemrograman multi-tahap. Itu sama sekali bukan ide yang bodoh.
Bahasa seperti C++ yang "tanpa sengaja" jadi mengimplementasikan pemrograman multi-tahap mengalami masalah karena kode di tiap tahap (dalam kasus ini waktu kompilasi dan waktu eksekusi) menjadi sangat berbeda (C++ sekarang punya
constexpr, tapi tetap masih banyak kekurangannya di sana-sini). Zig, di sisi lain, sejak awal merancang bahasanya dengan mempertimbangkan pemrograman multi-tahap, sehingga punya kelebihan berupa kemampuan menulis kode yang hampir sama untuk waktu kompilasi dan waktu eksekusi, sekaligus kelemahan bahwa hanya sedikit hal yang bisa diprediksi pada waktu kompilasi.Jadi.... sepertinya ini bisa dipahami kira-kira sebagai: lewat
unittestyang tak terhindarkan, kode dijalankan lebih dulu saat kompilasi,lalu hal-hal yang berpotensi menjadi runtime error ditarik maju menjadi compile error...
Sekilas dari dokumentasi dan tanya jawab yang saya lihat, kemampuan untuk menggantikan C secara drop-in juga cukup menarik. Berbeda dengan Rust, sintaksnya juga sederhana, dan itu bagus. Tentu saja mungkin tidak seaman Rust... tapi rasanya kesan overengineering yang saya rasakan saat memakai Rust akan sedikit berkurang. Go juga sering disebut sebagai pembanding, dan tampaknya ada situasi di mana Zig yang tidak punya runtime terasa lebih ringan bebannya. Terutama jika ingin turun ke level yang lebih rendah, atau ketika tidak perlu menangani banyak request, ini bisa jadi opsi yang lebih menggoda daripada Go...
Jadi, kalau posisinya di antara Rust dan Go bisa pas, saya merasa ini mungkin bisa menjadi pilihan yang ternyata cukup bagus.