Komuniti pengaturcaraan Rust telah sibuk dengan perbincangan mengenai koleksi ekspresi luar biasa dan mengelirukan yang dibenarkan oleh sistem jenis bahasa yang berkuasa. Walaupun ekspresi-ekspresi ini secara teknikal adalah kod Rust yang sah, ia menunjukkan beberapa sudut yang lebih esoterik dalam bahasa ini yang boleh mengelirukan pembangun berpengalaman sekalipun.
Sifat Reka Bentuk Mengutamakan Ekspresi
Punca utama petikan kod yang pelik ini terletak pada falsafah reka bentuk asas Rust . Bahasa ini menganggap hampir segala-galanya sebagai ekspresi yang mengembalikan nilai - blok, pernyataan if, ekspresi match, dan juga makro. Ini mewujudkan sistem di mana ekspresi boleh digabungkan tanpa had, membawa kepada kod yang sah secara sintaks tetapi pelik secara semantik.
mereka wujud kerana keseluruhan bahasa dibina untuk menganggap ekspresi sebagai warganegara kelas pertama: blok, if, match, bahkan makro sebagai ekspresi yang mengembalikan nilai. jadi sebaik sahaja anda mendalami itu, semua satu baris pelik ini adalah artifak.
Pilihan reka bentuk ini bermakna apabila pembangun meneroka tahap yang lebih mendalam dalam pokok sintaks Rust , mereka menemui konstruk yang terasa salah secara intuitif tetapi diterima sepenuhnya oleh pengkompil.
Perspektif Komuniti Mengenai Kebolehbacaan
Menariknya, ekspresi pelik ini bukan sahaja mengelirukan pendatang baru. Pembangun Rust berpengalaman juga mendapati ia mencabar untuk difahami. Komuniti mengakui bahawa pembangun berpengalaman sekalipun memerlukan masa untuk memahami apa yang berlaku dalam corak kod luar biasa ini.
Ekspresi-ekspresi tersebut berkisar daripada tugasan jenis unit mudah seperti let () = ();
kepada senario yang lebih kompleks melibatkan jenis never (!
) dan pengiraan yang menyimpang. Beberapa contoh termasuk fungsi yang tidak pernah kembali, gelung yang pecah dengan nilai unit, dan penutupan yang digunakan dalam konteks yang tidak dijangka.
Contoh Ekspresi Rust Yang Pelik
Jenis Ekspresi | Contoh | Penjelasan |
---|---|---|
Penetapan Jenis Unit | let () = (); |
Menetapkan jenis unit kepada corak jenis unit |
Pembolehubah Jenis Never | let x: ! = loop { continue; }; |
Pembolehubah jenis never dengan gelung tak terhingga |
Pulangan Menyimpang | let x: ! = { return; }; |
Pernyataan return dalam konteks jenis never |
Gelung dengan Break | let x = { loop { break; } }; |
Gelung yang break serta-merta, mengembalikan jenis unit |
Padanan Julat | match x { 1..=5 => ... } |
Padanan corak dengan julat inklusif |
Padanan Closure | match closure(5) { 6 => ... } |
Padanan pada nilai pulangan closure |
Konteks Sejarah dan Evolusi
Perbincangan ini juga telah menggali beberapa permata sejarah daripada pembangunan Rust . Seorang ahli komuniti berkongsi contoh kegemaran yang melibatkan fungsi yang dipanggil evil_lincoln()
yang bermula sejak versi Rust yang sangat lama. Contoh ini pada asalnya menggunakan kata kunci log
(yang mendahului makro println!
) dan direka sebagai jenaka merujuk kepada mainan Lincoln Logs , walaupun humor tersebut telah hilang seiring evolusi bahasa.
Implikasi Praktikal
Walaupun ekspresi-ekspresi ini menarik untuk ujian tekanan parser, ia mempunyai nilai praktikal yang terhad dalam kod dunia sebenar. Kebanyakannya tidak mempunyai tujuan berguna selain daripada menunjukkan fleksibiliti dan kadang-kadang tingkah laku yang tidak dijangka dalam sistem jenis Rust . Ada yang mungkin berguna dalam pertandingan golf kod, tetapi ia umumnya dielakkan dalam kod pengeluaran atas sebab kebolehbacaan.
Perbincangan ini menyerlahkan aspek penting dalam reka bentuk bahasa: keseimbangan antara daya ekspresif dan kejelasan. Sistem jenis Rust yang berkuasa membolehkan konstruk-konstruk ini, tetapi komuniti umumnya bersetuju bahawa hanya kerana sesuatu itu mungkin tidak bermakna ia patut digunakan dalam pengaturcaraan harian.
Perbualan berterusan ini mencerminkan komitmen komuniti Rust untuk memahami bahasa mereka secara mendalam sambil mengekalkan fokus pada kod praktikal dan boleh dibaca yang melayani aplikasi dunia sebenar.
Rujukan: Weird expressions in rust