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

nəşr edilmişdir sistem proqramlaşdırma dili buraxılışı Pas 1.40, Mozilla layihəsi tərəfindən yaradılmışdır. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir, yaddaşın avtomatik idarə edilməsini təmin edir və zibil toplayıcıdan istifadə etmədən yüksək tapşırıq paralelliyinə nail olmaq üçün alətlər təqdim edir. uzunluğu.

Rust-un avtomatik yaddaş idarəçiliyi tərtibatçını göstəricilərin manipulyasiyasından azad edir və boş yaddaşa daxil olma, boş göstəricidən imtina, buferin aşılması və s. kimi aşağı səviyyəli yaddaş manipulyasiyasından yaranan problemlərdən qoruyur. Kitabxanaları yaymaq, montajı təmin etmək və layihə tərəfindən asılılıqları idarə etmək üçün paket meneceri hazırlanır. Yük, proqram üçün lazım olan kitabxanaları bir kliklə əldə etməyə imkan verir. Kitabxanaların saxlanması üçün repozitoriya dəstəklənir crates.io.

Əsas yeniliklər:

  • " atributundan istifadə edərək strukturları (struktur) və siyahıları (variant bloku ilə enum) qeyd etmək imkanı əlavə edildi.#[tam_qeyri]", hansı imkan gələcəkdə elan edilmiş strukturlara və siyahılara yeni sahələr və seçimlər əlavə edin. Məsələn, açıq elan edilmiş sahələri olan strukturları olan modulların tərtibatçıları gələcəkdə yeni sahələr əlavə edə biləcək strukturları qeyd etmək üçün "#[non_exhaustive]" işarəsindən istifadə edə bilərlər. İndiyə qədər, bu vəziyyətdə, tərtibatçı sahələrin özəl elan edilməsi və sahələrin dəyişməz siyahısına bağlanması arasında seçim etmək məcburiyyətində qaldı. Yeni atribut bu məhdudiyyəti aradan qaldırır və əvvəllər tərtib edilmiş xarici kodu pozmaq riski olmadan gələcəkdə yeni sahələr əlavə etməyə imkan verir. Sandıq paketlərində, “uyğunluq” bölməsindəki seçimləri uyğunlaşdırarkən, mümkün gələcək sahələri əhatə edən “_ => {...}” maskasının açıq tərifi tələb olunur, əks halda yeni sahələr əlavə edilərkən xəta görünəcək.
  • Əlavə edilib tip kontekstində prosessual makro mac!() çağırmaq imkanı. Məsələn, əgər “tipə_genişlət” prosedur makrodursa, indi “tip Foo = genişlətmə_tipi!(bar);” yaza bilərsiniz.
  • "extern { ... }" bloklarında əlavə etdi prosedur və atribut makrolarından, o cümlədən “bang!()” makrolarından istifadə etmək bacarığı, məsələn:

    makro_qaydalar! make_element { ($name:ident) => { fn $name(); } }

    xarici {
    make_element!(alfa);
    make_element!(beta);
    }

    xarici "C" {
    #[mənim_kimliyim_makros] fn foo();
    }

  • Makroslarda həyata keçirilən “makro_qaydalar!” elementlərini yaratmaq bacarığı. "Makro_qaydalar!" həm funksiyaya bənzər makrolarda (“mac!()”), həm də atributlar şəklində olan makrolarda (“#[mac]”) mümkündür.
  • $m:meta Xəritəçəkmə elementində əlavə etdi ixtiyari nişan sadalama dəyərlərinə dəstək ("[TOKEN_STREAM]", "{TOKEN_STREAM}" və "(TOKEN_STREAM)"), məsələn:

    makro_qaydalar! qəbul_meta { ($m:meta) => {} }
    qəbul_meta!( my::path );
    qəbul_meta!( my::path = "yandırılır" );
    qəbul_meta!( my::path ( abc ) );
    qəbul_meta!( my::path [ abc ] );
    qəbul_meta!( mənim :: yol { abc } );

  • Rust 2015 rejimində NLL (Leksik Olmayan Ömürlər) texnikasından istifadə edərək dəyişənlərin (borrow checker) borclanması yoxlanılarkən müəyyən edilmiş problemlər üçün səhv çıxışı aktivləşdirilir. Əvvəllər Rust 2018 rejimində işləyərkən xəbərdarlıqlar səhvlərlə əvəz olunurdu.
    Dəyişiklik Rust 2015 rejiminə qədər uzadıldıqdan sonra tərtibatçılar nəhayət edə bildilər qurtarmaq köhnə borc çekindən.

    Yada salaq ki, borc götürülmüş dəyişənlərin istifadə müddətini nəzərə almaq üçün yeni mexanizmə əsaslanan yoxlama sistemi köhnə yoxlama kodu ilə diqqətdən kənarda qalan bəzi problemləri müəyyən etməyə imkan verdi. Bu cür yoxlamalar üçün səhv çıxışı əvvəllər işləyən kodla uyğunluğa təsir edə bildiyi üçün əvvəlcə səhvlər əvəzinə xəbərdarlıqlar verilirdi.

  • Onun sabitlər əvəzinə istənilən kontekstdə istifadə imkanını müəyyən edən “const” atributu is_power_of_two funksiyası üçün istifadə olunur (imzasız tam ədədlər üçün).
  • API-nin yeni hissəsi todo!() makrosu və dilim::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value daxil olmaqla stabil kateqoriyaya köçürüldü, metodlar stabilləşdirildi.
    Seçim::as_deref, Seçim::as_deref_mut, Seçim::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32} f64}::from_be_bayt, {f32,f64}::from_le_bayt və {f32,f64}::from_ne_bayt.

  • Paket menecerində yük
    həyata keçirilən diskdə kompilyator xəbərdarlıqlarının keşləşdirilməsi. "Kargo metadata" seçimi "yük metadata" əmrinə əlavə edildi--filtr platforması" asılılıq həlli sütununda yalnız müəyyən edilmiş hədəf platformaya bağlı paketləri göstərmək üçün. Etibarlı TLS versiyalarını müəyyən etmək üçün http.ssl-versiya konfiqurasiya seçimi əlavə edildi.
    Bölməni dərc etmək imkanı əlavə edildi "devdən asılılıqlar"versiya" düyməsini göstərmədən.

  • Rustc tərtibçisi thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 və mips64el-naməlum-linux-muslabi64 hədəf platformaları üçün üçüncü səviyyəli dəstək təmin edir. Üçüncü səviyyə əsas dəstəyi nəzərdə tutur, lakin avtomatlaşdırılmış sınaq və rəsmi quruluşların dərci olmadan.

Mənbə: opennet.ru

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