Rust 1.53 buraxıldı. Google Linux nüvəsinə Rust dəstəyinin əlavə edilməsini maliyyələşdirəcək

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin hazırda Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.53 sistem proqramlaşdırma dilinin buraxılışı nəşr olunub. 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 vasitələr təqdim edir (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər azaldılı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ə asılılıqları idarə etmək üçün layihə Yük paketi menecerini inkişaf etdirir. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Əsas yeniliklər:

  • Massivlər üçün massiv elementlərinin iterasiyasını dəyərlər üzrə təşkil etməyə imkan verən IntoIterator xüsusiyyəti tətbiq edilmişdir: for i in [1, 2, 3] { .. }

    Massivləri iteratorları qəbul edən metodlara ötürmək də mümkündür, məsələn: let set = BTreeSet::from_iter([1, 2, 3]); (a, b) üçün some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Əvvəllər IntoIterator yalnız massiv istinadları üçün həyata keçirilirdi, yəni. istinadların istifadəsini tələb edən dəyərləri təkrarlamaq (“&[1, 2, 3]”) və ya “[1, 2, 3].iter()”. Massivlər üçün IntoIterator proqramının həyata keçirilməsinə array.into_iter()-dən (&array).into_iter() kimi əvvəlki kompilyator çevrilməsinin səbəb olduğu uyğunluq problemləri mane oldu. Bu problemlər müvəqqəti həll yolu ilə həll edildi - kompilyator array.into_iter()-ni (&array).into_iter()-a çevirməyə davam edəcək, sanki IntoIterator xüsusiyyətinin həyata keçirilməsi yoxdur, ancaq yalnız ".into_iter() istifadə edərək metodu çağırarkən. )" sintaksisi və "[1, 2, 3]-də", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] formasında zənglərə toxunmadan. )".

  • “|” ifadələrini təyin etmək mümkündür. (məntiqi OR əməliyyatı) şablonun istənilən hissəsində, məsələn, “Bəzi(1) | Bəzi(2)" indi "Bəzi(1 | 2)" yaza bilərsiniz: uyğunluq nəticəsi { Ok(Bəzi(1 | 2)) => { .. } Xəta(MyError { növ: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Unicode UAX 31 spesifikasiyasında müəyyən edilmiş hər hansı milli simvollar da daxil olmaqla, emoji simvolları istisna olmaqla, identifikatorlarda ASCII olmayan simvolların istifadəsinə icazə verilir. Fərqli, lakin oxşar simvollardan istifadə etsəniz, tərtibçi xəbərdarlıq verəcəkdir. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: Sətir, } qoy α = 1; letsos = 2; xəbərdarlıq: identifikator cütü 's' və 's' arasında qarışıq hesab olunur
  • API-lərin yeni bir hissəsi sabit kateqoriyaya, o cümlədən aşağıdakı stabilləşdirilmiş kateqoriyaya köçürüldü:
    • massiv::from_ref
    • massiv::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet:: saxlamaq
    • BTreeMap::saxla
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non-exhaustive
    • Müddəti::SIFIR
    • Müddət::MAX
    • Müddət::sıfırdır
    • Müddət::doyma_əlavə
    • Müddət::saturating_sub
    • Müddət::saturating_mul
    • f32::subnormal
    • f64::subnormal
    • Massivlər üçün IntoIterator
    • {tam}::BITS
    • io::Xəta::Dəstəklənmir
    • NonZero*::leading_sıfırlar
    • NonZero*::trailing_sıfırlar
    • Seçim :: daxil edin
    • Sifariş::is_eq
    • Sifariş::is_ne
    • Sifariş::is_lt
    • Sifariş::is_gt
    • Sifariş::is_le
    • Sifariş::is_ge
    • OsStr::make_ascii_kiçik hərf
    • OsStr::make_ascii_upppercase
    • OsStr::to_ascii_kiçik hərf
    • OsStr::to_ascii_upppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::azalma_güclü_say
    • slice::IterMut::as_slice
    • dilim::IterMut üçün AsRef<[T]>
    • impl SliceIndex (Bound , Bağlı )
    • Vec::extend_from_within
  • wasm64-naməlum-naməlum platforma üçün üçüncü səviyyəli dəstək həyata keçirilib. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq, rəsmi quruluşların dərc edilməsi və ya kodun tikilib-qurula bilməyəcəyini yoxlamaq olmadan.
  • Yük paketi meneceri defolt olaraq Git repozitoriyasının (HEAD) əsas filialı üçün "əsas" adından istifadə etmək üçün köçürülüb. Master əvəzinə main adından istifadə edən depolarda yerləşdirilən asılılıqlar artıq filial = "əsas" konfiqurasiyasını tələb etmir.
  • Kompilyatorda LLVM-nin minimum versiyası üçün tələblər LLVM 10-a qaldırılır.

Əlavə olaraq, Rust dilində komponentlərin işlənib hazırlanması üçün alətlərin Linux nüvəsinə inteqrasiyanın inkişafı üçün maliyyə ayrılmasını qeyd edə bilərik. İş “Let's Encrypt” layihəsinin yaradıcısı olan və HTTPS-in təhlükəsizliyini artırmaq və texnologiyaların inkişafını təşviq edən ISRG təşkilatının (İnternet Təhlükəsizliyi Araşdırma Qrupu) himayəsi altında Prossimo layihəsi çərçivəsində həyata keçiriləcək. İnternet. Vəsait Rust-for-Linux layihəsinin müəllifi Migel Ojedanın işini ödəyəcək Google tərəfindən təmin ediləcək. Əvvəllər ISRG və Google artıq curl utiliti üçün alternativ HTTP backendinin yaradılmasını və Apache http serveri üçün yeni TLS modulunun hazırlanmasını maliyyələşdiriblər.

“Microsoft” və “Google” şirkətlərinin hesablamalarına görə, zəifliklərin təqribən 70%-i yaddaşın təhlükəli işlənməsi ilə bağlıdır. Cihaz drayverləri kimi nüvə komponentlərini inkişaf etdirmək üçün Rust dilindən istifadənin təhlükəli yaddaşla işləmə nəticəsində yaranan zəiflik riskini azaldacağı və yaddaş bölgəsinə boşaldıqdan sonra daxil olmaq və bufer sərhədlərini aşmaq kimi səhvləri aradan qaldıracağı gözlənilir.

Yaddaşın təhlükəsiz işləməsi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyi və obyektin istifadə müddətini (əhatə dairəsini) izləmək, həmçinin 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.

Mənbə: opennet.ru

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