Rust 1.39 Rhyddhau Iaith Rhaglennu

Cyhoeddwyd rhyddhau iaith rhaglennu system Rhwd 1.39, a sefydlwyd gan brosiect Mozilla. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu modd i gyflawni tasgau tebyg iawn heb ddefnyddio casglwr sbwriel neu amser rhedeg.

Mae rheolaeth cof awtomatig Rust yn rhyddhau'r datblygwr rhag trin pwyntydd ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis mynediad cof Γ΄l-rhad ac am ddim, cyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Mae rheolwr pecyn yn cael ei ddatblygu i ddosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau gan y prosiect. TΓ’l, sy'n eich galluogi i gael y llyfrgelloedd sydd eu hangen ar gyfer y rhaglen mewn un clic. Cefnogir ystorfa i gynnal llyfrgelloedd cewyll.io.

Y prif arloesiadau:

  • Wedi'i sefydlogi cystrawen rhaglennu asyncronig newydd yn seiliedig ar y swyddogaeth "async", y bloc symud async { ... }, a'r gweithredwr ".await", sy'n ei gwneud hi'n haws ysgrifennu trinwyr nad ydynt yn rhwystro'r prif lif gorchymyn. O'i gymharu Γ’'r API a gynigiwyd yn flaenorol ar gyfer I/O asyncronaidd, mae lluniadau async/.aros yn syml i'w deall, yn ddarllenadwy iawn, ac yn caniatΓ‘u ichi weithredu rhyngweithiadau asyncronaidd cymhleth gan ddefnyddio technegau rheoli llif cyfarwydd yn seiliedig ar ddolenni, datganiadau amodol, ac eithriadau.

    Mae cystrawen Async-aros yn caniatΓ‘u ichi greu swyddogaethau a all oedi eu gweithrediad, dychwelyd rheolaeth i'r prif edefyn, ac yna ailddechrau gweithredu o'r man lle gwnaethant adael. Er enghraifft, mae angen saib o'r fath wrth brosesu I/O, lle gellir gwneud gwaith arall wrth aros i'r darn nesaf o ddata gyrraedd. Mae swyddogaethau a blociau a ddiffinnir gyda "async fn" a "async move" yn dychwelyd nodwedd Dyfodol, sy'n diffinio cynrychiolaeth cyfrifiant asyncronaidd gohiriedig. Gallwch chi gychwyn cyfrifiad gohiriedig yn uniongyrchol a chael y canlyniad gan ddefnyddio'r gweithredwr β€œ.await”. Ni chaiff unrhyw weithred ei chyflawni na'i rhag-gynllunio hyd nes y gelwir .await, sy'n caniatΓ‘u creu lluniadau nythu cymhleth heb orbenion ychwanegol.

    async fn first_function() -> u32 { .. }
    ...
    gadewch future = first_function();
    ...
    gadewch canlyniad: u32 = dyfodol.await;

  • Wedi'i sefydlogi msgstr "#![feature(bind_by_move_pattern_guards)]", sy'n caniatΓ‘u defnyddio newidynnau gyda'r math rhwymo"sgil-symud" mewn templedi a defnyddio cyfeiriadau at y newidynnau hyn yn adran " if " yr ymadrodd "yn cyd-fynd" . Er enghraifft, caniateir y strwythurau canlynol nawr:

    fn prif () {
    gosod arae: Blwch<[u8; 4]> = Blwch::newydd([1, 2, 3, 4]);

    arae paru {
    niferoedd
    os nums.iter().sum::() == 10

    => {
    gollwng (rhifau);
    }
    _ => anghyraeddadwy!(),
    }
    }

  • Caniateir arwydd priodoleddau wrth ddiffinio paramedrau swyddogaeth, cau, ac awgrymiadau swyddogaeth. Cefnogir priodoleddau crynhoi amodol (cfg, cfg_attr) sy'n rheoli diagnosteg trwy lint (caniatΓ‘u, rhybuddio, gwadu a gwahardd) a phriodoleddau galw macro ategol.

    fn len (
    #[cfg(ffenestri)] sleisen: &[u16], // defnyddiwch y paramedr ar Windows
    #[cfg(nid(ffenestri))] sleisen: &[u8], // defnyddio mewn OS arall
    ) -> defnyddio {
    sleisen.len()
    }

  • Rhybuddion am broblemau a nodwyd wrth wirio benthyca newidynnau (gwiriwr benthyca) gan ddefnyddio'r dechneg NLL (Non-Lexical Lifetimes), wedi ei gyfieithu i mewn i'r categori o wallau angheuol. Gadewch inni gofio bod y system ddilysu sy'n seiliedig ar fecanwaith newydd ar gyfer ystyried oes y newidynnau a fenthycwyd wedi ei gwneud hi'n bosibl nodi rhai problemau nad oedd yr hen god dilysu yn sylwi arnynt. Gan y gallai allbwn gwallau ar gyfer gwiriadau o'r fath effeithio ar gydnawsedd Γ’ chod a oedd yn gweithio'n flaenorol, cyhoeddwyd rhybuddion i ddechrau yn lle gwallau. Mae rhybuddion bellach wedi'u disodli gan wallau wrth redeg yn y modd Rust 2018. Yn y datganiad nesaf, bydd allbwn gwall hefyd yn cael ei weithredu yn y modd Rust 2015, a fydd yn olaf yn cael gwared ar yr hen wiriwr benthyca;
  • Mae'r briodwedd β€œconst”, sy'n pennu'r posibilrwydd o ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn cael ei ddefnyddio ar gyfer y swyddogaethau Vec :: new, String :: new , LinkedList ::new, str ::len, [T] ::len , str::as_bytes,
    abs, wrapping_abs a overflowing_abs;

  • Mae cyfran newydd o APIs wedi'i drosglwyddo i'r categori sefydlog, gan gynnwys dulliau sydd wedi'u sefydlogi
    Pin::into_inner, Instant::wirio_hyd_ers ac Instant::saturating_duration_since;

  • Bellach mae gan y rheolwr pecyn cargo y gallu i ddefnyddio'r estyniad β€œ.toml” ar gyfer ffeiliau ffurfweddu. Ychwanegwyd cefnogaeth ragarweiniol ar gyfer adeiladu'r llyfrgell safonol yn uniongyrchol o Cargo. Ychwanegwyd y faner "--workspace", gan ddisodli'r faner ddadleuol "--all". Mae maes newydd wedi'i ychwanegu at y metadata "cyhoeddiβ€œ, sy'n eich galluogi i gyhoeddi dibyniaethau trwy nodi tag git a rhif fersiwn. Ychwanegwyd opsiwn prawf "-Ztimings" i gynhyrchu adroddiad HTML o amseroedd gweithredu gwahanol gamau llunio.
  • Yn y casglwr rustc, mae negeseuon diagnostig yn cynnwys tocio cynffonnau cod nad yw'n ffitio i'r derfynell. Wedi darparu trydydd lefel o gefnogaeth ar gyfer llwyfannau targed
    i686-anhysbys-uefi a sparc64-anhysbys-openbsd. Mae'r drydedd lefel yn cynnwys cymorth sylfaenol, ond heb brofi awtomataidd a chyhoeddi adeiladau swyddogol.

Ffynhonnell: opennet.ru

Ychwanegu sylw