Hal-hal Mengecewakan yang Saya Rasakan setelah Menggunakan Rust selama Sekitar 10 Tahun (dan Mencintainya)
(reddit.com)Saya telah menggunakan Rust selama kurang lebih 10 tahun, dan saya benar-benar mencintai bahasa ini. Namun, ada juga beberapa hal yang mengecewakan. Berikut daftarnya.
1. Masalah pada Result<T, E>
Fakta bahwa penanganan error di Rust jelas dan dipaksakan adalah hal yang luar biasa. Namun saat benar-benar digunakan, ada banyak ketidaknyamanan.
- Kesulitan bagi penulis library: Proses membuat tipe error baru dan mengonversinya cukup merepotkan. Setiap kali menambahkan dependensi, pekerjaan menambahkan tipe error masing-masing fungsi ke tipe error pembungkus sangat mengganggu.
- Kerumitan dalam kode aplikasi: Yang penting bukanlah mengapa sebuah fungsi gagal, melainkan meneruskan error ke tingkat atas dan menampilkan hasilnya kepada pengguna. Berbeda dengan Java, Rust tidak menyediakan backtrace selama proses propagasi, sehingga sulit mengetahui akar masalahnya.
2. Fleksibilitas sistem modul
Sistem modul Rust terlalu fleksibel sehingga justru sering terasa tidak nyaman.
- Fleksibilitas berlebihan: Kita bisa mengekspor ulang tipe atau mengatur tingkat akses secara sangat rinci, tetapi ini dapat menyebabkan tipe yang tidak diinginkan terekspos secara tidak sengaja.
- Masalah aturan orphan: Membagi proyek menjadi beberapa crate memang direkomendasikan, tetapi aturan orphan terkadang justru menghalangi.
3. Waktu kompilasi dan alat IDE
Waktu kompilasi Rust dan pemeriksaan error pada alat IDE terlalu lambat.
- Waktu kompilasi yang lama: Pada proyek skala besar, mengubah satu fungsi dapat membuat seluruh crate dikompilasi ulang, dan ini sangat tidak efisien.
- Respons IDE yang lambat: Rust analyzer terasa seperti mengindeks ulang proyek setiap kali mengetik, dan ini menjadi masalah terutama pada proyek besar.
Kesimpulan
Rust adalah bahasa favorit saya, tetapi hal-hal mengecewakan ini juga ada. Saya penasaran apakah pengguna lain juga mengalami masalah yang sama.
5 komentar
Untuk penanganan error, akan lebih praktis jika memakai
snafu/thiserroruntuk library daneyre/anyhowuntuk aplikasi.Bagian ini benar-benar terasa sangat mengena. Saya sudah tidak terhitung berapa kali membuat
enumerror khusus crate, lalu setiap kali menulisimpl From<ExtError> for Erroruntuk tipe error yang ditarik dari dependensi, sambil berpikir, 'aduh, repot sekali'...Mungkin karena saya masih belum benar-benar mulai, jadi saya jadi ingin merasakan kekecewaan seperti ini.
Terima kasih atas tulisan yang bagus~
Terima kasih untuk artikelnya yang bagus!
Saya tambahkan komentar berikut karena tampaknya akan membantu terkait waktu kompilasi yang lama: (oleh pr4wl)
Jika Rust analyzer melakukan rekompilasi panjang setiap kali ada perubahan, kemungkinan itu karena fitur atau variabel lingkungan yang digunakan berbeda dari yang dipakai saat membangun aplikasi. Secara default, RA menggunakan direktori target yang sama dengan
cargo builduntuk menyimpan artefak build, dan jika menjalankan build yang tidak saling kompatibel, prosesnya akan terus melakukan build penuh.Masalah ini khususnya sering terjadi di Bevy ketika fitur
bevy/dynamic_linkingdigunakan saat build, tetapi tidak digunakan di Rust analyzer.Solusi paling sederhana adalah mengarahkan RA untuk menggunakan direktori target yang berbeda. Detail lebih lanjut terkait hal ini bisa dilihat di
rust-analyzer.cargo.targetDir.Solusi lainnya adalah menyetel semua fitur dan variabel lingkungan agar sama sehingga artefak build dapat dipakai ulang satu sama lain. Namun, ini bisa cukup rumit.