Objavljena verzija Rust 1.91

Programski jezik Rust 1.91, koji je osnovao Mozilla projekat, ali se sada razvija pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation, je objavljen. Jezik se fokusira na sigurnost memorije i pruža alate za postizanje visokog paralelizma izvršavanja zadataka, bez upotrebe sakupljača smeća i okruženja za izvršavanje (izvršavanje je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Улучшена поддержка 64-разрядных ARM-систем с ОС Windows. Целевая платформа «aarch64-pc-windows-msvc» переведена со второго на первый уровень поддержки. Обеспечен второй уровень поддержки для архитектур aarch64-pc-windows-gnullvm и x86_64-pc-windows-gnullvm. Первый уровень поддержки подразумевает формирование бинарных сборок, проведение досконального тестирования и предоставление наивысшей гарантии поддержки платформы — каждое изменение в компиляторе проверяется выполнением полного тестового набора. Второй уровень поддержки включает формирование бинарных сборок и гарантию сборки, но не гарантирует прохождение тестового набора. Третий уровень охватывает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Dodato je upozorenje "dangling_pointers_from_locals" za detekciju funkcija koje vraćaju viseće sirove pokazivače koji pokazuju na podatke pohranjene u lokalnim varijablama definiranim u pozvanoj funkciji. Takve varijable se brišu nakon što funkcija vrati vrijednost, a sirovi pokazivači na podatke povezane s tim varijablama postaju viseći, tj. pokazuju na oslobođenu memoriju. Naknadno dereferenciranje takvog pokazivača dovodi do nedefiniranog ponašanja. fn f() -> *const u8 { let x = 0; &x // upozorenje: generirat će se viseći pokazivač jer će lokalna varijabla "x" biti odbačena }
  • Dodato je upozorenje lint-a "integer_to_ptr_transmutes" koje informira o pretvaranju cijelih brojeva u pokazivače pomoću funkcije std::mem::transmute.
  • Upravitelj paketa Cargo ima stabiliziranu podršku za parametar "build.build-dir", koji određuje direktorij za pohranjivanje privremenih artefakata izgradnje koje su kreirali cargo i rustc tokom procesa izgradnje.
  • Podrška za deklarisanje varijabilnih funkcija u C stilu je stabilizovana za sysv64, win64, efiapi i aapcs ABI-je.
  • Stabilizovana podrška za inline asemblere za LoongArch32 arhitekturu.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • Putanja::prefiks_datoteke
    • AtomicPtr::fetch_ptr_add
    • AtomicPtr::fetch_ptr_sub
    • AtomicPtr::fetch_byte_add
    • AtomicPtr::fetch_byte_sub
    • AtomicPtr::fetch_or
    • AtomicPtr::fetch_and
    • AtomicPtr::fetch_xor
    • {integer}::strict_add
    • {cijeli broj}::strict_sub
    • {cijeli broj}::strict_mul
    • {cijeli broj}::strict_div
    • {cijeli broj}::strict_div_euclid
    • {cijeli broj}::strict_rem
    • {cijeli broj}::strict_rem_euclid
    • {cijeli broj}::striktna_negativna
    • {cijeli broj}::strict_shl
    • {cijeli broj}::strict_shr
    • {integer}::strict_pow
    • i{N}::strict_add_unsigned
    • i{N}::strict_sub_unsigned
    • i{N}::strict_abs
    • u{N}::strict_add_signed
    • u{N}::strict_sub_signed
    • PanicHookInfo::payload_as_str
    • jezgro::iter::lain
    • u{N}::checked_signed_diff
    • jezgro::niz::ponavljanje
    • PathBuf::dodaj_proširenje
    • PathBuf::sa_dodanim_ekstenzijom
    • Trajanje::from_mins
    • Trajanje::od_sati
    • imp Parcijalna jednačina za PathBuf
    • imp Parcijalna jednačina za PathBuf
    • imp Parcijalna jednačina za Put
    • imp Parcijalna jednačina za Put
    • imp Parcijalna jednačina za niz znakova
    • imp Parcijalna jednačina za niz znakova
    • imp Parcijalna jednačina za str
    • imp Parcijalna jednačina za str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • implementacija Zadano za Pin > gdje je kutija : Zadano, T: ?Veličina
    • implementacija Zadano za Pin > gdje Rc : Zadano, T: ?Veličina
    • implementacija Zadano za Pin > gdje je Arc : Zadano, T: ?Veličina
    • Ćelija::kao_niz_ćelija
    • u{N}::dodavanje_prenošenja
    • u{N}::posuđivanje_podgrupe
    • u{N}::nošenje_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl debug za windows::ffi::EncodeWide<'_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • imp Sum za zasićenje
    • impl Sum<&Self> za zasićenje
    • proizvod za zasićenje
    • impl Product<&Self> za zasićenje
  • Znak "const" se koristi u funkcijama:
    • <[T; N]>::svaka_referenca
    • <[T; N]>::svaki_mut
    • OsString::novo
    • PathBuf::novo
    • ID tipa::od
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Kompajler je ažuriran na LLVM 21 granu.

izvor: opennet.ru

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster