Ġiet rilaxxata l-lingwa ta 'programmar għal skopijiet ġenerali Rust 1.59, imwaqqfa mill-proġett Mozilla iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sikurezza tal-memorja u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tax-xogħol filwaqt li tevita l-użu ta 'ġbir ta' żibel u runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).
Il-metodi tal-immaniġġjar tal-memorja ta 'Rut isalvaw lill-iżviluppatur minn żbalji meta jimmanipula l-indikazzjonijiet u jipproteġu kontra problemi li jinqalgħu minħabba t-tqandil tal-memorja ta' livell baxx, bħall-aċċess għal żona tal-memorja wara li tkun ġiet meħlusa, dereferencing null pointers, buffer overruns, eċċ. Biex iqassam il-libreriji, jipprovdi bini u jimmaniġġja d-dipendenzi, il-proġett jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.
Is-sikurezza tal-memorja hija pprovduta f'Rut fil-ħin tal-kompilazzjoni permezz ta 'verifika ta' referenza, iżżomm kont tal-pussess tal-oġġett, iżżomm kont tal-ħajja tal-oġġetti (ambiti), u tivvaluta l-korrettezza tal-aċċess għall-memorja waqt l-eżekuzzjoni tal-kodiċi. Rust jipprovdi wkoll protezzjoni kontra overflows integer, jeħtieġ inizjalizzazzjoni obbligatorja ta 'valuri varjabbli qabel l-użu, jimmaniġġja l-iżbalji aħjar fil-librerija standard, japplika l-kunċett ta' referenzi immutabbli u varjabbli b'mod awtomatiku, joffri tajpjar statiku qawwi biex jimminimizza l-iżbalji loġiċi.
Innovazzjonijiet ewlenin:
- Huwa possibbli li tuża inserzjonijiet tal-lingwa tal-assemblaġġ, li huma fid-domanda f'applikazzjonijiet li jeħtieġu jikkontrollaw l-eżekuzzjoni f'livell baxx jew ikunu jistgħu jużaw struzzjonijiet speċjalizzati tal-magni. Inserzjonijiet ta 'assemblaġġ huma miżjuda bl-użu ta' macros "asm!" u "global_asm!" bl-użu tas-sintassi tal-ifformattjar tal-istring għall-ismijiet tar-reġistri simili għal dak użat għas-sostituzzjonijiet tal-istring f'Rut. Il-kompilatur jappoġġja struzzjonijiet ta 'assemblaġġ għal arkitetturi x86, x86-64, ARM, AArch64 u RISC-V. Eżempju ta' inserzjoni: uża std::arch::asm; // Immoltiplika x b'6 billi tuża shifts u żidiet let mut x: u64 = 4; mhux sigur {asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "żid {x}, {tmp}", x = inout (reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
- Appoġġ miżjud għal assenjazzjonijiet destrutturati (paralleli), li fihom diversi karatteristiċi, slices jew strutturi huma speċifikati fuq in-naħa tax-xellug tal-espressjoni. Per eżempju: ejja (a, b, c, d, e); (a, b) = (1, 2); [ċ, .., d, _] = [1, 2, 3, 4, 5]; Struttura {e, .. } = Struttura {e: 5, f: 3}; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- Huwa possibbli li jiġu speċifikati valuri default għal ġeneriċi const: struct ArrayStorage {arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
- Il-maniġer tal-pakkett tal-Merkanzija jipprovdi twissijiet dwar l-użu ta 'strutturi invalidi f'dipendenzi li huma pproċessati minħabba żbalji fil-kompilatur (per eżempju, minħabba żball, oqsma ta' strutturi ppakkjati tħallew jissellfu fi blokki sikuri). Kostruzzjonijiet bħal dawn mhux se jibqgħu jiġu appoġġjati f'verżjoni futura ta' Rust.
- Il-merkanzija u r-rustc għandhom kapaċità integrata li jiġġeneraw fajls eżekutibbli mqaxxra minn data ta 'debugging (strixxa = "debuginfo") u simboli (strixxa = "simboli"), mingħajr il-ħtieġa li ssejjaħ utilità separata. L-issettjar tat-tindif huwa implimentat permezz tal-parametru "strixxa" f'Cargo.toml: [profile.release] strip = "debuginfo", "simboli"
- Il-kumpilazzjoni inkrementali hija diżattivata awtomatikament. Ir-raġuni jingħad li hija soluzzjoni temporanja għal bug fil-kompilatur li twassal għal ħabtiet u żbalji ta 'deserialization. Soluzzjoni tal-bug diġà ġiet ippreparata u se tkun inkluża fir-rilaxx li jmiss. Biex tirritorna kumpilazzjoni inkrementali, tista' tuża l-varjabbli ambjentali RUSTC_FORCE_INCREMENTAL=1.
- Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija ta 'stabbli, inklużi l-metodi u l-implimentazzjonijiet tal-karatteristiċi ġew stabbilizzati:
- std::thread::disponibbli_paralleliżmu
- Riżultat::ikkupjat
- Riżultat::ikklonat
- arch::asm!
- arch::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_continue
- Ipprova minn għal u8
- char::TryFromCharError (Clone, Debug, Display, PartialEq, Kopja, Eq, Żball)
- iter::zip
- NonZeroU8::is_power_of_two
- NonZeroU16::is_power_of_two
- NonZeroU32::is_power_of_two
- NonZeroU64::is_power_of_two
- NonZeroU128::is_power_of_two
- DoubleEndedIterator għall-istruttura ToLowercase
- DoubleEndedIterator għall-istruttura ToUppercase
- TryFrom għal [T; N]
- UnwindSafe għall-istruttura Once
- RefUnwindSafe għal Darba
- Armv8 neon funzjonijiet ta 'appoġġ mibnija fil-kompilatur għal aarch64
- L-attribut "const", li jiddetermina l-possibbiltà li jintuża fi kwalunkwe kuntest minflok kostanti, jintuża fil-funzjonijiet:
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::from_bytes_with_nul_unchecked
Sors: opennet.ru