Geri qayıt
Rust üçün adlandırılmış və istəyə bağlı arqumentlər təklifi
SiTech AI Team2 წთ. საკითხავი

Rust üçün adlandırılmış və istəyə bağlı arqumentlər təklifi

botahamec.dev bloqundakı yazı Rust-ın ən zəif yerinin adlandırılmış və istəyə bağlı arqumentlərin olmaması olduğunu iddia edir; Dart, C# və TypeScript müqayisə olunur və müəllif öz pre-RFC-ni təqdim edir.

botahamec.dev saytındakı yazı Rust-ın ən bezdirici boşluğunun adlandırılmış və istəyə bağlı arqumentlərin olmaması olduğunu iddia edir. Müəllif adlandırılmış arqumentlərin ən çətin əldə olunduğu dilin Rust olduğunu qeyd edir və yazını öz pre-RFC-si ilə tamamlayır.

Digər dillər bunu necə həll edir

Qrafik interfeyslər üçün nəzərdə tutulan və komponentləri çoxsaylı istəyə bağlı parametr daşıyan Dart adlandırılmış parametrləri qıvrım mötərizələrə alır; standart dəyərlərə və `required` açar sözünə icazə verir — müəllif bunu baxılan dillər arasında ən yaxşı həll hesab edir. C#-da hər parametr adlandırıla və ya standart dəyər ala bilər, bir şərtlə ki, bu dəyərlər məcburi parametrlərdən sonra gəlsin; TypeScript-də adlandırılmış parametrlər tək anonim obyektin dekompozisiyasını tələb edir, yəni sahə adları iki dəfə yazılır; müəllif bunu artıq söz çoxluğu sayır.

Bu boşluğun Rust üçün qiyməti

Rust-da adi həll `Default`-u tətbiq edən ayrıca parametr strukturu yaratmaq və çağırışı `..Default::default()` ilə bitirməkdir. Müəllifə görə bu, TypeScript variantından da pisdir: tiplər anonim deyil, tipin öz standartından fərqlənən dəyərlər ayrıca funksiya tələb edir və üsul yalnız bütün parametrlərin standart dəyəri olduqda işləyir.

Üç istəyə bağlı parametr üçün standart kitabxanadakı `HashMap`-in səkkiz konstruktoru var; onların arasında `new`, `with_capacity` və `_in` variantları ilə `with_hasher` yer alır və funksiyaların sayı eksponensial artır. Sıranı qarışdırmaq da asandır: `fn print(text: &str, bold: bool, italics: bool, underline: bool)` funksiyasında ikinci və üçüncü arqumentin yerini dəyişmək mətni hiss olunmadan qalın edir.

Müəllifin təklifi

Onun pre-RFC-si adlandırmanı parametr adından əvvəl gələn `pub` açar sözü ilə istəyə bağlı edir: `fn print_labeled_measurement(pub value: i32, pub unit_label: char = 'm')`, beləliklə çağırış `print_labeled_measurement(value: 5)` ola bilər. Adlandırılmış arqumentlər mövqelilərdən sonra gəlməlidir, lakin öz aralarında yenidən sıralana və standart dəyər ala bilər: `const` funksiyalarda ifadə sabit, adi funksiyalarda isə instansiya zamanı hesablanır. Trait-lər adlandırılmış parametrlərdən istifadə edə bilər, implementasiyalar adları təkrar etməlidir; funksiya göstəriciləri və `Fn` trait-ləri mövqeli qalır.

Digər təkliflər və açıq suallar

Müəllif daha zəif saydığı təklifləri də nəzərdən keçirir: struktur sahələri üçün standart dəyərlər (artıq Nightly Rust-dadır, o, `feluments` polyfill kitabxanası yazıb), struktur qeydlər, dil komandasının həyata keçirməyi çox çətin saydığı, standart dəyərlər əvəzinə həddindən artıq yükləmə təklif edən uzun Rust Internals Forum pre-RFC-si, əvvəlində nöqtə olan sintaksis və C# üslubunun kopyalanması. Adlar istəyə bağlı olduğundan təhlükəsizlik intizam məsələsi kimi qalır: Clippy lint-i və ya gələcək buraxılışda adların məcburi edilməsi təklif olunur. Açıq qalanlar: arqument sırası, `pub` açar sözünün seçimi və standart dəyərlərin həmişə `const` olub-olmaması.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.