Rust 1.60 Programming Language Release

Ang pagpapalabas ng Rust 1.60 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Ang rustc compiler ay may na-stabilize na LLVM-based system para sa pagbuo ng data ng saklaw na ginagamit upang suriin ang saklaw ng code sa panahon ng pagsubok. Upang paganahin ang data ng saklaw sa panahon ng pag-assemble, dapat mong gamitin ang flag na "-Cinstrument-coverage", halimbawa, simulan ang assembly gamit ang command na "RUSTFLAGS="-C instrument-coverage" na cargo build. Pagkatapos patakbuhin ang executable file na pinagsama-sama sa ganitong paraan, ang default.profraw file ay ise-save sa kasalukuyang direktoryo, para sa pagproseso kung saan maaari mong gamitin ang llvm-profdata utility mula sa llvm-tools-preview component. Ang output na naproseso ng llvm-profdata ay maipapasa sa llvm-cov upang makabuo ng annotated na ulat sa saklaw ng code. Ang impormasyon tungkol sa link sa source code ay kinuha mula sa executable file na sinusuri, na kinabibilangan ng kinakailangang data tungkol sa koneksyon sa pagitan ng coverage counter at ng code. 1| 1|fn pangunahing() { 2| 1| println!("Kumusta, mundo!"); 3| 1|}
  • Sa cargo package manager, ang suporta para sa flag na "-timings" ay na-stabilize, na kinabibilangan ng pagbuo ng isang detalyadong ulat sa pag-usad ng build at ang oras ng pagpapatupad ng bawat hakbang. Maaaring maging kapaki-pakinabang ang ulat para sa pag-optimize ng pagganap ng proseso ng pagpupulong.
  • Nag-aalok ang cargo package manager ng bagong syntax para sa mekanismo ng conditional compilation at pagpili ng mga opsyonal na dependencies, na na-configure sa Cargo.toml file sa pamamagitan ng paglilista ng listahan ng mga pinangalanang property sa seksyong [features] at na-activate sa pamamagitan ng pag-enable sa mga property habang ginagawa ang package. gamit ang flag na "--features". Ang bagong bersyon ay nagdaragdag ng suporta para sa mga dependency sa magkahiwalay na namespace at mahinang dependencies.

    Sa unang kaso, posibleng gumamit ng mga elemento na may prefix na "dep:" sa loob ng seksyong "[mga tampok]" upang tahasang mag-link sa isang opsyonal na dependency nang hindi tuwirang kinakatawan ang dependency na ito bilang isang feature. Sa pangalawang kaso, idinagdag ang suporta para sa pagmamarka gamit ang β€œ?” sign. ("package-name?/feature-name") mga opsyonal na dependency na dapat lang isama kung kasama sa ibang property ang ibinigay na opsyonal na dependency. Halimbawa, sa halimbawa sa ibaba, ang pagpapagana sa serde property ay magbibigay-daan sa "serde" dependency, gayundin sa "serde" property para sa "rgb" dependency, ngunit kung ang "rgb" dependency ay pinagana sa ibang lugar: [dependencies] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Ang suporta para sa incremental compilation, na hindi pinagana sa huling release, ay ibinalik. Ang compiler bug na naging sanhi ng pag-disable ng feature ay nalutas na.
  • Nalutas ang ilang problema sa pagbibigay ng mga Instant timer na may garantiya ng monotonic timing, na isinasaalang-alang ang oras na ginugol ng system sa sleep mode. Noong nakaraan, ang OS API ay ginagamit hangga't maaari upang patakbuhin ang timer, na hindi isinasaalang-alang ang mga problemadong sitwasyon na sumisira sa monotony ng oras, tulad ng mga problema sa hardware, paggamit ng virtualization, o mga error sa operating system.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay 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
    • gamitin::abs_diff
    • Display para sa io::ErrorKind
    • Mula sa para sa ExitCode
    • Hindi para ! (type ang "hindi kailanman")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Ang ikatlong antas ng suporta ay ipinatupad para sa mips64-openwrt-linux-musl* at armv7-unknown-linux-uclibceabi (softfloat) platform. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, pag-publish ng mga opisyal na build, o pagsuri kung ang code ay maaaring buuin.
  • Ang compiler ay inilipat upang gamitin ang LLVM 14.

Bilang karagdagan, maaari mong tandaan:

  • Nagdagdag ng suporta para sa bootstrapping ng rustc compiler gamit ang rustc_codegen_gcc backend, na nagbibigay-daan sa iyong gamitin ang libgccjit library mula sa GCC project bilang code generator sa rustc, na nagbibigay-daan sa rustc na magbigay ng suporta para sa mga arkitektura at optimization na available sa GCC. Ang pag-promote ng compiler ay nangangahulugang ang kakayahang gumamit ng GCC-based na code generator sa rustc upang buuin ang rustc compiler mismo. Sa praktikal na bahagi, ang tampok na ito ay nagbibigay-daan sa iyo upang bumuo ng mga programang kalawang para sa mga arkitektura na hindi dati suportado sa rustc.
  • Ang paglabas ng uutils coreutils 0.0.13 toolkit ay magagamit, kung saan ang isang analogue ng GNU Coreutils package, na muling isinulat sa Rust na wika, ay binuo. Ang Coreutils ay may higit sa isang daang utility, kabilang ang sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, at ls. Ang layunin ng proyekto ay lumikha ng isang cross-platform na alternatibong pagpapatupad ng Coreutils, na may kakayahang tumakbo sa Windows, Redox at Fuchsia platform, pati na rin ang pamamahagi sa ilalim ng permissive MIT na lisensya, sa halip na ang GPL copyleft na lisensya.

    Ang bagong bersyon ay nagpabuti ng mga pagpapatupad ng maraming mga utility, kabilang ang makabuluhang pinahusay na compatibility ng cp, dd, df, split at tr utilities sa kanilang mga katapat mula sa proyekto ng GNU. Ibinigay ang online na dokumentasyon. Ang clap parser ay ginagamit upang i-parse ang mga argumento ng command line, na nagpabuti ng output para sa flag na "--help" at nagdagdag ng suporta para sa mga pagdadaglat ng mahabang command (halimbawa, maaari mong tukuyin ang "ls -col" sa halip na "ls -color ”).

Pinagmulan: opennet.ru

Magdagdag ng komento