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

nəşr edilmişdir sistem proqramlaşdırma dilinin 1.47 buraxılışı Pas, Mozilla layihəsi tərəfindən yaradılmışdır. Dil yaddaşın təhlükəsizliyinə diqqət yetirir, avtomatik yaddaş idarəetməsini təmin edir və istifadə etmədən yüksək tapşırıq paralelliyinə nail olmaq üçün bir vasitə təqdim edir zibil yığan и uzunluğu (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər aşağı düşür).

Rust-un avtomatik yaddaş idarəetməsi göstəriciləri idarə edərkən səhvləri aradan qaldırır və aşağı səviyyəli yaddaş manipulyasiyasından yaranan problemlərdən qoruyur, məsələn, boşaldıqdan sonra yaddaş bölgəsinə daxil olmaq, null göstərici referensiyaları, bufer aşması və s. 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. Kitabxanaların saxlanması üçün repozitoriya dəstəklənir crates.io.

Əsas yeniliklər:

  • Növlər üçün həyata keçirilən dəstək massivlər ixtiyari ölçü. Əvvəllər bütün tam ədədlər üçün ümumi funksiyaları müəyyən etmək mümkün olmadığına görə, standart kitabxana yalnız ölçüsü 32 elementə qədər olan massivlər üçün daxili xüsusiyyət dəstəyini təmin edirdi (hər ölçü üçün əlamətlər statik olaraq müəyyən edilmişdir). Daimi generiklərin (“const generics”) funksionallığının yaradılması sayəsində istənilən massiv ölçüsü üçün ümumi funksiyaları müəyyən etmək mümkün oldu, lakin onlar kompilyatorda tətbiq olunsa da, indi də stabil dil xüsusiyyətlərinə daxil edilməyib. iştirak edir istənilən ölçülü massiv əlamətləri üçün standart kitabxanada.

    Məsələn, Rust 1.47-də aşağıdakı konstruksiya əvvəllər xəta ilə nəticələnsə də, serialın məzmununu çap edəcək:

    fn main() {
    qoy xs = [0; 34];

    println!("{:?}", xs);
    }

  • Daha qısa izlərin (backtrace) çıxışı, fövqəladə hallarda çıxış təmin edilir. Əksər hallarda maraq doğurmayan, lakin çıxışı qarışdıran və diqqəti problemin əsas səbəblərindən yayındıran elementlər izdən çıxarılır. Tam izi qaytarmaq üçün "RUST_BACKTRACE=full" mühit dəyişənindən istifadə edə bilərsiniz. Məsələn, kod üçün

    fn main() {
    təlaş!();
    }

    Əvvəllər iz 23 mərhələdə çıxarılırdısa, indi azaldılacaq
    Dərhal mahiyyəti qavramağa imkan verən 3 addım:

    'main' mövzusu 'açıq panik'də panikaya düşdü, src/main.rs:2:5
    yığın geri izi:
    0: std::panicking::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 ünvanında
    1: oyun meydançası::əsas
    ./src/main.rs:2 ünvanında
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 ünvanında

  • Rustc tərtibçisi istifadə edərək qurmaq üçün yeniləndi LLVM 11 (Pas istifadə edir LLVM üçün backend kimi kod generasiyası). Eyni zamanda, 8-ci versiyaya qədər köhnə LLVM-lərlə qurmaq imkanı saxlanılır, lakin standart olaraq (da rust-lang/llvm-layihəsi) indi LLVM 11-dən istifadə edir. LLVM 11-in yaxın günlərdə buraxılması gözlənilir.
  • Windows platformasında rustc kompilyatoru “-C nəzarət axını-mühafizəsi” bayrağından istifadə edərək aktivləşdirilmiş nəzarət axınının bütövlüyünü yoxlamaq (Control Flow Guard) üçün dəstək verir. Digər platformalarda bu bayraq hələlik nəzərə alınmır.
  • API-lərin yeni hissəsi stabilləşdirilmişlər də daxil olmaqla stabil kateqoriyaya köçürülüb
    Ident::new_raw,
    Aralıq::boşdur,
    RangeInclusive::is_empty,
    Nəticə::as_deref,
    Nəticə::as_deref_mut,
    Vec::sızma,
    göstərici::ofset_from,
    f32::TAU və
    f64::TAU.

  • Metodlarda onu sabitlər əvəzinə istənilən kontekstdə istifadə etmək imkanını müəyyən edən “const” atributundan istifadə olunur:
    • sıfırdan başqa bütün tam ədədlər üçün yeni;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub və saturating_mul bütün tam ədədlər üçün;
    • is_ascii_alphabetic, is_ascii_upppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitescirrol and iscontrol.as for.
  • FreeBSD üçün iştirak edir FreeBSD 11.4-dən alətlər dəsti (FreeBSD 10 LLVM 11-i dəstəkləmir).

Mənbə: opennet.ru

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