Rhyddhau iaith raglennu Rust 1.59 gyda chefnogaeth ar gyfer mewnosodiadau cydosod

Mae rhyddhau iaith raglennu pwrpas cyffredinol Rust 1.59, a sefydlwyd gan brosiect Mozilla, ond sydd bellach wedi'i datblygu dan nawdd y sefydliad dielw annibynnol Rust Foundation, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof ac yn darparu'r modd i gyflawni gwaith tebyg iawn tra'n osgoi defnyddio casglwr sbwriel ac amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).

Mae dulliau trin cof Rust yn arbed y datblygwr rhag gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n codi oherwydd trin cof lefel isel, megis cyrchu man cof ar ôl iddo gael ei ryddhau, dadgyfeirio awgrymiadau nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, darparu adeiladu a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

Darperir diogelwch cof yn Rust ar amser casglu trwy wirio cyfeiriadau, cadw golwg ar berchnogaeth gwrthrychau, cadw golwg ar oes gwrthrychau (scopes), ac asesu cywirdeb mynediad cof wrth weithredu cod. Mae Rust hefyd yn darparu amddiffyniad rhag gorlifiadau cyfanrif, yn gofyn am ymgychwyn gorfodol o werthoedd amrywiol cyn ei ddefnyddio, yn trin gwallau yn well yn y llyfrgell safonol, yn cymhwyso'r cysyniad o gyfeiriadau a newidynnau digyfnewid yn ddiofyn, yn cynnig teipio statig cryf i leihau gwallau rhesymegol.

Prif arloesiadau:

  • Mae'n bosibl defnyddio mewnosodiadau iaith cydosod, y mae galw amdanynt mewn cymwysiadau sydd angen rheoli gweithrediad ar lefel isel neu allu defnyddio cyfarwyddiadau peiriant arbenigol. Ychwanegir mewnosodiadau cynulliad gan ddefnyddio macros "asm!" a "global_asm!" defnyddio cystrawen fformatio llinynnol ar gyfer enwi cofrestri tebyg i'r hyn a ddefnyddir ar gyfer amnewidion llinynnol yn Rust. Mae'r casglwr yn cefnogi cyfarwyddiadau cydosod ar gyfer pensaernïaeth x86, x86-64, ARM, AArch64 a RISC-V. Enghraifft mewnosod: defnyddio std::arch::asm; // Lluosi x â 6 gan ddefnyddio shifftiau ac ychwanegu let mut x: u64 = 4; anniogel { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "ychwanegu {x}, {tmp}", x = inout(reg ) x, tmp = allan(reg) _, ); } assert_eq!(x, 4 * 6);
  • Cefnogaeth ychwanegol ar gyfer aseiniadau wedi'u distrywio (cyfochrog), lle mae sawl nodwedd, tafell neu strwythur wedi'u nodi ar ochr chwith y mynegiant. Er enghraifft: gadewch (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Strwythur { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Mae'r gallu i nodi gwerthoedd rhagosodedig ar gyfer const generics wedi'i ddarparu: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn newydd(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Mae'r rheolwr pecyn Cargo yn darparu rhybuddion ynghylch y defnydd o strwythurau annilys mewn dibyniaethau sy'n cael eu prosesu oherwydd gwallau yn y casglwr (er enghraifft, oherwydd gwall, caniatawyd benthyca meysydd o strwythurau wedi'u pacio mewn blociau diogel). Ni fydd lluniadau o'r fath yn cael eu cefnogi mwyach mewn fersiwn o Rust yn y dyfodol.
  • Mae gan gargo a rustc allu adeiledig i gynhyrchu ffeiliau gweithredadwy sydd wedi'u tynnu o ddata dadfygio (strip = "debuginfo") a symbolau (strip = "symbolau"), heb fod angen galw cyfleustodau ar wahân. Mae'r gosodiad glanhau yn cael ei weithredu trwy'r paramedr “strip” yn Cargo.toml: [profile.release] strip = “debuginfo”, “symbols”
  • Mae crynhoad cynyddrannol wedi'i analluogi yn ddiofyn. Dywedir mai'r rheswm yw ateb dros dro ar gyfer nam yn y casglwr sy'n arwain at ddamweiniau a gwallau dad-gyfeiriannu. Mae atgyweiriad nam eisoes wedi'i baratoi a bydd yn cael ei gynnwys yn y datganiad nesaf. I ddychwelyd crynhoad cynyddrannol, gallwch ddefnyddio'r newidyn amgylchedd RUSTC_FORCE_INCREMENTAL=1.
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • std::thread::ar gael_parallelism
    • Canlyniad::copi
    • Canlyniad::clonio
    • bwa::asm!
    • bwa::global_asm!
    • ops ::ControlFlow::is_break
    • ops ::ControlFlow::yn_continue
    • TryFrom am u8
    • torgoch :: TryFromCharError (Clôn, Dadfygio, Arddangos, PartialEq, Copi, Eq, Gwall)
    • iter::zip
    • NonZeroU8::yw_pŵer_o_ddau
    • NonZeroU16::yw_pŵer_o_ddau
    • NonZeroU32::yw_pŵer_o_ddau
    • NonZeroU64::yw_pŵer_o_ddau
    • NonZeroU128::yw_pŵer_o_ddau
    • DoubleEndedIterator ar gyfer strwythur ToLowercase
    • DoubleEndedIterator ar gyfer strwythur ToUppercase
    • TryFrom <&mut[T]> ar gyfer [T; N]
    • Strwythur UnwindSafe for the Once
    • RefUnwindSafe am Unwaith
    • swyddogaethau cymorth neon armv8 wedi'u hymgorffori yn y casglwr ar gyfer aarch64
  • Defnyddir y nodwedd “const”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn y swyddogaethau:
    • mem::EfallaiUninit::as_ptr
    • mem::EfallaiUninit::sume_init
    • mem::EfallaiUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_heb ei wirio

Ffynhonnell: opennet.ru

Ychwanegu sylw