Rust 1.53 dileupaskeun. Google bakal ngabiayaan nambihan dukungan Rust kana kernel Linux

Pelepasan sistem basa programming Rust 1.53, diadegkeun ku proyék Mozilla, tapi ayeuna dimekarkeun dina naungan organisasi non-profit bebas Rust Foundation, geus diterbitkeun. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, jeung nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa ngagunakeun collector sampah atanapi runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Manajemén mémori otomatis Rust ngaleungitkeun kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferensi pointer nol, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, mastikeun assembly jeung ngatur kagumantungan, proyék ieu ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Inovasi utama:

  • Pikeun arrays, tret IntoIterator geus dilaksanakeun, nu ngidinan Anjeun pikeun ngatur Iteration unsur Asép Sunandar Sunarya ku nilai: pikeun i di [1, 2, 3] { .. }

    Ieu oge mungkin ngalirkeun arrays kana métode anu nampa iterators, contona: hayu set = BTreeSet :: from_iter ([1, 2, 3]); pikeun (a, b) dina some_iterator.chain ([1]).zip ([1, 2, 3]) { .. }

    Saméméhna, IntoIterator ngan dilaksanakeun pikeun rujukan Asép Sunandar Sunarya, i.e. pikeun iterate leuwih nilai diperlukeun pamakéan rujukan ("&[1, 2, 3]") atawa "[1, 2, 3].iter ()". Palaksanaan IntoIterator pikeun arrays ieu hampered ku masalah kasaluyuan disababkeun ku konvérsi compiler saméméhna ti array.into_iter () ka (& array).into_iter (). Masalah ieu direngsekeun kalawan workaround a - compiler bakal neruskeun ngarobah array.into_iter () ka (& array).into_iter () saolah-olah euweuh palaksanaan tina tret IntoIterator, tapi ngan lamun nelepon metoda ngagunakeun ".into_iter (). )" sintaksis sareng tanpa ngarampa telepon dina bentuk "dina [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Kasebut nyaéta dimungkinkeun pikeun nangtukeun éksprési "|" (logis OR operasi) dina sagala bagian tina citakan, contona, tinimbang "Sababaraha (1) | Sababaraha (2)" anjeun ayeuna tiasa nyerat "Sababaraha (1 | 2)": hasil pertandingan { Ok (Sababaraha (1 | 2)) => { .. } Err (MyError {jenis: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Pamakéan karakter non-ASCII dina idéntifikasi diidinan, kalebet karakter nasional anu didefinisikeun dina spésifikasi Unicode UAX 31, tapi henteu kalebet karakter emoji. Upami anjeun nganggo karakter anu béda tapi sami, kompiler bakal ngaluarkeun peringatan. const BLÅHAJ: & str = "🦈"; struct 人 { 名字: String, } hayu α = 1; letsos = 2; warning: pasangan identifier dianggap bingung antara 's' jeung 's'
  • Bagian anyar API parantos dialihkeun ka kategori stabil, kalebet anu distabilkeun di handap ieu:
    • Asép Sunandar Sunarya::from_ref
    • Asép Sunandar Sunarya:: ti_mut
    • AtomicBool:: fetch_update
    • AtomicPtr:: fetch_update
    • BtreeSet:: nahan
    • BtreeMap:: nahan
    • BufReader :: néangan_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp:: max_by_key
    • DebugStruct::finish_non_exhaustive
    • Durasi::ZERO
    • Lilana:: MAX
    • Durasi:: is_zero
    • Lilana::saturating_add
    • Durasi::saturating_sub
    • Duration::saturating_mul
    • f32:: is_subnormal
    • f64:: is_subnormal
    • IntoIterator pikeun arrays
    • {integer}::BITS
    • io :: Kasalahan :: Teu dirojong
    • NonZero*:: leading_zeros
    • NonZero*:: trailing_zeros
    • Pilihan:: nyelapkeun
    • Pesenan::is_eq
    • Mesen::is_ne
    • Mesen::is_lt
    • Mesen::is_gt
    • Mesen::is_le
    • Mesen::is_ge
    • OsStr:: make_ascii_huruf leutik
    • OsStr:: make_ascii_uppercase
    • OsStr::to_ascii_huruf leutik
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr:: eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc:: increment_strong_count
    • Rc::decrement_strong_count
    • keureutan :: IterMut :: as_slice
    • AsRef<[T]> pikeun nyiksikan::IterMut
    • impl SliceIndex pikeun (Bound , Meungkeut )
    • Vec:: extend_from_within
  • Tingkat katilu dukungan pikeun platform wasm64-unknown-unknown parantos dilaksanakeun. Tingkat katilu ngawengku rojongan dasar, tapi tanpa nguji otomatis, penerbitan resmi ngawangun, atawa mariksa naha kode bisa diwangun.
  • Pangatur pakét kargo parantos dipindahkeun nganggo nami "utama" pikeun cabang utama gudang Git (HEAD) sacara standar. Depéndénsi hosted dina repositories nu make ngaran utama tinimbang master euweuh merlukeun cabang = "utama" pikeun ngonpigurasi.
  • Dina kompiler, sarat pikeun vérsi minimum LLVM diangkat ka LLVM 10.

Salaku tambahan, urang tiasa ngémutan panyadiaan dana pikeun pamekaran integrasi kana alat kernel Linux pikeun ngembangkeun komponén dina basa Rust. Karya bakal dilaksanakeun dina kerangka proyék Prossimo handapeun naungan organisasi ISRG (Internet Security Research Group), anu mangrupikeun pangadeg proyék Let's Encrypt sareng ngamajukeun HTTPS sareng pamekaran téknologi pikeun ningkatkeun kaamanan. Internét. Dana bakal disayogikeun ku Google, anu bakal mayar karya Miguel Ojeda, panulis proyék Rust-for-Linux. Saméméhna, ISRG sarta Google geus dibiayaan kreasi hiji backend HTTP alternatif pikeun utilitas curl sarta ngembangkeun modul TLS anyar pikeun server Apache http.

Numutkeun Microsoft sareng Google, sakitar 70% kerentanan disababkeun ku panangan mémori anu teu aman. Diperkirakeun yén ngagunakeun basa Rust pikeun ngembangkeun komponén kernel sapertos supir alat bakal ngirangan résiko kerentanan anu disababkeun ku pananganan mémori anu teu aman sareng ngaleungitkeun kasalahan sapertos ngaksés daérah mémori saatos dibébaskeun sareng ngalangkungan wates panyangga.

Kasalametan memori disadiakeun dina Rust dina waktos compile ngaliwatan mariksa rujukan, ngalacak kapamilikan obyék sarta hirupna objék (wengkuan), kitu ogé ngaliwatan evaluasi correctness aksés memori salila palaksanaan kode. Karat ogé nyadiakeun panyalindungan ngalawan overflows integer, merlukeun variabel bisa initialized saméméh pamakéan, handles kasalahan hadé dina perpustakaan baku, nerapkeun konsép rujukan immutable sarta variabel sacara standar, sarta nawarkeun ketikan statik kuat pikeun ngaleutikan kasalahan logis.

sumber: opennet.ru

Tambahkeun komentar