Rust 1.87 buraxıldı

Rust 1.0 proqramlaşdırma dilinin onuncu ildönümünü qeyd etmək üçün (Rust layihəsi 2006-cı ildə yaradılmışdır, 0.1 buraxılışı 2012-ci ildə yaradılmışdır və ilk stabil versiya 2015-ci ildə təklif edilmişdir) Rust 1.87 buraxılmışdır. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir və zibil toplayıcıdan və iş vaxtından istifadə etmədən (iş vaxtı standart kitabxananın əsas işə salınmasına və saxlanmasına qədər azaldılır) edərkən tapşırıqların icrasının yüksək paralelliyinə nail olmaq üçün vasitələr təqdim edir.

Rust-un yaddaşla işləmə üsulları tərtibatçını göstəricilərlə manipulyasiya edərkən xətalardan xilas edir və yaddaşın aşağı səviyyəli işləməsi nəticəsində yaranan problemlərdən qoruyur, məsələn, yaddaş sahəsi boşaldıqdan sonra ona daxil olmaq, sıfır göstəricilərə istinad etmək, bufer aşmaq və s. Kitabxanaları yaymaq, qurmaları təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Yaddaşın təhlükəsizliyi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyinin izlənməsi, obyektin istifadə müddətinin (əhatə dairələrinin) izlənməsi və kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Əsas yeniliklər:

  • Standart kitabxanaya anonim borular üçün dəstək əlavə edildi. Standart giriş və çıxış axınlarını emal etmək və stdout və stderr axınlarını birləşdirmək üçün std::process::Command ilə birlikdə istifadə edilə bilən adsız boruların yaradılması üçün std::io::pipe() metodu təmin edilmişdir. std::process::Command istifadə edin; std::io::Read istifadə edin; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("path/to/bin") // stdout və stderr-in bir kanalda birləşdirilməsi .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut çıxışı = Vec::new(); recv.read_to_end(&mut çıxışı)?; təsdiq edin!(command.wait()?.uğur());
  • Təhlükəsiz koddan std::arch-ın kompilyatorun daxili funksiyalarının (Intrinsics) əksəriyyətini çağırmağa icazə verilir. Dəyişiklik yalnız müəyyən bir funksionallıqla əlaqəli olduğu üçün təhlükəli olaraq qeyd olunan daxili std::arch funksiyalarına aiddir, əgər bu funksiya aktivdirsə. Məsələn, proqram '#[target_feature(enable = "avx256")]" istifadə edirsə, _mm32_add_epi2 təhlükəsiz koddan çağırıla bilər.
  • Bloklardan "asm!" Montaj kodunun Rust kodunun bloklarına şaxələnməsinə icazə verilir ki, bu da nüvədə optimallaşdırmaların həyata keçirilməsi və ya aparatla qarşılıqlı əlaqənin təşkili kimi aşağı səviyyəli kodun işlənməsini asanlaşdırır. "jmp" assembler əmri üçün keçid nöqtəsi "asm!" makrosunda göstərilmişdir. Rust kodu ilə blok ifadəsini ehtiva edən yeni "etiket" operandından istifadə etməklə. təhlükəli { asm!( "jmp {}", label { println!("Asm'dan atladı!"); } ); }
  • Impl Trait qaytarma növlərindən istifadə edərək əlamət təriflərində tutulan ümumi tipləri və həyat müddətlərini açıq şəkildə təyin etməyə icazə verilir. trait Foo { fn metodu<'a>(&'a self) -> impl Ölçülü; type Implicit1<'a>: Ölçü; fn method_desugared<'a>(&'a self) -> Self::Implicit1<'a>; fn precise<'a>(&'a self) -> impl Ölçü + istifadə ; növü Implicit2: Ölçü; fn precise_desugared<'a>(&'a self) -> Self::Implicit2; }
  • API-nin yeni hissəsi stabillər kateqoriyasına köçürüldü, o cümlədən xüsusiyyətlərin üsulları və tətbiqləri stabilləşdirildi:
    • Vec::extract_if
    • vec::ExtractIf
    • LinkedList::extract_if
    • linked_list::ExtractIf
    • <[T]>::split_off
    • <[T]>::split_off_mut
    • <[T]>::birinci_split_off
    • <[T]>::split_off_first_mut
    • <[T]>::split_off_son
    • <[T]>::split_off_last_mut
    • String::extend_from_within
    • os_str::Ekran
    • OsString::display
    • OsStr::display
    • io :: boru
    • io::PipeReader
    • io:: PipeWriter
    • impl From OwnedHandle üçün
    • impl From OwnedHandle üçün
    • impl From Stdio üçün
    • impl From Stdio üçün
    • impl From OwnedFd üçün
    • impl From OwnedFd üçün
    • Qutu >:: yazın
    • impl TryFrom > String üçün
    • <*const T>::offset_from_unsigned
    • <*const T>::byte_offset_from_unsigned
    • <*mut T>::offset_from_unsigned
    • <*mut T>::byte_offset_from_unsigned
    • Nonull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::cast_imzalanmış
    • Sıfırdan Qeyri:: ::cast_imzalanmış.
    • ::cast_unsigned.
    • Sıfırdan Qeyri:: ::cast_unsigned.
    • ::çoxlu_dur
    • :: unbounded_shl
    • ::unbounded_shr
    • ::unbounded_shl
    • ::unbounded_shr
    • ::orta nöqtə
    • ::from_utf8
    • ::from_utf8_mut
    • ::from_utf8_unchecked
    • ::from_utf8_unchecked_mut
  • “const” işarəsi funksiyalarda istifadə olunur:
    • core::str::from_utf8_mut
    • <[T]>::dilimdən_kopiya
    • SocketAddr::set_ip
    • SocketAddr::set_port,
    • SocketAddrV4::set_ip
    • SocketAddrV4::set_port,
    • SocketAddrV6::set_ip
    • SocketAddrV6::set_port
    • SocketAddrV6::set_flowinfo
    • SocketAddrV6::set_scope_id
    • char::is_digit
    • char::is_boşluq
    • <N::as_flattened
    • <N::as_flattened_mut
    • String::into_bytes
    • String::as_str
    • string::tutum
    • String::as_bytes
    • String::len
    • String::is_empty
    • String::as_mut_str
    • String::as_mut_vec
    • Vec::as_ptr
    • Vec::as_slice
    • Vec::tutum
    • Vec::len
    • Vec::boşdur
    • Vec::as_mut_slice
    • Vec::as_mut_ptr
  • i586-pc-windows-msvc hədəf platforması üçün ikinci dəstək səviyyəsi silindi. SSE686 təlimatlarını dəstəkləyən i2-pc-windows-msvc platformasından istifadə etmək tövsiyə olunur. i586-pc-windows-msvc platforması artıq faydalı deyil, çünki Windows 10 SSE2 dəstəyini tələb edir və Rust-da əvvəlki Windows buraxılışları dəstəklənmir.

Mənbə: opennet.ru

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