Komunitas pemrograman Rust sedang ramai membicarakan kumpulan ekspresi yang tidak biasa dan membingungkan yang dimungkinkan oleh sistem tipe yang powerful dari bahasa ini. Meskipun ekspresi-ekspresi ini secara teknis adalah kode Rust yang valid, mereka menampilkan beberapa sudut yang lebih esoterik dari bahasa ini yang dapat membingungkan bahkan developer berpengalaman.
Sifat Desain Expression-First
Akar penyebab dari potongan kode yang aneh ini terletak pada filosofi desain fundamental Rust. Bahasa ini memperlakukan hampir segala sesuatu sebagai ekspresi yang mengembalikan nilai - blok, pernyataan if, ekspresi match, dan bahkan makro. Ini menciptakan sistem di mana ekspresi dapat disusun tanpa batas, yang mengarah pada kode yang valid secara sintaksis tetapi aneh secara semantik.
mereka ada karena seluruh bahasa dibangun untuk memperlakukan ekspresi sebagai warga kelas satu: blok, if, match, bahkan makro sebagai ekspresi yang mengembalikan nilai. jadi setelah Anda menginternalisasi itu, semua one liner aneh ini adalah artefak.
Pilihan desain ini berarti bahwa ketika developer mengeksplorasi level yang lebih dalam dari syntax tree Rust, mereka menemukan konstruksi yang terasa salah secara intuitif tetapi sangat dapat diterima oleh compiler.
Perspektif Komunitas tentang Keterbacaan
Menariknya, ekspresi aneh ini tidak hanya membingungkan bagi pemula. Developer Rust berpengalaman juga merasa sulit untuk memahaminya. Komunitas mengakui bahwa bahkan programmer berpengalaman membutuhkan waktu untuk memahami apa yang terjadi dalam pola kode yang tidak biasa ini.
Ekspresi-ekspresi tersebut berkisar dari penugasan tipe unit sederhana seperti let () = ();
hingga skenario yang lebih kompleks yang melibatkan never type (!
) dan komputasi diverging. Beberapa contoh termasuk fungsi yang tidak pernah kembali, loop yang break dengan nilai unit, dan closure yang digunakan dalam konteks yang tidak terduga.
Contoh Ekspresi Rust yang Aneh
Jenis Ekspresi | Contoh | Penjelasan |
---|---|---|
Penugasan Tipe Unit | let () = (); |
Menugaskan tipe unit ke pola tipe unit |
Variabel Tipe Never | let x: ! = loop { continue; }; |
Variabel bertipe never dengan loop tak terbatas |
Return Diverging | let x: ! = { return; }; |
Pernyataan return dalam konteks tipe never |
Loop dengan Break | let x = { loop { break; } }; |
Loop yang langsung break, mengembalikan tipe unit |
Pencocokan Range | match x { 1..=5 => ... } |
Pencocokan pola dengan range inklusif |
Pencocokan Closure | match closure(5) { 6 => ... } |
Pencocokan pada nilai kembalian closure |
Konteks Sejarah dan Evolusi
Diskusi ini juga telah mengungkap beberapa permata sejarah dari pengembangan Rust. Salah satu anggota komunitas membagikan contoh favorit yang melibatkan fungsi bernama evil_lincoln()
yang berasal dari versi Rust yang sangat lama. Contoh ini awalnya menggunakan keyword log
(yang mendahului makro println!
) dan dirancang sebagai lelucon yang merujuk pada mainan Lincoln Logs, meskipun humornya telah hilang seiring evolusi bahasa.
Implikasi Praktis
Meskipun ekspresi-ekspresi ini menarik untuk stress test parser, mereka memiliki nilai praktis yang terbatas dalam kode dunia nyata. Sebagian besar tidak melayani tujuan yang berguna selain mendemonstrasikan fleksibilitas dan kadang-kadang perilaku yang tidak terduga dari sistem tipe Rust. Beberapa mungkin berguna dalam kompetisi code golf, tetapi umumnya dihindari dalam kode produksi karena alasan keterbacaan.
Diskusi ini menyoroti aspek penting dari desain bahasa: keseimbangan antara ekspresivitas dan kejelasan. Sistem tipe Rust yang powerful memungkinkan konstruksi ini, tetapi komunitas umumnya setuju bahwa hanya karena sesuatu dimungkinkan tidak berarti itu harus digunakan dalam pemrograman sehari-hari.
Percakapan yang sedang berlangsung ini mencerminkan komitmen komunitas Rust untuk memahami bahasa mereka secara mendalam sambil mempertahankan fokus pada kode praktis dan mudah dibaca yang melayani aplikasi dunia nyata.
Referensi: Weird expressions in rust