közzétett A rendszer programozási nyelvének 1.45-es kiadása Rozsdaa Mozilla projekt alapította. A nyelv a biztonságos memóriakezelésre összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas párhuzamos munkavégzés elérését, miközben elkerüli a szemétgyűjtő és futásidejű.
A Rust automatikus memóriakezelése megóvja a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és védelmet nyújt az alacsony szintű memóriakezelés miatt felmerülő problémák ellen, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, az összeállítás biztosításához és a függőségek kezeléséhez a projekt csomagkezelőt fejleszt ki Szállítmány, amely lehetővé teszi, hogy egy kattintással megszerezze a programhoz szükséges könyvtárakat. Egy tárhely támogatott a könyvtárak fogadására ládák.io.
Régóta megszüntetve disszidál egész számok és lebegőpontos számok közötti átalakítás során. Mivel a Rust fordító az LLVM-et használja háttérként, a típuskonverziós műveleteket LLVM közbenső kódutasításokon keresztül hajtották végre, mint pl. fptoui, amelyeknek van egy jelentős tulajdonsága - definiálatlan viselkedés, ha az eredményül kapott érték nem fér bele a céltípusba. Például az f300 típusú 32 lebegőérték u8 típusú egész számmá konvertálásakor az eredmény megjósolhatatlan, és a különböző rendszereken változhat. A probléma az, hogy ez a funkció olyan kódban jelenik meg, amely nincs megjelölve „nem biztonságos”.
A Rust 1.45-től kezdve a típusméret-túlcsordulás viselkedése szigorúan szabályozott, és az "as" konverziós művelet ellenőrzi a túlcsordulást, és kényszeríti a konvertálást a céltípus maximális vagy minimális értékére (a fenti példában egy 300-at 255-re alakítanak át). Az ilyen ellenőrzések letiltásához további API-hívások állnak rendelkezésre „{f64, f32}::to_int_unchecked”, amelyek nem biztonságos módban működnek.
fn cast(x: f32) -> u8 {
x mint u8
}
fn main() {
legyen túl_nagy = 300.0;
legyen túl kicsi = -100.0;
legyen nan = f32::NAN;
legyen x: f32 = 1.0;
legyen y: u8 = nem biztonságos { x.to_int_unchecked() };
Stabilizált használat eljárási makrókfüggvényszerű kifejezések, sablonok és utasítások. Korábban az ilyen makrókat nem lehetett mindenhol meghívni, csak a kód bizonyos részein (külön hívásként, más kóddal nem összefonva). A makrók hívhatóságának kiterjesztése a függvényekhez hasonlóan az egyik követelmény volt a webes keretrendszer működéséhez. Rakéta a Rust stabil kiadásaiban. Korábban a kezelők meghatározásában a Rocketben további rugalmasság eléréséhez engedélyezni kellett a „proc_macro_hygiene” nevű kísérleti funkciót, amely a Rust stabil verzióiban nem érhető el. Ez a funkció most be van építve a nyelv stabil kiadásaiba.
Engedélyezett a „char” típusú tartományok használata a tartományon belüli értékek iterálásához (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in 'a'..='z' {
nyomtat!("{}", ch);
}
println!(); // Kinyomtatja az "abcdefghijklmnopqrstuvwxyz" kifejezést
Az API új része átkerült a stabil kategóriába, beleértve a stabilizáltat is
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Gyenge::as_ptr,
rc::Gyenge::from_raw,
rc::Gyenge::into_raw,
str::szalag_előtag,
str::strip_suffix,
szinkronizálás::Gyenge::as_ptr,
sync::Gyenge::from_raw,
sync::Gyenge::in_raw,
char::UNICODE_VERSION,
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0.
A rustc fordító támogatja a különböző célplatform-szolgáltatások felülbírálását a „target-feature” jelzővel, például „-C target-feature=+avx2,+fma”. Új zászlók is hozzáadásra kerültek:
"force-unwind-tables" a feloldó hívástáblák létrehozásához, függetlenül az összeomláskezelési stratégiától; "embed-bitcode" annak szabályozására, hogy az LLVM bitkód szerepeljen-e a generált rlib-ekben. Az "embed-bitcode" jelző alapértelmezés szerint engedélyezve van a Cargo-ban az összeállítási idő és a lemezterület-felhasználás optimalizálása érdekében.
A harmadik támogatási szint a mipsel-sony-psp és a thumbv7a-uwp-windows-msvc platformok számára biztosított. A harmadik szint alapvető támogatást foglal magában, de automatikus tesztelés és a hivatalos buildek közzététele nélkül.
Ezenkívül meg lehet jegyezni a történet a legegyszerűbb létrehozásáról alkalmazások Rust nyelven, elkezdi használni a rendszerbetöltőt, és készen áll az önálló betöltésre az operációs rendszer helyett.
A cikk az első az alacsony szintű programozásban és az operációs rendszer fejlesztésében keresett technikák bemutatására szolgáló sorozatban.