Rust 1.38 Programming Language Release

publisearre systeem programmeartaal release Roest 1.38, oprjochte 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:

  • In pipelined kompilaasjemodus tafoege (pipelined), wêryn it bouwen fan in ôfhinklik kratpakket begjint sa gau as de ôfhinklikheidsmetadata beskikber wurde, sûnder te wachtsjen op syn kompilaasje om te foltôgjen. By it kompilearjen fan in pakket hoege de ôfhinklikens net folslein gearstald te wurden, gewoan de metadata te definiearjen, dy't listen mei soarten, ôfhinklikens en eksporteare eleminten omfettet. Metadata wurde betiid beskikber steld yn it kompilaasjeproses, sadat keppele pakketten no folle earder kompilearre wurde kinne. By it bouwen fan inkele pakketten hat de foarstelde modus gjin ynfloed op prestaasjes, mar as de build pakketten mei fertakke ôfhinklikens beslacht, kin de totale bouwtiid mei 10-20% wurde fermindere;
  • Soarget opspoaren fan ferkeard gebrûk fan funksjes std :: mem :: net inisjalisearre и std::mem::nul. Bygelyks, std :: mem :: uninitialized is handich foar fluch meitsjen arrays, mar it misliedt de gearstaller omdat it liket inisjalisearre, mar yn werklikheid bliuwt de wearde uninitialized. De mem :: uninitialisearre funksje is al markearre as ferâldere en it is oan te rieden om ynstee in tuskentype te brûken Miskien Unit. As foar mem :: nul, kin dizze funksje problemen feroarsaakje mei typen dy't gjin nulwearden kinne akseptearje.

    Om te helpen by it identifisearjen fan ûndefinieare gedrach, foeget de nije release in lintkontrôle ta oan 'e gearstaller dy't guon problemen detektearret mei mem :: uninitialisearre of mem :: nul. Bygelyks, jo krije no in flater as jo besykje mem :: uninitialisearre of mem :: nul te brûken mei typen &T en Box‹T›, dy't oanwizerobjekten fertsjintwurdigje dy't gjin nulwearden akseptearje kinne;

  • It attribút "#[ferâldere]" is útwreide om kratpakketten as ferâldere te markearjen en te planen foar takomstich wiskjen. Fanôf Rust 1.38 kin dit attribút ek brûkt wurde foar makro's;
  • De mooglikheid tafoege om it attribút "#[global_allocator]" te brûken yn submodules;
  • Funksje tafoege std::elke::type_namme, wêrtroch jo de namme fan it type kinne fine, wat nuttich kin wêze foar debuggen. Bygelyks, tidens it útfieren fan programma kinne jo útfine foar hokker type de funksje waard neamd:

    fn gen_value‹T: Standert>() -› T {
    println!("Inisjalisearjen fan in eksimplaar fan {}", std::elke::type_namme::‹T›());
    Standert :: standert()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" sil printe wurde
    let _: String = gen_value(); # sil "alloc::string::String" printsje
    }

  • Utwreide funksjes fan 'e standertbibleteek:
    • slice ::{concat, ferbine, join} kin no de wearde &[T] neist &T;
    • "*const T" en "*mut T" implementearje no marker :: Unpin;
    • "Arc‹[T]›" en "Rc‹[T]›" implementearje no FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementearje no DoubleEndedIterator.
    • ascii :: EscapeDefault ymplemintearret Clone en Display.
  • In nij diel fan API's is oerbrocht nei de stabile kategory, ynklusyf metoaden dy't binne stabilisearre
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Duration::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Duration::div_f{32|64},
    • Duration::from_secs_f{32|64},
    • Duration::mul_f{32|64},
    • divyzje operaasjes mei rest
      div_euclid en rem_euclid foar alle integer primitiven;

  • Stipe tafoege foar it opjaan fan de opsje "--funksjes" meardere kearen om ferskate funksjes yn te skeakeljen yn 'e frachtpakketbehearder;
  • De gearstaller jout in tredde grade stipe foar doelplatfoarms aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc doelen, armv7-unknown-linux -gnueabi, armv7-ûnbekend-linux-musleabi, hexagon-ûnbekend-linux-musl en riscv32i-ûnbekend-gjin-elf. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen en publikaasje fan offisjele builds.

Boarne: opennet.ru

Add a comment