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

nəşr edilmişdir sistem proqramlaşdırma dilinin 1.45 buraxılışı Pas, 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 istifadə etmədən yüksək tapşırıq paralelliyinə nail olmaq üçün alətlər təqdim edir. uzunluğu.

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, 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:

  • Uzun müddətdir aradan qaldırıldı qüsur tam ədədlər və üzən nöqtəli ədədlər arasında çevrilmə həyata keçirərkən. Rust kompilyatoru LLVM-dən backend kimi istifadə etdiyinə görə tip çevirmə əməliyyatları LLVM aralıq kod təlimatları vasitəsilə həyata keçirilirdi. fptoui, bir əhəmiyyətli xüsusiyyəti olan - nəticədə alınan dəyər hədəf tipə uyğun gəlmirsə, qeyri-müəyyən davranış. Məsələn, f300 tipli 32 float dəyərini u8 tam ədəd növünə çevirərkən nəticə gözlənilməzdir və müxtəlif sistemlərdə fərqli ola bilər. Problem ondadır ki, bu xüsusiyyət “təhlükəsiz” kimi qeyd olunmayan kodda görünür.

    Rust 1.45-ə görə, tip ölçüsünün daşmasının davranışı ciddi şəkildə tənzimlənir və "kimi" çevirmə əməliyyatı daşmanı yoxlayır və dəyəri hədəf növün maksimum və ya minimum dəyərinə çevrilməyə məcbur edir (yuxarıdakı misal üçün, bir dəyəri 300 255-ə çevriləcək). Belə yoxlamaları söndürmək üçün təhlükəli rejimdə işləyən əlavə API çağırışları “{f64, f32}::to_int_unchecked” təmin edilir.

    fn cast(x: f32) -> u8 {
    x u8 kimi
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    let nan = f32::NAN;

    qoy x: f32 = 1.0;
    let y: u8 = təhlükəli { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // çıxış 255
    println!("too_small_casted = {}", cast(çox_kiçik)); // çıxış 0
    println!("nömrənin_yayımlanmadığı = {}", cast(nan)); // çıxış 0
    }

  • Stabilləşdirilmiş istifadə edin prosedur makrolarıfunksiyaya bənzər ifadələr, şablonlar və ifadələr. Əvvəllər belə makroları hər yerdə çağırmaq mümkün deyildi, ancaq kodun müəyyən hissələrində (ayrıca zəng kimi, digər kodlarla iç-içə deyil). Funksiyalara bənzər makroların çağırılma yollarının genişləndirilməsi veb çərçivənin işləməsi üçün tələblərdən biri idi. Raket Rust-un stabil buraxılışlarında. Əvvəllər, Rocket-də işləyicilərin müəyyən edilməsində əlavə çevikliyə nail olmaq üçün Rust-un stabil versiyalarında mövcud olmayan “proc_macro_hygiene” adlı eksperimental funksiyanın işə salınması tələb olunurdu. Bu funksionallıq indi dilin sabit buraxılışlarında qurulub.
  • Aralıq dəyərləri üzərində təkrarlamaq üçün “char” tipli diapazonlardan istifadə etməyə icazə verilir (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    'a' içində ch üçün..='z' {
    çap edin!("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" çap edəcək

  • API-lərin yeni hissəsi stabilləşdirilmişlər də daxil olmaqla stabil kateqoriyaya köçürülüb
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Zəif ::as_ptr,
    rc::Zəif::from_raw,
    rc::Zəif::into_raw,
    str::strip_prefiks,
    str::strip_suffix,
    sync::Zəif::as_ptr,
    sync::Zəif::from_raw,
    sync::Zəif::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    span::yerləşdiyi_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Rustc tərtibçisi "hədəf-xüsusiyyət" bayrağından istifadə edərək müxtəlif hədəf platforma xüsusiyyətlərini ləğv etmək üçün dəstək əlavə etdi, məsələn, "-C target-feature=+avx2,+fma". Yeni bayraqlar da əlavə edilib:
    qəzaların idarə edilməsi strategiyasından asılı olmayaraq, zəng cədvəllərini açmaq üçün "force-açma-masalar"; LLVM bit kodunun yaradılan rliblərə daxil olub-olmamasına nəzarət etmək üçün "embed-bitcode". Quraşdırma vaxtını və disk sahəsinin sərfiyyatını optimallaşdırmaq üçün "yerləşdirin-bitcode" bayrağı defolt olaraq Cargo-da aktivləşdirilib.

  • Üçüncü səviyyəli dəstək mipsel-sony-psp və thumbv7a-uwp-windows-msvc platformaları üçün təmin edilmişdir. Üçü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.

Əlavə olaraq qeyd etmək olar hekayə ən sadəini yaratmaq haqqında apps Rust dilində, sistem yükləyicisindən istifadə etməyə başlayır və əməliyyat sistemi əvəzinə müstəqil yükləməyə hazırdır.
Məqalə aşağı səviyyəli proqramlaşdırma və ƏS inkişafında tələb olunan texnikaların nümayişinə həsr olunmuş seriyanın birincisidir.

Mənbə: opennet.ru

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