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.77 ü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:
- Yaddaşda null sonlu simvolla saxlanılan və "CStr" növü ilə əlaqəli olan C-sətirləri (c"mətn") üçün literallar üçün əlavə dəstək. Gözlənilir ki, C-string dəstəyi boş sonlu sətirlərdən istifadə edən proqramlaşdırma dillərində təbəqələrlə qarşılıqlı əlaqədə olan kodu sadələşdirəcək və tərtib mərhələsində lazımi yoxlamaların aparılmasına imkan verəcək. const HELLO: &core::ffi::CStr = c"Salam, dünya!";
- “Asinxron fn” ifadəsi ilə elan edilən asinxron icra edilən funksiyalarda rekursiyadan istifadəyə icazə verilir, yəni. belə funksiyalar indi özlərini çağıra bilər. async fn fib(n: u32) -> u32 { uyğunluq n {0 | 1 => 1, _ => Box::pin(fib(n-1)).wait + Box::pin(fib(n-2)).wait } }
- Ofset_of! makro sabitləşdi, bu, növün başlanğıcına nisbətən strukturların, siyahıların, birliklərin və tuplelərin sahələrinin bayt ofsetini təyin etməyə imkan verir. Təcrübədə makro, növün nümunəsi olmadıqda sahə ofset səviyyəsində işləməli olduğunuz hallarda faydalı ola bilər. Xüsusilə, sürücülər kimi aşağı səviyyəli komponentləri inkişaf etdirərkən ofset_of funksionallığı lazımdır. std::mem istifadə edin; #[repr(C)] struct FieldStruct { birinci: u8, ikinci: u16, üçüncü: u8 } assert_eq!(mem::ofset_of!(FieldStruct, birinci), 0); assert_eq!(mem::ofset_of!(FieldStruct, ikinci), 2); assert_eq!(mem::ofset_of!(FieldStruct, üçüncü), 4);
- Yük paketi menecerində, buraxılış profillərində, yük profilində sazlama rejimi açıq şəkildə aktivləşdirilmədiyi halda, faylların sazlama məlumatlarından təmizlənməsi standart olaraq aktivləşdirilir (strip = "debuginfo"), yəni. parametrin debug = 0 olarsa.
- "-Zthir-unsafeck=on" seçimi standart olaraq aktivdir və THIR (Yazılmış Yüksək Səviyyəli Ara Nümayəndəlik) üçün təhlükəli yoxlama təmin edir.
- Dəyişən statik dəyərlərə istinadlardan istifadə edərkən xəbərdarlıq göstərmək üçün static_mut_refs üçün lint yoxlaması əlavə edildi.
- “From<&[T;” növündən istifadə etmək imkanı tətbiq edilmişdir. "İnək<[T]>" növü üçün N]>". fn foo(məlumatlar: impl Into >) { /* … */ } fn main() { foo(&[“salam”, “dünya”]); }
- Kompilyator x16 sistemləri üçün 128 baytlıq i128 və u86 növlərinin uyğunlaşdırılmasını təmin edir.
- 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:
- massiv::hər_ref
- massiv::hər_mut
- core::net
- f32::round_ties_even
- f64::round_ties_even
- mem::ofset_of!
- dilim::ilk_parça
- dilim::first_chunk_mut
- dilim::split_first_chunk
- dilim::split_first_chunk_mut
- dilim :: son_ parça
- dilim::last_chunk_mut
- dilim::split_last_chunk
- dilim::split_last_chunk_mut
- dilim :: chunk_by
- dilim :: chunk_by_mut
- Bağlanmış:: xəritə
- File::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Üçüncü dəstək səviyyəsi aarch64-naməlum-illumos, altıbucaqlı-naməlum-none-elf, riscv32imafc-esp-espidf və riscv32im-risc0-zkvm-elf platformaları üçün həyata keçirilib. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq, rəsmi quruluşların dərc edilməsi və ya kodun tikilib-qurula bilməyəcəyini yoxlamaq olmadan.
Mənbə: opennet.ru
