Rust 1.60 Programming Language Release

Ang pagpagawas sa Rust 1.60 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Panguna nga mga inobasyon:

  • Ang rustc compiler adunay usa ka lig-on nga LLVM-based nga sistema alang sa pagmugna sa coverage data nga gigamit sa pagtimbang-timbang sa code coverage sa panahon sa pagsulay. Aron mahimo ang datos sa pagsakup sa panahon sa asembliya, kinahanglan nimo nga gamiton ang bandila nga "-Cinstrument-coverage", pananglitan, pagsugod sa asembliya gamit ang "RUSTFLAGS="-C instrument-coverage" cargo build" nga sugo. Human sa pagpadagan sa executable file nga gihugpong niining paagiha, ang default.profraw file ma-save sa kasamtangan nga direktoryo, alang sa pagproseso diin mahimo nimong gamiton ang llvm-profdata utility gikan sa llvm-tools-preview component. Ang output nga giproseso sa llvm-profdata mahimong ipasa ngadto sa llvm-cov aron makamugna og annotated code coverage report. Ang impormasyon bahin sa link sa source code gikuha gikan sa executable file nga gisusi, nga naglakip sa gikinahanglan nga datos mahitungod sa koneksyon tali sa coverage counters ug sa code. 1| 1|fn main() { 2| 1| println!("Hello, kalibutan!"); 3| 1|}
  • Sa tagdumala sa pakete sa kargamento, ang suporta alang sa bandila nga "-timings" gipalig-on, nga naglakip sa paghimo sa usa ka detalyado nga taho sa pag-uswag sa pagtukod ug ang oras sa pagpatuman sa matag lakang. Mahimong mapuslanon ang taho alang sa pag-optimize sa paghimo sa proseso sa asembliya.
  • Ang tagdumala sa pakete sa kargamento nagtanyag og usa ka bag-ong syntax alang sa mekanismo sa conditional compilation ug pagpili sa mga opsyonal nga dependencies, nga gi-configure sa Cargo.toml file pinaagi sa paglista sa usa ka lista sa ginganlan nga mga kabtangan sa [features] nga seksyon ug gi-activate pinaagi sa pagpagana sa mga kabtangan sa panahon sa pagtukod sa package gamit ang "--features" nga bandila. Ang bag-ong bersyon nagdugang suporta alang sa mga dependency sa bulag nga mga namespace ug huyang nga dependency.

    Sa una nga kaso, posible nga gamiton ang mga elemento nga adunay prefix nga "dep:" sa sulod sa seksyon nga "[mga bahin]" aron klaro nga mag-link sa usa ka opsyonal nga pagsalig nga wala’y klaro nga nagrepresentar sa kini nga pagsalig ingon usa ka bahin. Sa ikaduhang kaso, gidugang ang suporta sa pagmarka gamit ang β€œ?” sign. ("package-name?/feature-name") mga opsyonal nga dependency nga kinahanglan lang iapil kung ang ubang propyedad naglakip sa gihatag nga opsyonal nga dependency. Pananglitan, sa panig-ingnan sa ubos, ang pagpagana sa serde property makapahimo sa "serde" dependency, ingon man sa "serde" property para sa "rgb" dependency, apan kung ang "rgb" dependency kay ma-enable sa ubang dapit: [dependencies] serde = {bersyon = "1.0.133", opsyonal = tinuod} rgb = {bersyon = "0.8.25", opsyonal = tinuod} [mga bahin] serde = ["dep:serde", "rgb?/serde"]

  • Ang suporta alang sa incremental compilation, nga gi-disable sa katapusang pagpagawas, gibalik. Nasulbad na ang compiler bug nga maoy hinungdan sa pagka-disable sa feature.
  • Nasulbad ang pipila ka mga problema sa paghatag sa mga Instant timer nga adunay garantiya sa monotonic nga timing, nga gikonsiderar ang oras nga gigugol sa sistema sa mode sa pagkatulog. Kaniadto, ang OS API gigamit kung mahimo aron maoperahan ang timer, nga wala magtagad sa mga problema nga sitwasyon nga makaguba sa monotony sa oras, sama sa mga problema sa hardware, paggamit sa virtualization, o mga sayup sa operating system.
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec:: spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • gamita::abs_diff
    • Ipakita para sa io::ErrorKind
    • Gikan sa ExitCode
    • Dili para ! (i-type ang "dili gayud")
    • _Op_Assign<$t>
    • arch:: is_aarch64_feature_detected!
  • Ang ikatulo nga lebel sa suporta kay gipatuman para sa mips64-openwrt-linux-musl* ug armv7-unknown-linux-uclibceabi (softfloat) nga mga plataporma. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay, pagmantala sa opisyal nga pagtukod, o pagsusi kon ang code mahimo bang matukod.
  • Ang compiler gibalhin sa paggamit sa LLVM 14.

Dugang pa, mahimo nimong matikdan:

  • Gidugang nga suporta alang sa bootstrapping sa rustc compiler gamit ang rustc_codegen_gcc backend, nga nagtugot kanimo sa paggamit sa libgccjit library gikan sa GCC nga proyekto isip usa ka code generator sa rustc, nga nagtugot sa rustc sa paghatag og suporta alang sa mga arkitektura ug pag-optimize nga anaa sa GCC. Ang promosyon sa compiler nagpasabut sa abilidad sa paggamit sa usa ka GCC-based code generator sa rustc aron matukod ang rustc compiler mismo. Sa praktikal nga bahin, kini nga bahin nagtugot kanimo sa paghimo sa mga programa sa taya alang sa mga arkitektura nga wala kaniadto gisuportahan sa rustc.
  • Ang pagpagawas sa uutils coreutils 0.0.13 toolkit anaa, diin ang usa ka analogue sa GNU Coreutils nga pakete, nga gisulat pag-usab sa Rust nga pinulongan, gihimo. Ang Coreutils adunay kapin sa usa ka gatos ka mga utilities, lakip ang sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, ug ls. Ang tumong sa proyekto mao ang paghimo og cross-platform nga alternatibo nga pagpatuman sa Coreutils, nga makahimo sa pagdagan sa Windows, Redox ug Fuchsia nga mga plataporma, ingon man ang pag-apod-apod ubos sa permissive MIT nga lisensya, imbes sa GPL copyleft nga lisensya.

    Ang bag-ong bersyon nagpauswag sa mga implementasyon sa daghang mga utilities, lakip na ang mas maayo nga pagkaangay sa cp, dd, df, split ug tr utilities uban sa ilang mga katugbang gikan sa proyekto sa GNU. Gihatag ang online nga dokumentasyon. Ang clap parser gigamit sa pag-parse sa mga argumento sa command line, nga nagpauswag sa output para sa "--help" nga bandila ug nagdugang suporta alang sa mga minubo sa taas nga mga sugo (pananglitan, mahimo nimong itakda ang "ls -col" imbes nga "ls -color ”).

Source: opennet.ru

Idugang sa usa ka comment