Rust 1.38 Programming Language Version

pibliye lage langaj pwogramasyon sistèm lan Rouye 1.38, ki te fonde pa pwojè Mozilla. Lang la konsantre sou sekirite memwa, bay jesyon memwa otomatik, epi li bay yon mwayen pou reyalize paralèl travay segondè san yo pa itilize yon pèseptè fatra oswa ègzekutabl.

Jesyon otomatik memwa Rust la libere pwomotè a soti nan manipilasyon konsèy ak pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè memwa apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Yon manadjè pake ap devlope pou distribye bibliyotèk, asire asanble ak jere depandans pa pwojè a. Chaj, ki pèmèt ou jwenn bibliyotèk ki nesesè pou pwogram nan nan yon sèl klike sou. Yon depo sipòte pou òganize bibliyotèk kès.io.

Prensipal la inovasyon:

  • Te ajoute yon mòd konpilasyon pipelined (pipelined), nan ki bati yon pake kès depandan kòmanse le pli vit ke metadata depandans yo vin disponib, san yo pa tann pou konpilasyon li yo fini. Lè w ap konpile yon pake, depandans yo pa bezwen konplètman rasanble, jis defini metadata yo, ki gen ladan lis kalite, depandans, ak eleman ekspòte. Metadata yo disponib byen bonè nan pwosesis konpilasyon an, kidonk pakè lye yo kapab kounye a konpile pi bonè. Lè bati pakè sèl, mòd yo pwopoze a pa afekte pèfòmans, men si bati a kouvri pakè ak depandans branche, tan an jeneral bati ka redwi pa 10-20%;
  • Asire deteksyon nan itilizasyon kòrèk nan fonksyon std::mem::uninitialized и std::mem::zewo. Pa egzanp, std::mem::uninitialized se pratik pou kreye byen vit etalaj, men li twonpe konpilatè a paske li parèt inisyalize, men an reyalite valè a rete inisyalize. Fonksyon mem::uninitialized deja make kòm obsolèt epi li rekòmande pou itilize yon kalite entèmedyè olye. Petèt Unit. Kòm pou mem::zeroed, fonksyon sa a ka lakòz pwoblèm ak kalite ki pa ka aksepte valè zewo.

    Pou ede idantifye konpòtman ki pa defini, nouvo lage a ajoute yon chèk lint nan konpilatè a ki detekte kèk pwoblèm ak mem::uninitialized oswa mem::zeroed. Pou egzanp, kounye a ou jwenn yon erè lè w ap eseye sèvi ak mem::uninitialized oswa mem::zeroed ak kalite &T ak Box‹T›, ki reprezante objè pointeur ki pa ka aksepte valè nil;

  • Yo te elaji atribi "#[deprecated]" a pou pèmèt pakè kès yo make demode ak pwograme pou efase nan lavni. Kòm nan Rust 1.38, atribi sa a ka itilize tou pou makro;
  • Te ajoute kapasite nan sèvi ak "#[global_allocator]" atribi nan submodules;
  • Te ajoute fonksyon std::any::type_name, ki pèmèt ou jwenn non an nan kalite a, ki ka itil pou rezon debogaj. Pou egzanp, pandan ekzekisyon pwogram ou ka chèche konnen pou ki kalite fonksyon an te rele:

    fn gen_value‹T: Default>() -› T {
    println!("Inisyalize yon egzanp {}", std::any::type_name::‹T›());
    Default::default()
    }

    fn main() {
    kite _: i32 = gen_value(); # "i32" pral enprime
    kite _: String = gen_value(); # ap enprime "alloc::string::String"
    }

  • Fonksyon pwolonje nan bibliyotèk estanda a:
    • slice::{concat, connect, join} kapab kounye a pran valè &[T] anplis &T;
    • "*const T" ak "*mut T" kounye a aplike marker::Unpin;
    • "Arc‹[T]›" ak "Rc‹[T]›" kounye a aplike FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} kounye a aplike DoubleEndedIterator.
    • ascii::EscapeDefault aplike klonaj ak ekspozisyon.
  • Yon nouvo pati nan API yo te transfere nan kategori ki estab, ki gen ladan metòd ki te estabilize
    • ‹*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},
    • operasyon divizyon ak rès
      div_euclid ak rem_euclid pou tout primitif antye;

  • Te ajoute sipò pou presize opsyon "--karakteristik" plizyè fwa pou pèmèt diferan karakteristik nan manadjè pake kago a;
  • Konpilateur a bay yon twazyèm nivo sipò pou platfòm sib aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-unknown, armsvuxc-unknown -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl ak riscv7i-unknown-none-elf. Twazyèm nivo a enplike sipò debaz, men san tès otomatik ak piblikasyon bati ofisyèl yo.

Sous: opennet.ru

Add nouvo kòmantè