Utgivningen av Rust 1.63 allmÀnt programmeringssprÄk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. SprÄket fokuserar pÄ minnessÀkerhet och ger möjlighet att uppnÄ hög jobbparallellism samtidigt som man undviker anvÀndningen av en skrÀpsamlare och körtid (körtiden reduceras till grundlÀggande initiering och underhÄll av standardbiblioteket).
Rusts minneshanteringsmetoder rÀddar utvecklaren frÄn fel vid manipulering av pekare och skyddar mot problem som uppstÄr pÄ grund av minneshantering pÄ lÄg nivÄ, som att komma Ät ett minnesomrÄde efter att det har frigjorts, avlÀsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahÄlla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för vÀrdbibliotek.
MinnessÀkerhet tillhandahÄlls i Rust vid kompilering genom referenskontroll, hÄlla reda pÄ objektÀgande, hÄlla reda pÄ objektlivslÀngder (scopes) och bedöma riktigheten av minnesÄtkomst under kodexekvering. Rust ger ocksÄ skydd mot heltalsspill, krÀver obligatorisk initiering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet med oförÀnderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga innovationer:
- Lade till std::thread::scope API, som lÄter dig skapa scoped-trÄdar. Till skillnad frÄn tidigare tillgÀngliga trÄdar tillÄter det nya std::thread::scope API att lÄna icke-statisk data, medan trÄdar skapade med det klassiska std::thread::spawn API krÀvdes att Àga alla argument som skickades och inte kunde ta emot lÄnade variabler. std::thread::scope API sÀkerstÀller att alla skapade trÄdar avslutas innan data returneras, vilket ger tillrÀcklig sÀkerhet för lÄnemekanismen.
- Nya omslagstyper för fildeskriptorer har föreslagits - BorrowedFd och OwnedFd, som ger lÄn och Àgande. Typer Àr mÀrkta med "#[repr(transparent)]", vilket gör att de kan anvÀndas direkt i externa C-bindningar pÄ ett Àgarmedvetet sÀtt.
- Förutsatt möjligheten att anropa Condvar::new, Mutex::new och RwLock::new i kontexten av konstanter för att skapa globala statiska Mutex-, RwLock- och Condvar-vÀrden utan att anvÀnda lazy_static-paket.
- För funktioner som fn foo (vĂ€rde: T, f: impl Copy) syntax som "foo::" Ă€r tillĂ„ten (32, 3)â, som uttryckligen anger typen av generika.
- ĂvergĂ„ngen till att anvĂ€nda NLL-tekniken (Non-Lexical Lifetimes) för att identifiera problem med lĂ„nevariabler har slutförts. NLL tar hĂ€nsyn pĂ„ nivĂ„n av en uppsĂ€ttning pekare i exekveringsflödesgrafen, vilket gör det möjligt att höja kvaliteten pĂ„ kontrollen för lĂ„nevariabler (lĂ„nekontroller) och tillĂ„ta exekvering av vissa typer av korrekt kod, anvĂ€ndning av som tidigare ledde till ett fel. Stöd för den gamla mekanismen som anvĂ€nde livstidsbindning pĂ„ lexikalnivĂ„ har nu tagits bort helt frĂ„n rustc, och anvĂ€ndningen av den nya NLL har implementerats genomgĂ„ende.
- En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
- array::from_fn
- Box::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- SökvÀg::try_exists
- Ref::filter_map
- RefMut::filter_map
- NonNull::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
KĂ€lla: opennet.ru
