Rust 1.38 Rilaxx tal-Lingwa ta' Programmazzjoni

ippubblikat rilaxx tal-lingwa tal-ipprogrammar tas-sistema Sadid 1.38, imwaqqfa mill-proġett Mozilla. Il-lingwa tiffoka fuq is-sikurezza tal-memorja, tipprovdi ġestjoni awtomatika tal-memorja, u tipprovdi mezz biex jinkiseb paralleliżmu għoli tal-kompitu mingħajr ma tuża garbage collector jew runtime.

Il-ġestjoni awtomatika tal-memorja tas-sadid teħles lill-iżviluppatur mill-manipulazzjoni tal-pointer u tipproteġi kontra problemi li jirriżultaw minn manipulazzjoni tal-memorja ta 'livell baxx, bħal aċċessi għall-memorja wara ħielsa, dereferences null tal-pointer, buffer overruns, u affarijiet simili. Qed jiġi żviluppat maniġer tal-pakketti biex iqassam il-libreriji, jiżgura l-assemblaġġ u jamministra d-dipendenzi mill-proġett. merkanzija, li jippermettilek tikseb il-libreriji meħtieġa għall-programm fi klikk waħda. Repożitorju huwa appoġġjat biex jospita libreriji crates.io.

Il-prinċipali innovazzjonijiet:

  • Miżjud mod ta' kumpilazzjoni pipelined (pipelined), li fih il-bini ta' pakkett ta' ċestun dipendenti jibda malli l-metadejta tad-dipendenza ssir disponibbli, mingħajr ma tistenna li l-kumpilazzjoni tagħha titlesta. Meta tikkompila pakkett, id-dipendenzi m'għandhomx għalfejn jiġu mmuntati bis-sħiħ, tiddefinixxi biss il-metadata, li tinkludi listi ta 'tipi, dipendenzi, u elementi esportati. Il-metadejta ssir disponibbli kmieni fil-proċess tal-kumpilazzjoni, għalhekk pakketti konnessi issa jistgħu jiġu kkompilati ħafna qabel. Meta tibni pakketti singoli, il-mod propost ma jaffettwax il-prestazzjoni, iżda jekk il-bini jkopri pakketti b'dipendenzi ramifikati, il-ħin ġenerali tal-bini jista 'jitnaqqas b'10-20%;
  • Jiżgura l-iskoperta ta 'użu ħażin tal-funzjonijiet std::mem::uninitialized и std::mem::zeroed. Pereżempju, std::mem::uninitialized huwa konvenjenti għall-ħolqien ta 'matriċi malajr, iżda jiżgwida lill-kompilatur minħabba li jidher li huwa inizjalizzat, iżda fir-realtà l-valur jibqa' mhux inizjalizzat. Il-funzjoni mem::uninitialized hija diġà mmarkata bħala deprecated u huwa rakkomandat li tuża tip intermedju minflok Forsi Unità. Fir-rigward ta' mem::zeroed, din il-funzjoni tista' tikkawża problemi b'tipi li ma jistgħux jaċċettaw valuri żero.

    Biex tgħin tidentifika l-imġieba mhux definita, ir-rilaxx il-ġdid iżid lint check mal-kompilatur li jiskopri xi problemi b'mem::uninitialized jew mem::zeroed. Pereżempju, issa ikollok żball meta tipprova tuża mem::uninitialized jew mem::zeroed bit-tipi &T u Box‹T›, li jirrappreżentaw oġġetti pointer li ma jistgħux jaċċettaw valuri nulli;

  • L-attribut "#[deprecated]" ġie estiż biex jippermetti li l-pakketti tal-kaxex jiġu mmarkati bħala skaduti u skedati għal tħassir futur. Minn Rust 1.38, dan l-attribut jista 'jintuża wkoll għal macros;
  • Miżjud il-ħila li tuża l-attribut "#[global_allocator]" fis-submoduli;
  • Funzjoni miżjuda std::kull::tip_isem, li jippermettilek issir taf l-isem tat-tip, li jista 'jkun utli għal skopijiet ta' debugging. Pereżempju, waqt l-eżekuzzjoni tal-programm tista 'ssir taf għal liema tip issejjaħ il-funzjoni:

    fn gen_value‹T: Default>() -› T {
    println!("Inizjalizzazzjoni ta' istanza ta' {}", std::any::type_name::‹T›());
    Default::default ()
    }

    fn main() {
    let _: i32 = gen_value (); # "i32" se jiġi stampat
    let _: String = gen_value (); # se tipprintja "alloc::string::String"
    }

  • Funzjonijiet estiżi tal-librerija standard:
    • slice::{concat, connect, join} issa jistgħu jieħdu l-valur &[T] minbarra &T;
    • "*const T" u "*mut T" issa jimplimentaw marker::Unpin;
    • "Arc‹[T]›" u "Rc‹[T]›" issa jimplimentaw FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} issa timplimenta DoubleEndedIterator.
    • ascii::EscapeDefault jimplimenta Klonu u Display.
  • Porzjon ġdid ta 'APIs ġie trasferit għall-kategorija stabbli, inklużi metodi li ġew stabbilizzati
    • ‹*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},
    • operazzjonijiet ta' diviżjoni bil-bqija
      div_euclid u rem_euclid għall-primittivi kollha tan-numri;

  • Appoġġ miżjud biex tiġi speċifikata l-għażla "--features" diversi drabi biex tippermetti karatteristiċi differenti fil-maniġer tal-pakkett tal-merkanzija;
  • Il-kompilatur jipprovdi terz livell appoġġ għall-pjattaformi fil-mira aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc un magħruf, armvuxc-msvuxc -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl u riscv7i-unknown-none-elf. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat u pubblikazzjoni ta 'bini uffiċjali.

Sors: opennet.ru

Żid kumment