Rust 1.37 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.37, itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na paralelismo sa gawain nang hindi gumagamit ng basurero o runtime.

Ang awtomatikong pamamahala ng memorya ng Rust ay nagpapalaya sa developer mula sa pagmamanipula ng pointer at pinoprotektahan laban sa mga problemang nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng mga after-free na pag-access sa memorya, null pointer dereferences, buffer overruns, at iba pa. Ang isang manager ng package ay binuo upang ipamahagi ang mga aklatan, tiyakin ang pagpupulong at pamahalaan ang mga dependency ng proyekto. Karga, na nagbibigay-daan sa iyong makuha ang mga aklatan na kailangan para sa programa sa isang pag-click. Sinusuportahan ang isang repository upang mag-host ng mga aklatan crates.io.

Ang pangunahing mga inobasyon:

  • Sa rustc compiler ibinigay suporta para sa pag-optimize batay sa mga resulta ng pag-profile ng code (PGO, Profile-Guided Optimization),
    na nagbibigay-daan sa iyong bumuo ng mas pinakamainam na code batay sa pagsusuri ng mga istatistikang naipon sa panahon ng pagpapatupad ng programa. Upang makabuo ng isang profile, ang flag na "-C profile-generate" ay ibinibigay, at para gamitin ang profile sa panahon ng pagpupulong - "-C profile-use" (sa una, ang programa ay pinagsama kasama ang unang bandila, tumatakbo sa paligid, at pagkatapos lumikha ang profile, ito ay muling pinagsama sa pangalawang bandila);

  • Kapag isinagawa ang command na "cargo run", na maginhawang gamitin para sa mabilis na pagsubok ng mga console application, ang kakayahang awtomatikong pumili ng executable file na tatakbo ay idinagdag kung mayroong ilang mga executable na file sa package. Ang default na file na isasagawa ay tinutukoy sa pamamagitan ng default-run na direktiba sa seksyong [package] na may mga parameter ng package, na nagbibigay-daan sa iyong iwasang tahasang tukuyin ang pangalan ng file sa pamamagitan ng flag na β€œ-bin” sa tuwing magpapatakbo ka ng β€œcargo run”;
  • Ang command na "cargo vendor", na dating ibinigay bilang hiwalay na pakete. Ang utos ay nagpapahintulot sa iyo na ayusin ang trabaho gamit ang isang lokal na kopya ng mga dependency - pagkatapos isagawa ang "cargo vendor", lahat ng source code ng mga dependency ng proyekto ay dina-download mula sa crates.io patungo sa isang lokal na direktoryo, na pagkatapos ay magagamit para sa trabaho nang hindi ina-access ang mga crates. io (pagkatapos isagawa ang utos, ang isang pahiwatig para sa pagbabago ng pagsasaayos ay ipinapakita upang magamit ang direktoryo para sa mga build). Ginagamit na ang feature na ito para ayusin ang paghahatid ng rustc compiler na may packaging ng lahat ng dependencies sa isang archive na may release;
  • Posible na ngayong lumikha ng mga link sa mga opsyon sa enum gamit ang mga uri ng alias (halimbawa, sa katawan ng function na β€œfn increment_or_zero(x: ByteOption) maaari mong tukuyin ang β€œByteOption::None => 0”), i-type ang mga konstruksyon ng pagkalkula (β€Ή MyTypeβ€Ή.. β€Ίβ€Ί::option => N) o Self accesses (sa mga block c &self maaari mong tukuyin ang β€œSelf::Quarter => 25”);
  • Idinagdag ang kakayahang lumikha ng walang pangalan na mga constant sa mga macro. Sa halip na tukuyin ang pangalan ng elemento sa "const", maaari mo na ngayong gamitin ang character na "_" upang dynamic na pumili ng hindi umuulit na identifier, na umiiwas sa mga salungatan sa pangalan kapag tinatawagan muli ang macro;
  • Idinagdag ang kakayahang gamitin ang attribute na "#[repr(align(N))"" na may mga enum gamit ang isang syntax na katulad ng pagtukoy sa isang AlignNβ€ΉTβ€Ί structure na may alignment at pagkatapos ay gamit ang AlignNβ€ΉMyEnumβ€Ί;
  • Ang isang bagong bahagi ng API ay inilipat sa stable na kategorya, kabilang ang BufReader::buffer, BufWriter::buffer, at
    Cell::from_mut,
    Cell::bilang_hiwa_ng_mga_cell,
    DoubleEndedIterator::nth_back,
    Pagpipilian::xor
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits at
    slice::copy_within.

Bilang karagdagan, maaari mong tandaan simula ng pagsubok proyekto Async-std, na nag-aalok ng asynchronous na variant ng Rust standard library (isang port ng std library, kung saan ang lahat ng interface ay inaalok sa isang async na bersyon at handa nang gamitin sa async/wait syntax).

Pinagmulan: opennet.ru

Magdagdag ng komento