Montaj əlavələri dəstəyi ilə Rust 1.59 proqramlaşdırma dilinin 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.59 ü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:

  • Aşağı səviyyədə icraya nəzarət etməli və ya xüsusi maşın təlimatlarından istifadə edə bilən proqramlarda tələb olunan montaj dili əlavələrindən istifadə etmək mümkündür. Montaj əlavələri "asm!" makrolarından istifadə etməklə əlavə edilir. və "qlobal_asm!" Rust-da sətir dəyişdirmələri üçün istifadə edilənə bənzər registrləri adlandırmaq üçün simli formatlaşdırma sintaksisindən istifadə. Kompilyator x86, x86-64, ARM, AArch64 və RISC-V arxitekturaları üçün montaj təlimatlarını dəstəkləyir. Daxil etmə nümunəsi: std::arch::asm istifadə edin; // Növbələrdən istifadə edərək x-i 6-ya vurun və let mut x əlavə edin: u64 = 4; təhlükəli { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • İfadənin sol tərəfində bir neçə əlamət, dilim və ya strukturun göstərildiyi dağıdılmış (paralel) tapşırıqlar üçün əlavə dəstək. Məsələn: qoy (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Const generics üçün standart dəyərləri təyin etmək imkanı təmin edilmişdir: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn yeni(a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b], } } }
  • Yük paketi meneceri kompilyatordakı səhvlərə görə işlənən asılılıqlarda etibarsız strukturların istifadəsi ilə bağlı xəbərdarlıqlar verir (məsələn, xəta səbəbindən paketlənmiş strukturların sahələrinin təhlükəsiz bloklarda borc alınmasına icazə verildi). Rust-un gələcək versiyasında bu cür konstruksiyalar artıq dəstəklənməyəcək.
  • Cargo və rustc ayrıca yardım proqramı çağırmağa ehtiyac olmadan sazlama məlumatlarından (strip = "debuginfo") və simvollardan (strip = "simvollar") təmizlənmiş icra edilə bilən faylları yaratmaq üçün daxili qabiliyyətə malikdir. Təmizləmə parametri Cargo.toml-da “strip” parametri vasitəsilə həyata keçirilir: [profile.release] strip = “debuginfo”, “simvollar”
  • Artan kompilyasiya defolt olaraq qeyri-aktivdir. Səbəbin kompilyatorda qəzalara və sıradan çıxarma xətalarına səbəb olan səhv üçün müvəqqəti həll yolu olduğu bildirilir. Artıq səhv düzəlişi hazırlanıb və növbəti buraxılışa daxil ediləcək. Artan tərtibi qaytarmaq üçün RUSTC_FORCE_INCREMENTAL=1 mühit dəyişənindən istifadə edə bilərsiniz.
  • 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:
    • std::thread::available_parallelism
    • Nəticə::kopyalandı
    • Nəticə::klonlanmış
    • arch::asm!
    • arch::global_asm!
    • əməliyyat::ControlFlow::is_break
    • əməliyyatlar :: ControlFlow :: davam edir
    • u8 üçün TryFrom
    • char::TryFromCharError (Klonlama, Sazlama, Ekran, PartialEq, Kopyalama, Eq, Xəta)
    • iter::zip
    • NonZeroU8::ikinin_gücüdür
    • NonZeroU16::ikinin_gücüdür
    • NonZeroU32::ikinin_gücüdür
    • NonZeroU64::ikinin_gücüdür
    • NonZeroU128::ikinin_gücüdür
    • ToLowercase strukturu üçün DoubleEndedIterator
    • ToUppercase strukturu üçün DoubleEndedIterator
    • TryFrom<&mut [T]> üçün [T; N]
    • Bir dəfə quruluşu üçün UnwindSafe
    • Bir dəfə RefUnwindSafe
    • armv8 neon dəstək funksiyaları aarch64 üçün tərtibçiyə quraşdırılmışdır
  • Onun sabitlər əvəzinə istənilən kontekstdə istifadə imkanını təyin edən "const" atributundan funksiyalarda istifadə olunur:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUnit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_checked

Mənbə: opennet.ru

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