Rust 1.66 Proqramlaşdırma Dili Buraxılışı

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin indi Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.66 ümumi məqsədli proqramlaşdırma dilinin buraxılışı dərc edilmişdir. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir və zibil toplayıcıdan və işləmə müddətindən istifadə etmədən yüksək iş paralelliyinə nail olmaq üçün vasitələr təqdim edir (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər azaldılır).

Rust-un yaddaşla işləmə üsulları tərtibatçını göstəricilərlə manipulyasiya edərkən xətalardan xilas edir və yaddaşın aşağı səviyyəli işləməsi nəticəsində yaranan problemlərdən qoruyur, məsələn, yaddaş sahəsi boşaldıqdan sonra ona daxil olmaq, sıfır göstəricilərə istinad etmək, bufer aşmaq və s. Kitabxanaları yaymaq, qurmaları təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Yaddaşın təhlükəsizliyi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyinin izlənməsi, obyektin istifadə müddətinin (əhatə dairələrinin) izlənməsi və kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Əsas yeniliklər:

  • Tam ədəd təsvirləri olan sadalamalarda ("#[repr(Int)]" atributu), hətta siyahıda sahələr olsa belə, diskriminantın (sadalamada variant sayı) açıq şəkildə göstərilməsinə icazə verilir. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42}
  • Sadəcə olaraq alınan dəyəri qaytaran core::hint::black_box funksiyası əlavə edildi. Kompilyator bu funksiyanın nəyisə etdiyini düşündüyü üçün, black_box funksiyası kod performans testini həyata keçirərkən və ya yaradılan maşın kodunu yoxlayarkən looplar üçün kompilyatorun optimallaşdırılmasını söndürmək üçün istifadə edilə bilər (tərtibçi kodu istifadə olunmamış hesab etməsin və onu silməsin). Məsələn, aşağıdakı nümunədə black_box(v.as_ptr()) kompilyatorun v vektorunun istifadə edilmədiyini düşünməsinə mane olur. std::hint::black_box istifadə edin; fn push_cap(v: &mut Vec) { 0..4-də i üçün { v.push(i); black_box(v.as_ptr()); } }
  • "Yük" paket meneceri "sil" əmrini təklif edir ki, bu da komanda xəttindən Cargo.toml manifestindən asılılıqları aradan qaldırmağa imkan verir.
  • API-nin yeni hissəsi stabillər kateqoriyasına köçürüldü, o cümlədən xüsusiyyətlərin üsulları və tətbiqləri stabilləşdirildi:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, doygun_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{birinci, sonuncu, pop_first, pop_last}
    • BTreeMap::{birinci_açar_dəyər, son_açar_dəyər, ilk_giriş, son_giriş, ilk_birinci, pop_son}
    • WASI istifadə edərkən stdio kilid növləri üçün AsFd tətbiqlərini əlavə edin.
    • impl TryFrom > Qutu üçün<[T; N]>
    • əsas :: işarə :: qara qutu
    • Müddət::try_from_secs_{f32,f64}
    • Seçim::zip
    • std::os::fd
  • Şablonlarda "..X" və "..=X" diapazonlarına icazə verilir.
  • Rustc kompilyatorunun ön hissəsini və LLVM arxa hissəsini qurarkən, nəticədə əldə edilən kodun işini artırmaq və yaddaş sərfini azaltmaq üçün LTO (Link Time Optimization) və BOLT (İkili Optimizasiya və Layout Tool) optimallaşdırma rejimlərindən istifadə olunur.
  • armv5te-none-eabi və thumbv5te-none-eabi platformaları üçün XNUMX-cü səviyyə dəstəyi həyata keçirilib. Üçüncü səviyyə əsas dəstəyi nəzərdə tutur, lakin avtomatlaşdırılmış sınaq olmadan, rəsmi quruluşların dərc edilməsi və kodun qurulması qabiliyyətinin yoxlanılması.
  • macOS Ümumi Kitabxanalarına keçid üçün əlavə dəstək.

Əlavə olaraq, Rust dilinin (gccrs) ön tərtibçisinin GCC kod bazasına daxil edildiyini qeyd edə bilərik. Frontend 13-cü ilin may ayında buraxılacaq GCC 2023 filialına daxildir. GCC 13-dən başlayaraq, standart GCC alət dəsti LLVM inkişaflarından istifadə edərək qurulmuş rustc kompilyatorunu quraşdırmadan Rust proqramlarını tərtib etmək üçün istifadə edilə biləcək. GCC 13-də Rust tətbiqi defolt olaraq aktiv edilməyən beta statusunda olacaq.

Mənbə: opennet.ru

Добавить комментарий