Rust programazio hizkuntzaren bertsioa 2021 (1.56)

Rust 1.56 sistemaren programazio-lengoaia argitaratu da, Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatua. Bertsio arruntaren zenbakiaz gain, bertsioak Rust 2021 ere izendatzen du eta azken hiru urteetan proposatutako aldaketen egonkortzea adierazten du. Rust 2021 hurrengo hiru urteetan funtzionalitateak areagotzeko oinarri gisa ere balioko du, Rust 2018 kaleratzea hizkuntzaren garapenaren oinarri bihurtu zen azken hiru urteetan bezala.

Bateragarritasuna mantentzeko, garatzaileek "2015", "2018" eta "2021" etiketak erabil ditzakete beren programetan, eta horri esker, Rust-en aukeratutako edizioei dagozkien hizkuntza-egoeraren zatiei lotu ahal zaizkie programak. Aldaketa bateraezinak bereizteko edizioak sartu ziren eta zama-paketeen metadatuetan konfiguratzen dira "[paketea]" ataleko "edizioa" eremuaren bidez. Esate baterako, "2018" edizioak 2018 amaieran egonkortutako funtzionalitateak barne hartzen ditu eta bateragarritasuna hausten ez duten beste aldaketa guztiak ere hartzen ditu. 2021eko edizioak, gainera, egungo 1.56 bertsioan proposatutako eta etorkizuneko inplementaziorako onartutako elkarreragingarritasuna hausteko eginbideak biltzen ditu. Hizkuntzaz gain, tresnen eta dokumentazioaren egoera ere kontuan hartzen dute editoreek.

Rust 2021-en erregistratutako bateraezintasun nagusiak:

  • Bereizi atzematea itxieretan - Itxierek orain eremuen izenak har ditzakete identifikatzaile osoa ordez. Adibidez, "|| ax + 1"-k "ax" baino ez du harrapatuko.
  • Arrayetarako IntoIterator ezaugarriak: array.into_iter() aukera ematen du array-elementuen gainean balioen arabera errepikatzeko, erreferentziak baino.
  • "|" esapideen prozesamendua aldatu da makro_arauetan (Edo boolearra) ereduetan - ":pat" zehatzaileak bat-etorketetan orain "A | B".
  • Karga paketeen kudeatzaileak lehenespenez ezaugarrien konpontzailearen bigarren bertsioa barne hartzen du, Rust 1.51-n agertutako euskarria.
  • TryFrom, TryInto eta FromIterator ezaugarriak preludioko liburutegi estandarraren moduluari gehitu zaizkio.
  • Panic!(..) eta assert!(expr, ..) makroek orain beti erabiltzen dute format_args!(..) kateak formateatzeko, println!(ren antzera).
  • ident#, identΒ»..." eta ident'...' esamoldeak hizkuntza sintaxian gordeta daude.
  • Bare_trait_objects eta elipsis_inclusive_range_patterns abisuak erroreetara eraman ditu.

Berria Rust 1.56-n:

  • Cargo.toml-en, "[paketea]" atalean, herdoila-bertsioaren eremua gehitu da, eta horren bidez, kaxa paketerako Rust-en onartzen den gutxieneko bertsioa zehaztu dezakezu. Uneko bertsioa zehaztutako parametroarekin bat ez badator, Cargo-k funtzionatzeari utziko dio errore-mezu batekin.
  • Eredu bategitean "binding @ pattern" adierazpenak erabiliz, lotura osagarriak zehazteko laguntza eskaintzen da (adibidez, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::to_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, funtzioetan erabiltzen da.
    • std::mem::transmute
    • [T]::lehen
    • [T]::split_first
    • [T]::azkena
    • [T]::split_last
  • Konpilatzailea LLVM 13 bertsioa erabiltzeko aldatu da.
  • Bigarren laguntza-maila bat ezarri da aarch64-apple-ios-sim plataformarako eta hirugarren maila bat powerpc-unknown-freebsd eta riscv32imc-esp-espidf plataformetarako. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.

Gogoratu Rust-ek memoriaren segurtasunera bideratzen duela, memoria automatikoaren kudeaketa eskaintzen duela eta lanaren exekuzioan paralelismo handia lortzeko bitarteko bat eskaintzen duela, zabor-biltzailea edo exekuzio-denbora erabili gabe (exekuzio-denbora liburutegi estandarraren oinarrizko hasierako eta mantentze-lanera murrizten da).

Rust-en memoria-kudeaketa automatikoak akatsak ezabatzen ditu erakusleak manipulatzean eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria-eskualde batera atzitzea askatu ondoren, erakusle nuluen deserreferentziak, buffer gainditzeak, etab. Liburutegiak banatzeko, muntaia ziurtatzeko eta mendekotasunak kudeatzeko, Cargo paketeen kudeatzailea garatzen ari da proiektua. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Iturria: opennet.ru

Gehitu iruzkin berria