Mozilla layihəsi əsasında hazırlanmış Rust 1.97 proqramlaşdırma dilinin buraxılışı yayımlandı, amma artıq müstəqil qeyri-kommersiya təşkilatı olan Rust Foundation tərəfindən inkişaf etdirilir. Dil, yaddaşın təhlükəsiz istifadəsinə fokuslanır və işlərin yüksək paralelliyi üçün vasitələr təqdim edir, bu zaman zibil toplayıcı və runtime istifadə etmədən, yalnız standart kitabxananın başlanğıcını və dəstəklənməsini əhatə edir.
Rust-da yaddaşla iş metodları, göstəricilərlə manipulyasiya edərkən səhvləri istisna etməyə yönəlib və yaddaşla aşağı səviyyəli iş nəticəsində ortaya çıxan problemlərdən, məsələn, azad edilmiş yaddaş sahəsinə müraciət, sıfır göstəricilərin de-referensiyası, tampon sərhədindən kənara çıxma və s. qorumağa çalışır. Kitabxanaların yayılması, tərtibatların təminatı və layihənin asılılıqlarının idarə edilməsi üçün paket meneceri Cargo inkişaf etdirilir. Kitabxanaların yerləşdirilməsi üçün crates.io anbarı dəstəklənir.
Rust-da yaddaşın təhlükəsiz işlənməsi, kompilyasiya zamanı istinadların yoxlanılması, obyektlərin sahibliliyinin izlənməsi, obyektlərin zamanını (görünmə sahəsi) diqqətə almaq və kodun icrası zamanı yaddaşa düzgün girişin qiymətləndirilməsi ilə təmin edilir. Rust, eyni zamanda tam ədəd aşmalarından qorunma vasitələri təqdim edir, dəyişənlərin istifadəsi üçün mütləq ilkin olaraq nəzərdə tutulmasını tələb edir, standart kitabxanada səhvləri daha yaxşı işləyir, dəyişməz (immutable) istinadların və dəyişənlərin varsayılan olaraq tətbiq olunduğu konsepsiyanı istifadə edir, mantıqlı səhvləri minimuma endirmək üçün güclü statik tip təsdiqi təklif edir.
Əsas yeniliklər:
- Varsayılan olaraq, yaradılan obyekt və icra fayllarında funksiyaların, qlobal dəyişənlərin və məlumat strukturlarının adlarının yeni dekore edilmə sxeması (-Csymbol-mangling-version=v0) aktivdir. Adlar, müxtəlif proqramların linklənməsi zamanı münaqişələrin qarşısını almaq üçün modulun yolu və crate-paketinin adı kimi spesifik kontekst əlavə edərək dekorasiya olunur.
Əvvəlki ad dekore etmə sxeması, Itanium ABI-yə əsaslanaraq, generik parametrlərin oxunmaz həşrlərlə əvəzlənməsi və Itanium ABI istifadə etməyən kompilyator hissələrinin olması kimi çatışmazlıqlara malik idi ki, bu da Rust üçün spesifik ad dekodlayıcılarının istifadəsini zəruri edirdi. Rust 1.97-də, avtomatik olaraq Rust üçün xüsusi hazırlanmış və qeyd olunan çatışmazlıqlardan azad edilmiş dekore etmə sxeması tətbiq edilir. Köhnə sxemanın, gələcək buraxılışlardan birində silinməsi planlaşdırılır.
- Cargo paket menecerinə, yığma zamanı kompilyatorun xəbərdarlıqlara reaksiya göstərilməsini idarə etmə imkanları daxil edilib. CARGO_BUILD_WARNINGS adlı mühit dəyişəni əlavə edilib, bu üç dəyər qəbul edir: warn (default) — xəbərdarlığın ekrana verilməsi; allow — xəbərdarlıqların gizlədilməsi; deny — xəbərdarlıqların yığmanı dayandıran xətalar kimi işlənməsi.
Köhnə versiyalarda xəbərdarlıq verildikdən sonra yığmanın tam başa çatdırılması üçün RUSTFLAGS-da «-Dwarnings» göstərişini yazmaq lazım idi, lakin RUSTFLAGS dəyişdikdə, cargo paket meneceri yığmanı yeni hesab edir, kəşfdəki məlumatlara baxmır və layihəni sıfırdan tamamilə yenidən yığırdı. Cargo tərəfində parametrlərin köçürülməsi kəşfin sıfırlanmasını və xəbərdarlıq işləmə rejiminin dəyişdirilməsi zamanı tam rekompilyasiyaya ehtiyacı çıxarırdı, həmçinin davamlı inteqrasiya sistemlərində xəbərdarlıqların xətalar kimi işlənməsini asanlaşdırırdı.
- Yığma zamanı, yığmaçının çıxardığı mesajların görünməsi default kimi aktivdir. Mesajlar, standard «warnings» qrupuna daxil olmayan xüsusi lint-qaydası olan «linker_messages» şəklində xəbərdarlıq kimi təqdim edilir. Bu zaman rustc, tiplə bağlı yanlış pozitivlər və normal davranışlar olan mesajları filtr edir və mümkün problemlərə işarə edən xəbərdarlıqları, məsələn, köhnəlmiş seçimlər və istənilməyən parametrlər haqqında olanları buraxır. Əvvəllər, kompilatorun məlumatları yalnız xətalı başa çatdıqda göstərilirdi, əks halda bütün mesajlar gizlədilirdi. Əvvəlki davranışı bərpa etmək üçün Cargo.toml-a əlavə edə bilərsiniz: [lints.rust] linker_messages = "allow"
- Yeni API stabil vəziyyətə keçirilib, o cümlədən stabil edilmiş metodlar və strukturlar:
- RepeatN üçün Default
- ffi::FromBytesUntilNulError üçün Copy
- UEFI üçün std::fs::File üçün Send
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- char::is_control metodunda "const" işarəsi tətbiq edilib.
Daha bir qeyd olaraq, Rust ilə əlaqəli yeni elan edilmiş layihələr və hadisələri vurğulamaq olar:
- Zinnia layihəsi Rust dilində yazılmış modul Unix-şəkilli nüvənin inkişafını həyata keçirir və GPLv2 lisenziyası altında yayımlanır. Nüvə POSIX interfeyslərini və BSD və Linux-dan bəzilərini, məsələn, epoll və timerfd kimi genişləndirmələri dəstəkləyir. Çizim və girişin təşkili üçün DRM (Direct Rendering Manager) və evdev sürücüləri mövcuddur. Realizə edilmiş funksionallıq, X-serveri altında Xfce masaüstü mühitinin işləməsi üçün kifayətdir. server Wayland əsasında Weston. QEMU emulyatorunda və ThinkPad E14 G7 kimi real avadanlıqda yüklənmə mümkündür.
- İnteraktiv rabitə kitabxanası iroh 1.0-ın təqdimatı oldu. Bu kitabxana şifrəli açarlarla əlaqə quraraq fərqli hostlardakı tətbiqlər arasında şəbəkə bağlantıları yaradır. IP ünvanları (birlikdə işləmək istədiyiniz açarı göstərirsiniz və iroh ona bağlı hostu taparaq QUIC protokolundan istifadə edərək şifrəli bir bağlantı qurur). Mümkünsə, birbaşa P2P bağlantıları qurulur, ancaq bu mümkün olmadıqda açarlarla hostları aşkar etmək üçün reler vasitəsilə işləməyə keçilir. Öz relenizi işə salmaq və ya icma tərəfindən dəstəklənən açıq relere qoşulmaq mümkündür.
Genişləndirilmiş imkanlar arasında: bir neçə marşrut üzrə paketlərin eyni zamanda çatdırılması üçün Multipath QUIC dəstəyi, NAT arxasında işləmə imkanı, internetə giriş olmadan lokal cihazlara qoşulma üçün statik konfiqurasiya rejimi, brauzerdə icra etmək üçün WASM-a intermediarl kod şəklində yığma imkanı, Bluetooth, WiFi Aware və ya LoRa vasitəsilə qoşulma üçün öz transportlarınızı yaratma dəstəyi. Kod Rust dilində yazılmışdır və Apache-2.0 və MIT lisenziyaları altında yayımlanır. Python, Node.js, Kotlin və Swift üçün əhatə dairələri mövcuddur.
- Bun server JavaScript platformasının müəllifi Zig dilindən Rust dilinə Bun layihəsinin yenidən yazılması ilə bağlı məqalə yayımlamışdır. AI modeli Claude Fable-dan istifadə edilərək qeyd edilir ki, Bun 1.3.14 Zig-dəki son buraxılış olacaq və Bun 1.4.0-ın növbəti versiyası artıq Rust-da olacaq. Keçirilmiş testlərə görə, Rust versiyası Zig versiyasına nisbətən əhəmiyyətli dərəcədə daha az yaddaş istehlak edir və 2-5% daha sürətlidir. Rust versiyasının icra faylının ölçüsü 20% azalmışdır.
Mənbə: opennet.ru
