Rust 1.64 Programming Language Version

Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.64, 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:

  • Kondisyon pou anviwònman Linux nan konpilatè a, manadjè pake kago ak bibliyotèk estanda libstd yo ogmante - kondisyon minimòm pou Glibc te ogmante soti nan vèsyon 2.11 a 2.17, ak nwayo Linux soti nan vèsyon 2.6.32 a 3.2. Restriksyon yo aplike tou pou ègzèkutabl aplikasyon Rust ki te bati ak libstd. Twous distribisyon RHEL 7, SLES 12-SP5, Debian 8 ak Ubuntu 14.04 satisfè nouvo kondisyon yo. Sipò pou RHEL 6, SLES 11-SP4, Debian 7 ak Ubuntu 12.04 pral sispann. Itilizatè yo ki sèvi ak ègzèkutabl Rust-built nan anviwònman ki gen yon nwayo Linux ki pi gran yo ankouraje yo amelyore sistèm yo, rete sou pi ansyen degaje nan konpilatè a, oswa kenbe pwòp libstd fouchèt yo ak kouch pou kenbe konpatibilite.

    Pami rezon ki fè yo mete fen nan sipò pou pi gran sistèm Linux yo gen resous limite pou kontinye kenbe konpatibilite ak anviwònman ki pi gran yo. Sipò pou Glibc eritaj mande pou sèvi ak zouti eritaj lè w tcheke nan yon sistèm entegrasyon kontinyèl, an fas a ogmante kondisyon vèsyon nan LLVM ak sèvis piblik kwa-konpilasyon. Ogmantasyon nan kondisyon vèsyon nwayo a se akòz kapasite nan sèvi ak nouvo apèl sistèm nan libstd san yo pa bezwen kenbe kouch asire konpatibilite ak pi gran nwayo.

  • Yo te estabilize karakteristik IntoFuture, ki sanble ak IntoIterator, men li diferan de lèt la lè l sèvi avèk ".await" olye pou yo "pou ... nan ..." bouk. Lè yo konbine avèk IntoFuture, mo kle ".await" la ka atann pa sèlman yon karakteristik Future, men tou, nenpòt lòt kalite ki ka konvèti nan yon Future.
  • Yo enkli sèvis piblik rouye-analyzer la nan koleksyon sèvis piblik yo bay ak degaje Rust. Sèvis piblik la disponib tou pou enstalasyon lè l sèvi avèk rustup (konpozan rustup ajoute rouye-analyzer).
  • Manadjè pake kago a gen ladan eritaj espas travay pou elimine repetisyon valè jaden komen ant pakè, tankou vèsyon Rust ak URL depo. Epitou ajoute sipò pou bati pou plizyè tribin sib alafwa (ou kapab kounye a presize plis pase yon paramèt nan opsyon "--sib").
  • Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
    • lavni::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::abs_debòde
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::tcheke_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Kalite C-konpatib, ki te deja estabilize nan modil std::ffi, yo te ajoute nan nwayo a ak bibliyotèk alloc la:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Kalite C ki te estabilize deja nan modil std::os::raw yo te ajoute nan modil nwayo::ffi ak std::ffi (pa egzanp, kalite c_uint ak c_ulong yo te pwopoze pou tip C uint ak ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Moun k ap okipe nivo ki ba yo te estabilize pou itilize ak mekanis biwo vòt la (nan fiti li planifye pou bay yon API senplifye ki pa mande pou itilize estrikti ki ba nivo tankou Pull ak PIN):

    • lavni::poll_fn
    • travay::pare!
  • Atribi "const" la, ki detèmine posibilite pou itilize li nan nenpòt kontèks olye pou yo konstan, yo itilize nan fonksyon slice::from_raw_parts.
  • Yo nan lòd yo estoke done plis konpak, Layout memwa nan estrikti yo Ipv4Addr, Ipv6Addr, SocketAddrV4 ak SocketAddrV6 yo te chanje. Ka gen yon pwoblèm konpatibilite ak pakè kès sèl ki itilize std::mem::transmute pou manipilasyon estrikti ki ba yo.
  • Konstriksyon rouye du pou platfòm Windows la itilize PGO optimize (pwofil-gide optimize), ki te fè li posib pou ogmante pèfòmans kòd konpilasyon pa 10-20%.
  • Konpilatè a te aplike yon nouvo avètisman sou jaden ki pa itilize nan sèten estrikti.

Anplis de sa, ou ka sonje rapò sitiyasyon an sou devlopman yon aplikasyon altènatif nan konpilatè a lang Rust, ki te prepare pa pwojè a gccrs (GCC Rust) ak apwouve pou enklizyon nan GCC la. Apre entegre frontend la, zouti estanda GCC yo ka itilize pou konpile pwogram nan lang Rust san yo pa bezwen enstale du rustc, ki te konstwi ak devlopman LLVM. Osi lontan ke devlopman sou wout, epi san okenn pwoblèm enprevi, entèfas Rust la pral entegre nan lage GCC 13 ki pwograme pou Me ane pwochèn. GCC 13 aplikasyon Rust pral nan estati beta, li poko aktive pa default.

Sous: opennet.ru

Add nouvo kòmantè