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

nəşr edilmişdir sistem proqramlaşdırma dili buraxılışı Pas 1.38, 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 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:

  • Kompilyasiyanın tamamlanmasını gözləmədən, asılılıq metadatası əlçatan olan kimi, asılı sandıq paketinin qurulmasının başlandığı boru kəməri ilə tərtib edilmiş kompilyasiya rejimi (boru xətti) əlavə edildi. Paketi tərtib edərkən, bütün asılılıqların yığılmasına ehtiyac yoxdur, sadəcə olaraq növlərin, asılılıqların və ixrac edilmiş elementlərin siyahılarını ehtiva edən metaməlumatları müəyyənləşdirməlisiniz. Metadata kompilyasiya prosesinin əvvəlində təqdim edilir, ona görə də əlaqəli paketləri indi çox daha əvvəl tərtib etmək olar. Tək paketlər qurarkən, təklif olunan rejim performansa təsir göstərmir, lakin quruluş budaqlanmış asılılıqları olan paketləri əhatə edirsə, ümumi qurma müddəti 10-20% azaldıla bilər;
  • Funksiyaların düzgün istifadə edilməməsinin aşkarlanmasını təmin edir std::mem:: başlatılmamış и std::mem::sıfırlanmış. Məsələn, std::mem::uninitialized tez massivlər yaratmaq üçün əlverişlidir, lakin o, tərtibçini yanlış yönləndirir, çünki o, işə salınmış kimi görünür, lakin əslində dəyər işə salınmamış qalır. mem::uninitialized funksiyası artıq köhnəlmiş kimi qeyd olunub və onun əvəzinə ara tipdən istifadə etmək tövsiyə olunur. Bəlkə Vahid. mem::zeroed-ə gəlincə, bu funksiya sıfır dəyərləri qəbul edə bilməyən növlərdə problemlər yarada bilər.

    Müəyyən edilməmiş davranışı müəyyən etməyə kömək etmək üçün yeni buraxılış kompilyatora mem::initialized və ya mem::zeroed ilə bağlı bəzi problemləri aşkarlayan lint yoxlanışı əlavə edir. Məsələn, indi null dəyərləri qəbul edə bilməyən göstərici obyektlərini təmsil edən &T və Box‹T› tipləri ilə mem::initialized və ya mem::zeroed istifadə etməyə çalışarkən xəta alırsınız;

  • “#[köhnəlmiş]” atributu genişləndirilmişdir ki, qutu paketləri köhnəlmiş kimi qeyd edilsin və gələcəkdə silinməsi planlaşdırılsın. Rust 1.38-dən etibarən bu atribut makrolar üçün də istifadə edilə bilər;
  • Alt modullarda “#[qlobal_ayırıcı]” atributundan istifadə etmək imkanı əlavə edildi;
  • Əlavə edilmiş xüsusiyyət std::any::type_name, bu, tipin adını tapmağa imkan verir, bu, ayıklama məqsədləri üçün faydalı ola bilər. Məsələn, proqramın icrası zamanı funksiyanın hansı növ üçün çağırıldığını öyrənə bilərsiniz:

    fn gen_value‹T: Defolt>() -› T {
    println!("{} nümunəsinin işə salınması", std::any::type_name::‹T›());
    Defolt::default()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" çap olunacaq
    let _: String = gen_value(); # "alloc::string::String" çap edəcək
    }

  • Standart kitabxananın genişləndirilmiş funksiyaları:
    • slice::{concat, connect, join} indi &T-dən əlavə &[T] dəyərini qəbul edə bilər;
    • "*const T" və "*mut T" indi markeri həyata keçirir::Unpin;
    • "Arc‹[T]›" və "Rc‹[T]›" indi FromIterator‹T› tətbiq edir;
    • iter::{StepBy, Peekable, Take} indi DoubleEndedIterator tətbiq edir.
    • ascii::EscapeDefault Klonlama və Ekranı həyata keçirir.
  • API-lərin yeni hissəsi stabilləşdirilmiş üsullar da daxil olmaqla stabil kateqoriyaya köçürüldü
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Müddət::as_secs_f{32|64},
    • Müddət::div_duration_f{32|64},
    • Müddət::div_f{32|64},
    • Müddət::from_secs_f{32|64},
    • Müddət::mul_f{32|64},
    • qalıq ilə bölmə əməliyyatları
      bütün tam ibtidailər üçün div_euclid və rem_euclid;

  • Yük paketi menecerində müxtəlif funksiyaları aktivləşdirmək üçün “--features” seçimini bir neçə dəfə göstərmək üçün əlavə dəstək;
  • Kompilyator üçüncünü təmin edir səviyyə hədəf platformaları üçün dəstək aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msv7- armv- bilinən hədəflər, -gnueabi, armv7-naməlum-linux-musleabi, altıbucaqlı-naməlum-linux-musl və riscv32i-naməlum-none-elf. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq və rəsmi quruluşların dərci olmadan.

Mənbə: opennet.ru

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