Rust 1.57 Rhyddhau Iaith Rhaglennu

Mae rhyddhau'r iaith raglennu system Rust 1.57, a sefydlwyd gan brosiect Mozilla, ond sydd bellach wedi'i ddatblygu dan nawdd y sefydliad dielw annibynnol Rust Foundation, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu'r modd i gyflawni tasgau cyfochrog uchel heb ddefnyddio casglwr sbwriel neu amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).

Mae rheolaeth cof awtomatig Rust yn dileu gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis cyrchu rhanbarth cof ar ôl iddo gael ei ryddhau, dadgyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

Prif arloesiadau:

  • Mae'r defnydd o'r macro “panig!” wedi'i sefydlogi. mewn cyd-destunau a grëwyd wrth lunio, megis datganiadau "const fn". Yn ogystal, yn ogystal â defnyddio "panig!" mae datganiadau const yn caniatáu defnyddio'r macro “sert!”. a rhai APIs llyfrgell safonol eraill. Nid yw sefydlogi yn cwmpasu'r seilwaith fformatio cyfan eto, felly yn ei ffurf bresennol y macro “panig!” dim ond gyda llinynnau statig (panig! ("...")) neu gyda gwerth rhyngosod sengl "&str" wrth amnewid (panic!("{}", a)) a ddylai gael ei gyfyngu i roi "{ }" heb fformatio manylebion a mathau eraill. Yn y dyfodol, bydd cymhwysedd macros mewn cyd-destunau cyson yn cael ei ehangu, ond mae'r galluoedd sefydlog eisoes yn ddigon i gynnal gwiriadau haeru yn y cam llunio: const _: () = haeru!(std::mem::size_of ::() == 64 ); const _: () = haeru!(std::mem::size_of::() == 8);
  • Mae'r rheolwr pecyn Cargo yn caniatáu defnyddio proffiliau gydag enwau mympwyol, heb fod yn gyfyngedig i "dev", "rhyddhau", "prawf" a "mainc". Er enghraifft, er mwyn galluogi optimeiddio yn y cam cysylltu (LTO) dim ond pan fydd y cynulliadau cynnyrch terfynol yn cael eu cynhyrchu, gallwch greu proffil “cynhyrchu” yn Cargo.toml ac ychwanegu'r faner “lto = true” ato. Fodd bynnag, wrth ddiffinio'ch proffiliau eich hun, rhaid i chi nodi proffil sy'n bodoli eisoes i etifeddu gosodiadau diofyn ohono. Mae'r enghraifft isod yn creu proffil “cynhyrchu” sy'n ategu'r proffil “rhyddhau” trwy gynnwys y faner “lto = true”. Mae'r proffil ei hun yn cael ei actifadu trwy alw cargo gyda'r opsiwn “--profile production”, a bydd yr arteffactau cydosod yn cael eu gosod yn y cyfeiriadur “targed / cynhyrchu”. [profile.production] etifeddu = "rhyddhau" lto = gwir
  • Mae'r defnydd o try_reserve ar gyfer y mathau Vec, String, HashMap, HashSet a VecDeque wedi'i sefydlogi, sy'n eich galluogi i gadw lle ymlaen llaw ar gyfer nifer penodol o elfennau o fath penodol er mwyn lleihau amlder gweithrediadau dyrannu cof ac osgoi damweiniau yn ystod llawdriniaeth oherwydd diffyg cof.
  • Caniateir nodi macros gyda braces cyrliog mewn ymadroddion fel "m!{ .. }.method()" ac "m!{ .. }?".
  • Mae gweithrediad y swyddogaethau Ffeil::read_to_end a read_to_string wedi'i optimeiddio.
  • Mae cefnogaeth i fanyleb Unicode wedi'i diweddaru i fersiwn 14.0.
  • Ehangu nifer y swyddogaethau sydd wedi'u marcio "#[must_use]" i roi rhybudd os anwybyddir y gwerth dychwelyd, sy'n helpu i nodi gwallau a achosir gan dybio y bydd swyddogaeth yn newid gwerthoedd yn hytrach na dychwelyd gwerth newydd.
  • Ychwanegwyd backend arbrofol ar gyfer cynhyrchu cod gan ddefnyddio libgccjit.
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • [T; N] :: fel_mut_slice
    • [T; N] :: as_slice
    • casgliadau::TryReserveError
    • HashMap::try_reserve
    • HashSet:: try_reserve
    • Llinyn:: try_reserve
    • Llinyn:: try_reserve_exact
    • Vc:: try_reserve
    • Vc:: try_reserve_exact
    • VecDeque:: try_reserve
    • VecDeque :: try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro :: ar gael
    • Gorchymyn::get_rhaglen
    • Gorchymyn:: get_args
    • Gorchymyn:: get_envs
    • Gorchymyn:: get_current_dir
    • CommandArgs
    • GorchymynEnvs
  • Mae'r briodwedd “const”, sy'n penderfynu a ellir ei ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn cael ei ddefnyddio yn yr awgrym swyddogaeth::unreachable_unchecked.
  • Mae'r drydedd lefel o gefnogaeth wedi'i gweithredu ar gyfer y armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi a armv7a-kmc- solid_asp3-eabihf llwyfannau. Mae'r drydedd lefel yn cynnwys cymorth sylfaenol, ond heb brofi awtomataidd, cyhoeddi adeiladau swyddogol, na gwirio a ellir adeiladu'r cod.

Ffynhonnell: opennet.ru

Ychwanegu sylw