Välja antud Rust 1.78. Borgo keel, mis ühendab endas Go ja Rusti tugevused

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.78 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Välja on pakutud uus atribuudi nimeruum "#[diagnostika]", mis pakub vahendit kompilaatori toodetud veateadete mõjutamiseks. Esimene uues ruumis on atribuut "#[diagnostic::on_unimplemented]", mille abil saab kohandada veateateid, mis kuvatakse olukorras, kus on vaja kasutada tunnust, mis pole selle tüübi jaoks rakendatud. #[diagnostic::on_unimplemented( message = "Minu sõnum `ImportantTrait<{A}>` jaoks ei ole `{Self}` jaoks rakendatud", label = "Minu silt", note = "Märkus 1", note = "Märkus 2" )] tunnus ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Minu sõnum 'ImportantTrait'ile ` ei ole rakendatud stringi jaoks —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Minu silt | | | nõuab selle üleskutsega kasutusele võetud sidumine | = abi: tunnus `OlulineTrait ` ei ole rakendatud stringi jaoks = märkus: märkus 18 = märkus: märkus 12
  • Ebaturvalistele funktsioonidele rakendatud kinnituse-eelseid kontrolle saab nüüd edasi lükata kuni koodi genereerimiseni, mis võimaldab neid kontrolle teostada, ilma et oleks vaja luua standardset teeki režiimis "#[cfg(debug_assertions)]". Kontrollide käivitamiseks piisab nüüd, kui lubate oma koodi test- või silumisjärkude jaoks silumisväited.
  • Standardteegi funktsioonide käitumine, mis mõjutab osutite ja lõikude joondamist, on nüüd käitusajal etteaimatav ja sõltub sisendandmetest. Funktsioon pointer::align_offset, mis arvutab kursori joondamiseks nihke, tagastab nüüd väärtuse use::MAX ainult siis, kui toiming nurjub. Funktsioonid slice::align_to ja slice::align_to_mut, mis muudavad viilud esituseks joondatud keskmise lõigu ja algse algus- ja lõpuosaga, tagastavad nüüd alati suurima keskosa.
  • Stabiilsesse kategooriasse viidi üle järgmised:
    • impl Loe &Stdini jaoks
    • Lubage mõne std::error::veaga seotud teostuse puhul kasutada mittestaatilist (mittestaatilist) eluiga.
    • Impl rakendamine ?Suuruse väärtus on lubatud.
    • impl Alates io jaoks::Error
  • Funktsioon Barrier::new() on stabiliseeritud, et seda saaks kasutada konstantide asemel mis tahes kontekstis atribuudiga "const".
  • Sihtplatvormidele x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm ja i686-gnullvm nüüd on vaja vähemalt Windows 10 versiooni.
  • Kolmas tugitase on rakendatud platvormidele wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf ja lolongarch64-unknown-linux-musl. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järge avaldamise ja koodi koostatavuse kontrollimiseta.
  • Rakendatud on sihtplatvormi Add wasm32-wasip1 teine ​​tugitase. Teise taseme tugi hõlmab montaažigarantii.
  • Platvorm wasm32-wasi-preview1-threads on ümber nimetatud wasm32-wasip1-threadsiks.
  • Kompilaator on lülitatud kasutama LLVM 18. LLVM 18 kasutamisel x86-32 ja x86-64 arhitektuuri jaoks on muudetud tüüpidega u128 ja i128 seotud ABI.
  • Cargo paktihalduris on lukufailide versioon 4 (lockfile v4) stabiliseeritud.
  • Cargol on stabiliseeritud globaalne vahemälu, mis sisaldab teavet uusima andmekasutuse kohta. Vahemälu hostitakse $CARGO_HOME/.global-cache'is, kasutades SQLite'i, ja seda värskendatakse automaatselt, et kajastada viimaseid muudatusi indeksi, aedikufaili, koodikataloogi, git-klooni ja git-kassa kohta.

Lisaks üritab Borgo programmeerimiskeel olla väljendusrikkam kui Go keel, kuid vähem keerukas kui Rust keel. Borgo ühendab Go ja Rusti parimad omadused, kompenseerides iga keele puudujäägid. Näiteks Go on lihtne ja arusaadav, kuid ei paku täiustatud tüüpi turvafunktsioone. Rust keel pakub tööriistu turvaliseks programmeerimiseks, kuid on liiga keeruline. Projekti arendab Marco Sampellegrini, raamatu The Simple Haskell Handbook autor ja Quad CI pideva integratsioonisüsteemi arendaja.

Välja antud Rust 1.78. Borgo keel, mis ühendab endas Go ja Rusti tugevused

Borgo kasutab staatilist tippimist, Go-tüüpi ja roostetaolist süntaksit. Semikoolonid on Borgo koodi ridade lõpus valikulised. Borgo kood on koostatud Go esinduseks, mis ühildub täielikult olemasolevate Go pakettidega. Kompilaatori kood on kirjutatud Rust keeles ja seda levitatakse ISC litsentsi all. kasutage funktsiooni fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Vastus { pealkiri: string, kestus: int, } fn main() { let res = Response { title: "Tere maailm", kestus: 0, } anna olek = NetworkState.Success(res) let msg = vaste olek { NetworkState.Loading => “veel laadimine”, NetworkState.Failed(code) => fmt.Sprintf(“Sain veakoodi: %d”, kood), NetworkState.Success (res) => res.title, } fmt.Println(msg)}

Allikas: opennet.ru

Lisa kommentaar