Rust 1.38 Programming Language Release

gepubliseer stelsel programmeertaal vrystelling Roes 1.38, gestig deur die Mozilla-projek. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied 'n manier om hoë taakparallelisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik.

Rust se outomatiese geheuebestuur spaar die ontwikkelaar daarvan om wysers te manipuleer en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos om toegang tot 'n geheuearea te kry nadat dit vrygestel is, die herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder Cargo, wat jou in staat stel om die biblioteke wat jy nodig het vir die program in een klik te kry. 'n Bewaarplek word ondersteun om biblioteke te huisves kratte.io.

Die belangrikste innovasies:

  • Bygevoeg 'n pyplynsamestellingmodus (pyplyn), waarin die bou van 'n afhanklike kratpakket begin sodra die afhanklikheidsmetadata beskikbaar word, sonder om te wag vir die samestelling daarvan om te voltooi. Wanneer 'n pakket saamgestel word, hoef die afhanklikhede nie volledig saamgestel te word nie, net om die metadata te definieer, wat lyste van tipes, afhanklikhede en uitgevoerde elemente insluit. Metadata word vroeg in die samestellingsproses beskikbaar gestel, dus kan gekoppelde pakkette nou baie vroeër saamgestel word. Wanneer enkele pakkette gebou word, beïnvloed die voorgestelde modus nie werkverrigting nie, maar as die bou pakkette met vertakte afhanklikhede dek, kan die algehele boutyd met 10-20% verminder word;
  • Verseker opsporing van verkeerde gebruik van funksies std::mem::ongeïnisialiseer и std::mem::nul. Byvoorbeeld, std::mem::uninitialized is gerieflik om skikkings vinnig te skep, maar dit mislei die samesteller omdat dit lyk asof dit geïnisialiseer is, maar in werklikheid bly die waarde ongeinitialiseerd. Die mem::uninitialized-funksie is reeds gemerk as afgekeur en dit word aanbeveel om eerder 'n tussentipe te gebruik Miskien Eenheid. Wat mem::zeroed betref, kan hierdie funksie probleme veroorsaak met tipes wat nie nulwaardes kan aanvaar nie.

    Om ongedefinieerde gedrag te help identifiseer, voeg die nuwe vrystelling 'n pluiskontrole by die samesteller wat 'n paar probleme met mem::uninitialized of mem::zeroed opspoor. Byvoorbeeld, jy kry nou 'n fout wanneer jy probeer om mem::uninitialized of mem::zeroed te gebruik met tipes &T en Box‹T›, wat wyserobjekte verteenwoordig wat nie nulwaardes kan aanvaar nie;

  • Die "#[deprecated]"-kenmerk is uitgebrei om kratpakkette as verouderd gemerk te laat en geskeduleer te word vir toekomstige uitvee. Vanaf Rust 1.38 kan hierdie eienskap ook vir makros gebruik word;
  • Bygevoeg die vermoë om die "#[global_allocator]" kenmerk in submodules te gebruik;
  • Kenmerk bygevoeg std::enige::tipenaam, wat jou toelaat om die naam van die tipe uit te vind, wat nuttig kan wees vir ontfoutingsdoeleindes. Byvoorbeeld, tydens die uitvoering van die program kan jy uitvind vir watter tipe die funksie genoem is:

    fn gen_waarde‹T: Verstek>() -› T {
    println!("Inisialiseer 'n instansie van {}", std::enige::tipenaam::‹T›());
    Verstek :: verstek ()
    }

    fn hoof() {
    laat _: i32 = gen_waarde(); # "i32" sal gedruk word
    laat _: String = gen_waarde(); # sal "alloc::string::String" druk
    }

  • Uitgebreide funksies van die standaard biblioteek:
    • slice::{concat, connect, join} kan nou die waarde &[T] bykomend tot &T;
    • "*const T" en "*mut T" implementeer nou merker::Unpin;
    • "Arc‹[T]›" en "Rc‹[T]›" implementeer nou FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementeer nou DoubleEndedIterator.
    • ascii :: EscapeDefault implemente Clone en Display.
  • 'n Nuwe gedeelte van API's is na die stabiele kategorie oorgeplaas, insluitend metodes wat gestabiliseer is
    • ‹*konst T›::cast, ‹*mut T›::cast,
    • Duration::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Tydsduur::div_f{32|64},
    • Duration::from_secs_f{32|64},
    • Tydsduur::mul_f{32|64},
    • afdeling bedrywighede met res
      div_euclid en rem_euclid vir alle heelgetal primitiewe;

  • Bygevoeg ondersteuning vir die spesifikasie van die "--kenmerke" opsie verskeie kere om verskillende kenmerke in die vragpakketbestuurder moontlik te maak;
  • Die samesteller verskaf 'n derde vlak ondersteuning vir teikenplatforms aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-teikens, armv7-onbekende-linux -gnueabi, armv7-onbekende-linux-musleabi, seshoek-onbekende-linux-musl en riscv32i-onbekende-geen-elf. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing en publikasie van amptelike bouwerk.

Bron: opennet.ru

Voeg 'n opmerking