Rust 1.66 Programming Language Version

Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.66, ki te fonde pa pwojè Mozilla, men kounye a devlope sou ejid òganizasyon endepandan ki pa pou pwofi Rust Foundation. Lang la konsantre sou sekirite memwa epi li bay mwayen pou reyalize gwo paralèl nan ekzekisyon travay, pandan y ap evite itilizasyon yon pèseptè fatra ak tan exécute (se redui tan an nan inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).

Teknik jesyon memwa Rust yo libere pwomotè a soti nan erè manipilasyon konsèy epi pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Sekirite memwa aplike nan Rust nan moman konpile atravè chèk referans, swiv pwopriyetè objè, konsiderasyon pou tout lavi objè (delimitasyon) ak evalyasyon aksè memwa nan tan exécution. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou valè varyab yo dwe inisyalize anvan yo itilize, gen pi bon manyen erè nan bibliyotèk estanda a, sèvi ak konsèp nan referans imuiabl ak varyab pa default, epi li ofri fò sezisman estatik pou minimize erè lojik.

Prensipal inovasyon:

  • Nan enimerasyon ki gen reprezantasyon nonb antye relatif (atribi “#[repr(Int)]”, endikasyon eksplisit diskriminan an (nimewo opsyon nan enimerasyon an) pèmèt, menm si enimerasyon an gen jaden. #[repr(u8)] enum Foo { A(u8), # diskriminan 0 B(i8), # diskriminan 1 C(bool) = 42, # diskriminan 42 }
  • Te ajoute core::hint::black_box fonksyon, ki tou senpleman retounen valè resevwa a. Paske konpilatè a kwè ke yon fonksyon bay fè yon bagay espesifik, yo ka itilize fonksyon black_box la pou enfim optimize bouk konpilatè a lè w ap fè tès pèfòmans kòd oswa lè w ap egzamine kòd machin ki te pwodwi (pou konpilatè a pa konsidere kòd la pa ka itilize epi retire li. li). Pou egzanp, nan egzanp ki anba a, espesifye black_box(v.as_ptr()) anpeche konpilatè a sipoze ke vektè v la pa itilize. itilize std::hint::black_box; fn push_cap(v: &mut Vec) { pou i nan 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Manadjè pake "kago" la ofri kòmandman "retire", ki pèmèt ou retire depandans nan manifest Cargo.toml nan liy lòd la.
  • Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • mwen*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • mwen*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{premye, dènye, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Ajoute aplikasyon AsFd pou kalite lock stdio lè w ap itilize WASI.
    • impl TryFrom > pou Bwat<[T; N]>
    • nwayo::sijesyon::black_box
    • Duration::try_from_secs_{f32,f64}
    • Opsyon::dezip
    • std::os::fd
  • Itilizasyon chenn "..X" ak "..=X" pèmèt nan modèl yo.
  • Lè w rasanble fasad du rustc ak backend LLVM, yo itilize mòd optimize LTO (Link Time Optimization) ak BOLT (Optimizasyon Binè ak Zouti Layout), ki pèmèt ogmante pèfòmans kòd ki kapab lakòz yo epi redwi konsomasyon memwa.
  • Yo te aplike twazyèm nivo sipò pou platfòm armv5te-none-eabi ak thumbv5te-none-eabi. Twazyèm nivo a enplike sipò debaz, men san yo pa tès otomatik, pibliye bati ofisyèl, oswa tcheke si kòd la ka bati.
  • Te ajoute sipò pou lyen ak bibliyotèk inivèsèl macOS.

Anplis de sa, nou ka sonje enklizyon an nan fen a nan konpilatè lang Rust (gccrs) nan baz kòd GCC la. Entèfas la enkli nan branch GCC 13, ki pral lage nan mwa me 2023. Kòmanse ak GCC 13, zouti natif natal GCC yo ka itilize pou konpile pwogram nan lang Rust san yo pa bezwen enstale konpilatè rustc la, ki te konstwi avèk devlopman LLVM. GCC 13 aplikasyon Rust pral yon vèsyon beta, ki pa pèmèt pa default.

Sous: opennet.ru

Add nouvo kòmantè