A liberazione di a lingua di prugrammazione Rust 1.68 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).
I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.
A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.
Innuvazioni principali:
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ Cargo ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ crates.io ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Sparse, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΡΠ°ΠΆΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π²ΡΠ΅Ρ
ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ crates.io ΠΈ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΠΎΡΡΠ΅ ΡΠΈΡΠ»Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
ΠΠ»Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΈΠ·-Π·Π° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π² Sparse Π²ΠΌΠ΅ΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Git Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° ΠΏΡΡΠΌΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎ HTTPS ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ»Ρ ΠΎΡΠ΄Π°ΡΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ index.crates.io. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠ»Π°Π½ΠΈΡΡΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π²Π΅ΡΠΊΠ΅ Rust 1.70, Π° Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π΄Π»Ρ Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Β«CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparseΒ» ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠ΅ΠΊΡΠΈΡ Β«[registries.crates-io]Β» ΡΠ°ΠΉΠ»Π° .cargo/config.toml ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ βprotocol = Β«sparseΒ»β.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ°ΠΊΡΠΎΡ Β«pin!Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Pin<&mut T> ΠΈΠ· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β«TΒ» Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Box::pin Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ Π² ΠΊΡΡΠ΅, Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ΅ΠΊΠ°).
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° alloc. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ alloc (Π±Π΅Π· std) ΠΏΡΠΈ ΡΠ±ΠΎΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΠ½ΡΠ½Π΅ Π±ΡΠ΄ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Β«panic!Β», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Β«#[panic_handler]Β». ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ std, ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π² stderr ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
- Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
- {core,std}::pin::pin!
- impl From<bool> for {f32,f64}
- std::path::MAIN_SEPARATOR_STR
- impl DerefMut Π΄Π»Ρ PathBuf
- ΠΡΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½ Π² ΡΡΠ½ΠΊΡΠΈΠΈ VecDeque::new.
- ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Android ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ NDK r25 (API 19), Ρ.Π΅. ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ Π²Π΅ΡΡΠΈΡ Android ΠΏΠΎΠ²ΡΡΠ΅Π½Π° Π΄ΠΎ 4.4 (KitKat).
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°.
Source: opennet.ru