Rust 1.38 programmēšanas valodas izlaidums

publicēts sistēmas programmēšanas valodas izlaidums 1.38. rūsa, ko dibināja Mozilla projekts. Valoda koncentrējas uz atmiņas drošību, nodrošina automātisku atmiņas pārvaldību un nodrošina iespēju sasniegt augstu uzdevumu paralēlismu, neizmantojot atkritumu savācēju vai izpildlaiku.

Rust automātiskā atmiņas pārvaldība atbrīvo izstrādātāju no manipulācijām ar rādītāju un aizsargā pret problēmām, kas rodas no zema līmeņa atmiņas manipulācijām, piemēram, pēc brīvas piekļuves atmiņai, nulles rādītāja atsauču, bufera pārtēriņu un tamlīdzīgi. Tiek izstrādāts pakotņu pārvaldnieks, lai izplatītu bibliotēkas, nodrošinātu montāžu un pārvaldītu projekta atkarības. krava, kas ļauj ar vienu klikšķi iegūt programmai nepieciešamās bibliotēkas. Repozitorijs tiek atbalstīts bibliotēku mitināšanai crates.io.

Galvenais jauninājumiem:

  • Pievienots konveijera kompilācijas režīms (konveijera), kurā atkarīgās kastes pakotnes izveide sākas, tiklīdz kļūst pieejami atkarības metadati, negaidot to kompilācijas pabeigšanu. Kompilējot pakotni, jums nav jāsaliek visas atkarības, jums vienkārši jādefinē metadati, kas ietver veidu, atkarību un eksportēto vienumu sarakstus. Metadati ir pieejami kompilācijas procesa sākumā, tāpēc saistītās pakotnes tagad var apkopot daudz agrāk. Veidojot atsevišķas pakotnes, piedāvātais režīms neietekmē veiktspēju, bet, ja būvējums aptver pakotnes ar sazarotām atkarībām, kopējo izveides laiku var samazināt par 10-20%;
  • Nodrošina nepareizas funkciju izmantošanas atklāšanu std::mem::uninicializēts и std::mem::nulle. Piemēram, std::mem::unitialized ir ērti, lai ātri izveidotu masīvus, taču tas maldina kompilatoru, jo šķiet, ka tas ir inicializēts, taču patiesībā vērtība paliek neinicializēta. Funkcija mem::uninitialized jau ir atzīmēta kā novecojusi, un tā vietā ieteicams izmantot starpposma veidu VarbūtVienība. Kas attiecas uz mem::zeroed, šī funkcija var radīt problēmas ar tipiem, kas nevar pieņemt nulles vērtības.

    Lai palīdzētu identificēt nedefinētu uzvedību, jaunajā laidienā kompilatoram ir pievienota pūku pārbaude, kas atklāj dažas problēmas ar mem::unitialized vai mem::zeroed. Piemēram, tagad tiek parādīta kļūda, mēģinot izmantot mem::unitialized vai mem::zeroed ar tipiem &T un Box‹T›, kas attēlo rādītāja objektus, kas nevar pieņemt nulles vērtības;

  • Atribūts “#[novecojis]” ir paplašināts, lai ļautu kastes pakotnes atzīmēt kā novecojušas un ieplānot turpmākai dzēšanai. Sākot ar Rust 1.38, šo atribūtu var izmantot arī makro;
  • Pievienota iespēja apakšmoduļos izmantot atribūtu “#[global_allocator]”;
  • Pievienota funkcija std::jebkurš::tipa_nosaukums, kas ļauj uzzināt tipa nosaukumu, kas var noderēt atkļūdošanas nolūkos. Piemēram, programmas izpildes laikā jūs varat uzzināt, kāda veida funkcija tika izsaukta:

    fn gen_value‹T: Noklusējums>() -› T {
    println!("Inicializē {} gadījumu", std::any::type_name::‹T›());
    Noklusējums::default()
    }

    fn galvenais() {
    let _: i32 = gen_value(); # "i32" tiks izdrukāts
    let _: String = gen_value(); # izdrukās "alloc::string::String"
    }

  • Standarta bibliotēkas paplašinātās funkcijas:
    • slice::{concat, connect, join} tagad var izmantot vērtību &[T] papildus &T;
    • "*const T" un "*mut T" tagad ievieš marķieri::Atspraust;
    • "Arc‹[T]›" un "Rc‹[T]›" tagad ievieš FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} tagad ievieš DoubleEndedIterator.
    • ascii::EscapeDefault ievieš klonēšanu un attēlošanu.
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp metodes, kas ir stabilizētas
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Ilgums::as_secs_f{32|64},
    • Ilgums::div_duration_f{32|64},
    • Ilgums::div_f{32|64},
    • Ilgums::from_secs_f{32|64},
    • Ilgums::mul_f{32|64},
    • sadalīšanas operācijas ar atlikumu
      div_euclid un rem_euclid visiem veselu skaitļu primitīviem;

  • Pievienots atbalsts opcijas “--features” norādīšanai vairākas reizes, lai kravas paku pārvaldniekā iespējotu dažādas funkcijas;
  • Kompilators nodrošina trešo līmenis atbalsts mērķa platformām aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets,-mlinuxvc -gnueabi, armv7-unknown-linux-musleabi, sešstūris-unknown-linux-musl un riscv7i-unknown-none-elf. Trešais līmenis ietver pamata atbalstu, taču bez automatizētas testēšanas un oficiālo būvējumu publicēšanas.

Avots: opennet.ru

Pievieno komentāru