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

Mozilla layihəsi tərəfindən hazırlanmış Rust 1.34 sistem proqramlaşdırma dili buraxı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 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ə yaddaşın boşaldılmasından sonrakı girişlər, boş göstəricilərə istinadlar, 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ə asılılıqları idarə etmək üçün layihə proqram üçün lazım olan kitabxanaları bir kliklə əldə etməyə imkan verən Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Ə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 registr əlavə etmək üçün
    “[registrlər]” bölməsində yeni “mənim-registrim” variantı təqdim olunub və “[asılılıqlar]” bölməsində Cargo.toml-da asılılıqlardakı xarici reyestrdən bəhs etmək üçün “digər-kaset” seçimi əlavə edilib. Ə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. doctestlərdə, 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;

  • Prosedur makrolarından istifadə etməklə müəyyən edilmiş fərdi atributlarda ixtiyari token dəstlərindən istifadə etmək mümkündür (“#[attr($token)]”, “#[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;
  • TryFrom və TryInto xassələri sabitləşdirilib, xətaların idarə edilməsi ilə növə çevrilməyə imkan 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 konvertasiya əl ilə etmək problemlidir. Yeni əlamətlərin köməyi ilə müəyyən edilmiş ə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 çevrilmələr üçün (məsələn, u8 növündən u32-yə qədər) şəffaf istifadəyə imkan vermək üçün Yanlış olmayan xəta növü əlavə edilmişdir.
    "From"un bütün mövcud tətbiqləri üçün TryFrom;

  • CommandExt::before_exec funksiyası köhnəldi, hansı ki, fork() çağırışından sonra çəngəllənmiş uşaq prosesi kontekstində icra edilən icraçıdan əvvəl işləyicinin icrasına icazə verir. 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 CommandExt::pre_exec funksiyasından istifadə etmək tövsiyə olunur.

  • Ölçüsü 8 ilə 64 bit arasında dəyişən stabilləşdirilmiş işarəli və işarəsiz atom tam ədəd növləri (məsələn, AtomicU8), eləcə də işarəli tiplər NonZeroI[8|16|32|54|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 təyin etməklə əlaqələndirmə mərhələsində optimallaşdırmaları aktivləşdirmək imkanı əlavə edildi (rustc, Rust kodunu LTO optimallaşdırmalarının tətbiqinə imkan verən LLVM bit koduna tərtib edir).

Mənbə: opennet.ru

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