Rust 1.34 Programming Language Release

barde systeem programmeartaal release Roest 1.34, ûntwikkele troch it Mozilla-projekt. De taal rjochtet him op ûnthâld feiligens, soarget foar automatyske ûnthâld behear, en jout in middel om te kommen ta hege taak parallelism sûnder gebrûk fan in garbage collector of runtime.

Rust's automatyske ûnthâldbehear befrijt de ûntwikkelder fan oanwizermanipulaasje en beskermet tsjin problemen dy't ûntsteane út leechnivo-ûnthâldmanipulaasje, lykas nei-frije ûnthâldtagongen, nul-oanwizer-ferwizings, buffer-oerrin, en sa. In pakketbehearder wurdt ûntwikkele om bibleteken te fersprieden, assemblage te garandearjen en ôfhinklikens te behearjen troch it projekt. Lading, wêrtroch jo de biblioteken dy't nedich binne foar it programma yn ien klik krije. In repository wurdt stipe om bibleteken te hostjen crates.io.

haad ynnovaasjes:

  • De Cargo-pakketbehearder hat ark tafoege om te wurkjen mei alternative pakketregistraasjes dy't kinne bestean mei it iepenbiere register crates.io. Bygelyks, ûntwikkelders fan proprietêre applikaasjes kinne no har eigen privee registraasje brûke, dat kin wurde brûkt by it opjaan fan ôfhinklikens yn Cargo.toml, en in ferzjemodel tapasse lykas crates.io foar har produkten, en ek ôfhinklikens ferwize nei beide kisten. io en nei jo eigen register.

    Om eksterne registers ta te foegjen oan .cargo/config (leit yn $HOME of yn 'e pakketmap)
    foarsjoen seksje "[registries]", en om in ekstern register te brûken, is de opsje "registraasje" ferskynde yn 'e beskriuwing fan elke ôfhinklikens yn Cargo.toml. Om ferbining te meitsjen mei in ekstra register, pleatse jo gewoan de autentikaasjetoken yn it ~/.cargo/credentials-bestân en fier it kommando út
    "cargo login --registry=my-registry" en om in pakket te publisearjen -
    "cargo publisearje -registry=my-registry";

  • Folsleine stipe tafoege foar it brûken fan de operator "?". yn tests doctests, wêrtroch jo foarbyldkoade kinne brûke fan 'e dokumintaasje as tests. Earder operator
    "?" koe brûkt wurde om flaters te behanneljen tidens testútfiering allinich yn 'e oanwêzigens fan' e funksje "fn main ()" of yn 'e funksjes "#[test]";

  • Yn oanpaste attributen definiearre mei help fan prosedurele makros befeilige de mooglikheid om willekeurige sets tokens te brûken ("#[attr($tokens)]", "#[attr[$tokens]] en #[attr{$tokens}]"). Eartiids koene eleminten allinnich yn in beam/rekursive foarm oantsjutte wurde mei string-literalen, bygelyks “#[foo(bar, baz(quux, foo = “bar”))]”, mar no is it mooglik om enumeraasjes te brûken (' #[range(0. .10)]') en konstruksjes lykas "#[bound(T: MyTrait)]";
  • Stabilisearre soarten (eigenskip) TryFrom и TryInto, wêrtroch typekonverzjes mei flaterhanneling mooglik binne. Bygelyks, metoaden lykas from_be_bytes mei integer typen brûke arrays as ynfier, mar de gegevens komme faak yn in Slice-type, en it konvertearjen tusken arrays en slices is problematysk om mei de hân te dwaan. Mei help fan nije eigenskippen kin de oantsjutte operaasje útfierd wurde op 'e flecht troch in oprop oan .try_into (), Bygelyks, "lit num = u32 :: from_be_bytes (slice.try_into ()?)". Foar konversaasjes dy't altyd slagje (bygelyks fan type u8 oant u32), is in flatertype tafoege Unfeilber, wêrtroch transparant gebrûk mooglik is
    TryFrom foar alle besteande ymplemintaasjes fan "Fan";

  • Funksje is ôfkard CommandExt::before_exec, dy't tastien in handler wurde útfierd foardat útfiere exec, dat waard útfierd yn de kontekst fan in bern proses forked nei de fork () oprop. Under sokke betingsten kinne guon boarnen fan it âlderproses, lykas triembeskriuwers en yn kaart brochte ûnthâldgebieten, duplikearre wurde, wat kin liede ta ûndefinieare gedrach en ferkearde wurking fan biblioteken.
    It is oan te rieden om in ûnfeilige funksje te brûken ynstee fan before_exec CommandExt :: pre_exec.

  • Stabilisearre ûndertekene en net-ûndertekene atomêre integerstypen fariearjend yn grutte fan 8 oant 64 bits (bygelyks, AtomicU8), lykas ûndertekene typen NonZeroI[8|16|32|64|128].
  • In nij diel fan 'e API is ferpleatst nei de stabile kategory, ynklusyf de Any::type_id, Flater ::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub] ] en SystemTime-metoaden binne stabilisearre ::checked_[add|sub]. De funksjes fan iter :: from_fn en iter :: opfolgers binne stabilisearre;
  • Foar alle integer typen wurde de checked_pow, saturating_pow, wrapping_pow en overflowing_pow metoaden ymplemintearre;
  • De mooglikheid tafoege om optimisaasjes yn te skeakeljen op it keppelingsstadium troch de "-C linker-plugin-lto" bouwopsje oan te jaan.

Boarne: opennet.ru

Add a comment