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

Baş verdi sistem proqramlaşdırma dili buraxılışı Pas 1.34, Mozilla layihəsi tərəfindən hazırlanmışdır. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir, avtomatik yaddaş idarəetməsini təmin edir və zibil toplayıcıdan və ya iş vaxtından istifadə etmədən yüksək tapşırıq paralelliyinə nail olmaq üçün bir vasitə təqdim edir.

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:

  • Yük paketi meneceri crates.io ictimai reyestri ilə birlikdə mövcud ola biləcək alternativ paket reyestrləri ilə işləmək üçün alətlər əlavə etdi. Məsələn, mülkiyyət proqramlarının tərtibatçıları indi Cargo.toml-da asılılıqların siyahısında istifadə oluna bilən şəxsi reyestrindən istifadə edə və məhsulları üçün crates.io-ya oxşar versiya modelini tətbiq edə, həmçinin hər iki qutuya asılılıqlara istinad edə bilərlər. io və öz reyestrinizə.

    .cargo/config-ə xarici registrlər əlavə etmək üçün ($HOME-da və ya paket kataloqunda yerləşir)
    nəzərdə tutulmuşdur “[registrlər]” bölməsində və xarici reyestrdən istifadə etmək üçün Cargo.toml-da hər bir asılılığın təsvirində “reyestr” seçimi görünür. Əlavə reyestrə qoşulmaq üçün identifikasiya nişanını ~/.cargo/credentials faylına yerləşdirin və əmri yerinə yetirin.
    "cargo login --registr=my-registr" və paketi dərc etmək üçün -
    "cargo publish -registry=my-registr";

  • “?” operatorundan istifadə üçün tam dəstək əlavə edildi. sınaqlarda doktestlər, sənədlərdəki nümunə kodunu testlər kimi istifadə etməyə imkan verir. Əvvəllər operator
    "?" testin icrası zamanı səhvləri idarə etmək üçün yalnız “fn main()” funksiyası və ya “#[test]” funksiyaları olduqda istifadə edilə bilər;

  • Xüsusi atributlarda prosedur makrolarından istifadə etməklə müəyyən edilir təmin olunub ixtiyari token dəstlərindən istifadə etmək imkanı (“#[attr($tokens)]”, “#[attr[$tokens]] və #[attr{$tokens}]”). Əvvəllər elementlər yalnız sətir literallarından istifadə etməklə ağac/rekursiv formada göstərilə bilərdi, məsələn “#[foo(bar, baz(quux, foo = “bar”))]”, lakin indi sadalamalardan istifadə etmək mümkündür (' #[aralıq(0. .10)]') və “#[bound(T: MyTrait)]” kimi konstruksiyalar;
  • Stabilləşdirilmiş növlər (xüsusiyyət) TryFrom и TryInto, xətaların idarə edilməsi ilə növ dönüşümlərinə icazə verir. Məsələn, tam ədədli from_be_bytes kimi metodlar giriş kimi massivlərdən istifadə edir, lakin məlumatlar çox vaxt Slice tipində olur və massivlər və dilimlər arasında konvertasiyanı əl ilə etmək problemlidir. Yeni əlamətlərin köməyi ilə, göstərilən əməliyyat .try_into(), məsələn, “let num = u32::from_be_bytes(slice.try_into()?)” nömrəsinə zəng vasitəsilə tez yerinə yetirilə bilər. Həmişə uğurlu olan dönüşümlər üçün (məsələn, u8 növündən u32-yə qədər) xəta növü əlavə edildi Məsum, şəffaf istifadəyə imkan verir
    "From"un bütün mövcud tətbiqləri üçün TryFrom;

  • Funksiya köhnəldi CommandExt ::before_exec, fork() çağırışından sonra çəngəllənmiş uşaq prosesi kontekstində icra edilən exec-i işə salmadan əvvəl işləyicinin icrasına icazə verdi. Belə şəraitdə fayl deskriptorları və xəritələşdirilmiş yaddaş sahələri kimi ana prosesin bəzi resursları təkrarlana bilər ki, bu da qeyri-müəyyən davranışa və kitabxanaların düzgün işləməməsinə səbəb ola bilər.
    before_exec əvəzinə təhlükəli funksiyadan istifadə etmək tövsiyə olunur CommandExt::pre_exec.

  • Ölçüsü 8 ilə 64 bit arasında dəyişən sabitləşdirilmiş işarəli və işarəsiz atom tam ədədləri (məsələn, Atom U8), həmçinin imzalanmış növlər NonZeroI[8|16|32|64|128].
  • API-nin yeni hissəsi stabil kateqoriyaya köçürülüb, o cümlədən Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[əlavə|sub] ] və SystemTime metodları sabitləşdi ::checked_[əlavə|alt]. iter::from_fn və iter::successors funksiyaları sabitləşdi;
  • Bütün tam ədəd növləri üçün checked_pow, saturating_pow, wrapping_pow və overflowing_pow üsulları həyata keçirilir;
  • “-C linker-plugin-lto” qurma seçimini göstərərək əlaqələndirmə mərhələsində optimallaşdırmaları aktivləşdirmək imkanı əlavə edildi.

Mənbə: opennet.ru

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