Rust 1.38 Programming Language Release

gipatik pagpagawas sa pinulongan sa sistema sa programming Taya 1.38, gitukod sa proyekto sa Mozilla. Ang lengguwahe nagpunting sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag usa ka paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga wala mogamit usa ka tigkolekta sa basura o oras sa pagdagan.

Ang awtomatik nga pagdumala sa memorya ni Rust nagpalingkawas sa developer gikan sa pagmaniobra sa pointer ug nanalipod batok sa mga problema nga naggikan sa ubos nga lebel sa pagmaniobra sa memorya, sama sa human-free nga memory access, null pointer dereferences, buffer overruns, ug uban pa. Usa ka manedyer sa pakete ang gipalambo aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency sa proyekto. Cargo, nga nagtugot kanimo nga makuha ang mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang usa ka repository sa pag-host sa mga librarya crates.io.

nag-unang mga inobasyon:

  • Gidugang ang usa ka pipelined compilation mode (pipelined), diin ang pagtukod sa usa ka dependent crate package magsugod sa diha nga ang dependency metadata mahimong magamit, nga dili maghulat nga makompleto ang compilation niini. Kung nag-compile sa usa ka pakete, ang mga dependency dili kinahanglan nga bug-os nga gitigum, gipasabut lang ang metadata, nga naglakip sa mga lista sa mga tipo, dependency, ug gi-eksport nga mga elemento. Ang metadata magamit sa sayo sa proseso sa pag-compile, mao nga ang mga na-link nga mga pakete mahimo nang ma-compile sa mas sayo pa. Kung nagtukod og usa ka pakete, ang gisugyot nga mode dili makaapekto sa pasundayag, apan kung ang pagtukod naglangkob sa mga pakete nga adunay mga branched dependencies, ang kinatibuk-ang oras sa pagtukod mahimong makunhuran sa 10-20%;
  • Nagsiguro nga makit-an ang sayup nga paggamit sa mga gimbuhaton std::mem::uninitialized ΠΈ std::mem::zeroed. Pananglitan, ang std::mem::uninitialized sayon ​​​​alang sa dali nga paghimo sa mga arrays, apan kini nagpahisalaag sa compiler tungod kay kini makita nga gisugdan, apan sa pagkatinuod ang bili nagpabilin nga wala'y una. Ang mem::uninitialized function kay gimarkahan na nga wala na gigamit ug girekomendar nga gamiton ang intermediate type. TingaliUnit. Sama sa mem::zeroed, kini nga function mahimong hinungdan sa mga problema sa mga tipo nga dili makadawat mga zero nga kantidad.

    Aron makatabang sa pag-ila sa dili matino nga kinaiya, ang bag-ong pagpagawas nagdugang ug lint check sa compiler nga nakamatikod sa pipila ka problema sa mem::uninitialized o mem::zeroed. Sama pananglit, nasayop ka karon sa pagsulay sa paggamit sa mem::uninitialized o mem::zeroed nga adunay mga tipo nga &T ug Boxβ€ΉTβ€Ί, nga nagrepresentar sa pointer nga mga butang nga dili makadawat sa null values;

  • Ang attribute nga "#[deprecated]" gipalapdan aron tugotan ang mga pakete sa crate nga markahan nga dili na magamit ug gikatakda alang sa umaabot nga pagtangtang. Ingon sa Rust 1.38, kini nga hiyas mahimo usab nga gamiton alang sa mga macro;
  • Gidugang ang abilidad sa paggamit sa "#[global_allocator]" nga hiyas sa mga submodules;
  • Gidugang nga bahin std::any::type_name, nga nagtugot kanimo nga mahibal-an ang ngalan sa tipo, nga mahimong mapuslanon alang sa mga katuyoan sa pag-debug. Pananglitan, sa panahon sa pagpatuman sa programa mahimo nimong mahibal-an kung unsang klase ang gitawag nga function:

    fn gen_valueβ€ΉT: Default>() -β€Ί T {
    println!("Pagsugod ug instance sa {}", std::bisan unsa::type_name::β€ΉTβ€Ί());
    Default::default()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" i-imprinta
    let _: String = gen_value(); # mag-imprinta "alloc:: string:: String"
    }

  • Gipadako nga mga gimbuhaton sa standard library:
    • slice::{concat, connect, join} mahimo na nga kuhaon ang bili &[T] dugang sa &T;
    • Ang "*const T" ug "*mut T" karon nagpatuman sa marker::Unpin;
    • Ang "Arcβ€Ή[T]β€Ί" ug "Rcβ€Ή[T]β€Ί" karon nagpatuman sa FromIteratorβ€ΉTβ€Ί;
    • iter::{StepBy, Peekable, Take} karon ipatuman ang DoubleEndedIterator.
    • ascii :: Ang EscapeDefault nagpatuman sa Clone ug Display.
  • Usa ka bag-ong bahin sa mga API ang gibalhin sa stable nga kategorya, lakip ang mga pamaagi nga na-stabilize
    • β€Ή*const Tβ€Ί::cast, β€Ή*mut Tβ€Ί::cast,
    • Gidugayon::as_secs_f{32|64},
    • Gidugayon::div_duration_f{32|64},
    • Gidugayon::div_f{32|64},
    • Gidugayon::from_secs_f{32|64},
    • Gidugayon::mul_f{32|64},
    • mga operasyon sa dibisyon nga adunay nahabilin
      div_euclid ug rem_euclid para sa tanang integer primitives;

  • Gidugang nga suporta alang sa pagtino sa "--features" nga kapilian sa daghang mga higayon aron mahimo ang lainlaing mga bahin sa tagdumala sa pakete sa kargamento;
  • Naghatag ang compiler og ikatulo grade suporta para sa target nga mga plataporma aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-targets, armlinux7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl ug riscv32i-unknown-none-elf. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay ug pagmantala sa mga opisyal nga pagtukod.

Source: opennet.ru

Idugang sa usa ka comment