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

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

  • Stabilləşdirilmiş "async" funksiyasına əsaslanan yeni asinxron proqramlaşdırma sintaksisi, async move { ... } bloku və ".await" operatoru, əsas əmr axınına mane olmayan işləyicilərin yazılmasını asanlaşdırır. Asinxron I/O üçün əvvəllər təklif edilmiş API ilə müqayisədə, async/.await konstruksiyaları başa düşülən sadədir, yüksək oxunaqlıdır və dövrələrə, şərti ifadələrə və istisnalara əsaslanan tanış axına nəzarət üsullarından istifadə edərək mürəkkəb asinxron qarşılıqlı əlaqəni həyata keçirməyə imkan verir.

    Async-await sintaksisi sizə onların icrasını dayandıra, nəzarəti əsas ipə qaytara və sonra qaldıqları yerdən icranı davam etdirə bilən funksiyalar yaratmağa imkan verir. Məsələn, növbəti məlumat parçasının gəlməsini gözləyərkən digər işlərin görülə biləcəyi I/O-nun işlənməsi zamanı belə bir fasilə tələb olunur. "Aync fn" və "async move" ilə müəyyən edilmiş funksiyalar və bloklar xüsusiyyət qaytarır Gələcək, təxirə salınmış asinxron hesablama təqdimatını təyin edir. Siz bilavasitə təxirə salınmış hesablamağa başlaya və “.await” operatorundan istifadə edərək nəticə əldə edə bilərsiniz. .await çağırılana qədər heç bir hərəkət yerinə yetirilmir və ya əvvəlcədən planlaşdırılmır ki, bu da əlavə yük olmadan mürəkkəb iç içə konstruksiyaların yaradılmasına imkan verir.

    async fn first_function() -> u32 { .. }
    ...
    qoy gələcək = birinci_funksiya();
    ...
    nəticə ver: u32 = gələcək. gözləyin;

  • Stabilləşdirilmiş "#![xüsusiyyət(dəyişdirmə_naxışları_qoruyucuları)]", bağlama növü ilə dəyişənlərin istifadəsinə icazə verir "hərəkətlə" şablonlarında və "if" ifadəsinin "if" bölməsində bu dəyişənlərə istinadlardan istifadə edin.uyğun". Məsələn, indi aşağıdakı tikintilərə icazə verilir:

    fn main() {
    let massivi: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    uyğun massiv {
    nömrə
    əgər nums.iter().sum::() == 10

    => {
    düşmə (rəqəm);
    }
    _ => əlçatmaz!(),
    }
    }

  • Göstəriş icazə verilir atributlar funksiya parametrlərini, bağlamaları və funksiya göstəricilərini təyin edərkən. Diaqnostikaya lint vasitəsilə nəzarət edən şərti kompilyasiya atributları (cfg, cfg_attr) və yardımçı makro çağırış atributları dəstəklənir.

    fn len(
    #[cfg(windows)] dilim: &[u16], // Windows-da parametrdən istifadə edin
    #[cfg(not(windows))] dilim: &[u8], // digər ƏS-də istifadə edin
    ) -> istifadə {
    dilim.len()
    }

  • NLL (Leksik Olmayan Ömürlər) texnikasından istifadə edərək dəyişənlərin (borrow checker) borclanmasının yoxlanılması zamanı müəyyən edilmiş problemlər barədə xəbərdarlıqlar, tərcümə edilmişdir ölümcül səhvlər kateqoriyasına aiddir. 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. Rust 2018 rejimində işləyərkən xəbərdarlıqlar indi xətalarla əvəz olunub. Növbəti buraxılışda səhv çıxışı da Rust 2015 rejimində həyata keçiriləcək və nəhayət köhnə borc yoxlamasından xilas olacaq;
  • Sabitlərin əvəzinə istənilən kontekstdə istifadə imkanını müəyyən edən “const” atributundan Vec::new, String::new, LinkedList::new, str::len, [T]::len funksiyaları üçün istifadə olunur. , küç::as_bayt,
    abs, wrapping_abs və overflowing_abs;

  • API-lərin yeni hissəsi stabilləşdirilmiş üsullar da daxil olmaqla stabil kateqoriyaya köçürüldü
    Pin::into_inner, Instant::checked_duration_since və Instant::saturating_duration_sice;

  • Yük paketi meneceri indi konfiqurasiya faylları üçün “.toml” uzantısından istifadə etmək imkanına malikdir. Standart kitabxananın birbaşa Cargo-dan qurulması üçün ilkin dəstək əlavə edildi. Mübahisəli "--all" bayrağını əvəz edərək "--workspace" bayrağı əlavə edildi. Metadataya yeni sahə əlavə edildi "dərc etmək“, git teqi və versiya nömrəsini göstərərək asılılıqları dərc etməyə imkan verir. Müxtəlif tərtib mərhələlərinin icra müddətlərinin HTML hesabatını yaratmaq üçün "-Ztimings" test seçimi əlavə edildi.
  • Rustc kompilyatorunda diaqnostik mesajlara terminala uyğun gəlməyən kodun quyruqlarının kəsilməsi daxildir. Hədəf platformalar üçün üçüncü səviyyəli dəstək təmin edilmişdir
    i686-naməlum-uefi və sparc64-naməlum-openbsd. Üçü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

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