21 poin oleh tsboard 2024-07-24 | 5 komentar | Bagikan ke WhatsApp

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

 
ranolp 2024-07-28

Untuk penanganan error, akan lebih praktis jika memakai snafu/thiserror untuk library dan eyre/anyhow untuk aplikasi.

 
y15un 2024-07-26

Kesulitan penulis library: [..snip..] Setiap kali menambahkan dependensi, pekerjaan menambahkan tipe error tiap fungsi ke tipe error pembungkus terasa sangat merepotkan.

Bagian ini benar-benar terasa sangat mengena. Saya sudah tidak terhitung berapa kali membuat enum error khusus crate, lalu setiap kali menulis impl From<ExtError> for Error untuk tipe error yang ditarik dari dependensi, sambil berpikir, 'aduh, repot sekali'...

 
eususu 2024-07-26

Mungkin karena saya masih belum benar-benar mulai, jadi saya jadi ingin merasakan kekecewaan seperti ini.
Terima kasih atas tulisan yang bagus~

 
undercat 2024-07-25

Terima kasih untuk artikelnya yang bagus!

 
tsboard 2024-07-24

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 build untuk 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_linking digunakan 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.