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.78 ü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:
- Kompilyator tərəfindən istehsal edilən səhv mesajlarına təsir etmək üçün bir vasitə təmin edən yeni "#[diaqnostik]" atribut ad sahəsi təklif edilmişdir. Yeni məkanda birincisi "#[diaqnostik::on_unimlemented]" atributudur ki, bu atribut, növ üçün tətbiq olunmayan bir xüsusiyyətdən istifadə etməyiniz lazım olan bir vəziyyətdə atılan səhv mesajlarını fərdiləşdirmək üçün istifadə edilə bilər. #[diagnostic::on_unimlemented( message = "My ImportantTrait<{A}>` üçün Mesajım `{Self}` üçün həyata keçirilməyib", label = "Mənim Etiketim", qeyd = "Qeyd 1", qeyd = "Qeyd 2" )] əlaməti ImportantTrait {} fn use_my_trait(_: impl ImportantTrait) ) {} fn main() { use_my_trait(String::new()); } xəta[E32]: `İmportantTrait üçün Mesajım ` `String` —> src/main.rs:0277:32 üçün həyata keçirilmir | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Etiketim | | | bu zəng tərəfindən təqdim edilən bir hədd tələb | = kömək: əlamət `İmportantTrait ` `String` üçün həyata keçirilməyib = qeyd: Qeyd 18 = qeyd: Qeyd 12
- Təhlükəsiz funksiyalara tətbiq edilən əvvəlcədən təsdiqləmə yoxlamaları indi kod yaradılmasına qədər təxirə salına bilər ki, bu da bu yoxlamaları "#[cfg(debug_assertions)]" rejimində standart kitabxana qurmağa ehtiyac olmadan həyata keçirməyə imkan verir. Yoxlamaları işə salmaq üçün kodunuzun test və ya sazlama quruluşları üçün debug təsdiqlərini aktivləşdirmək kifayətdir.
- Göstəricilərin və dilimlərin düzülməsinə təsir edən standart kitabxanada funksiyaların davranışı indi icra zamanı proqnozlaşdırıla bilər və daxil edilmiş məlumatlardan asılıdır. Göstəricini hizalamaq üçün ofseti hesablayan göstərici::align_offset funksiyası indi yalnız əməliyyat uğursuz olarsa usize::MAX funksiyasını qaytarır. slice::align_to və slice::align_to_mut funksiyaları hər ikisi də dilimləri düzlənmiş orta dilim və orijinal başlanğıc və bitiş dilimləri ilə təsvirə çevirir, indi həmişə ən böyük orta hissəni qaytarır.
- Aşağıdakılar stabil kateqoriyaya köçürüldü:
- impl &Stdin üçün oxuyun
- Bəzi std::error::Xəta ilə əlaqəli tətbiqlər üçün statik olmayan (qeyri-statik) ömür müddətinin istifadəsinə icazə verin.
- Impl həyata keçirilməsi ?Ölçü dəyərinə icazə verilir.
- impl From io :: Xəta üçün
- Barrier::new() funksiyası sabitlər əvəzinə istənilən kontekstdə "const" atributu ilə istifadə olunmaq üçün stabilləşdirilib.
- Hədəf platformaları üçün x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm və i686windows-vp- indi ən azı Windows 10 versiyası tələb olunur.
- Üçüncü səviyyəli dəstək wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf və loongarch64-naməlum-linux-musl 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 nəşri və ya kodun tikilib-qurula bilməyəcəyini yoxlamadan.
- Add wasm32-wasip1 hədəf platforması üçün ikinci dəstək səviyyəsi həyata keçirildi. İkinci səviyyəli dəstək montaj zəmanətini əhatə edir.
- wasm32-wasi-preview1-threads platformasının adı wasm32-wasip1-threads olaraq dəyişdirildi.
- Kompilyator LLVM 18-dən istifadə etməyə dəyişdirilib. X18-86 və x32-86 arxitekturaları üçün LLVM 64-dən istifadə edildikdə, u128 və i128 növləri ilə əlaqəli ABI dəyişdirildi.
- Yük müqaviləsi menecerində kilid fayllarının 4-cü versiyası (lockfile v4) stabilləşdirilib.
- Cargo ən son məlumat istifadəsi haqqında məlumatı olan sabitləşdirilmiş qlobal keşə malikdir. Keş SQLite istifadə edərək $CARGO_HOME/.global-cache-də yerləşdirilir və indeks, sandıq faylı, kod kataloqu, git klonu və git checkout-da ən son dəyişiklikləri əks etdirmək üçün avtomatik yenilənir.
Bundan əlavə, Borgo proqramlaşdırma dili Go dilindən daha ifadəli olmağa çalışır, lakin Rust dilindən daha az mürəkkəbdir. Borgo Go və Rust-un ən yaxşı xüsusiyyətlərini birləşdirir, hər bir dilin çatışmazlıqlarını tamamlayır. Məsələn, Go sadə və sadədir, lakin qabaqcıl tipli təhlükəsizlik xüsusiyyətlərini təmin etmir. Rust dili təhlükəsiz proqramlaşdırma üçün alətlər təqdim edir, lakin həddən artıq mürəkkəbdir. Layihəni “The Simple Haskell Handbook” kitabının müəllifi və Quad CI davamlı inteqrasiya sisteminin tərtibatçısı Marko Sampellegrini hazırlayır.

Borgo statik yazma, Go-bənzər növlər və Rust-a bənzər sintaksisdən istifadə edir. Borgo kodunda sətirlərin sonunda nöqtəli vergüllər isteğe bağlıdır. Borgo kodu mövcud Go paketləri ilə tam uyğun gələn Go təqdimatında tərtib edilmişdir. Kompilyator kodu Rust-da yazılmışdır və ISC lisenziyası altında paylanmışdır. fmt enum NetworkState istifadə edin { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: “Salam dünya”, müddət: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “hələ də yüklənir”, NetworkState.Failed(kod) => fmt.Sprintf(“Səhv kodu var: %d”, kod), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Mənbə: opennet.ru
