Rust 1.40 Варақаи забони барномасозӣ

нашр шудааст нашри забони барномасозии система Занги 1.40, аз ҷониби лоиҳаи Mozilla таъсис дода шудааст. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва асбобҳоро барои ноил шудан ба параллелизми вазифаҳои баланд бидуни истифодаи коллектори партовҳо ва runtime.

Идоракунии хотираи автоматии Rust таҳиякунандаро аз коркарди нишондиҳандаҳо озод мекунад ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасии пас аз хотираи хотира, истинодҳои нул нишондодҳо, изофаи буферӣ ва монанди инҳо муҳофизат мекунад. Менеҷери бастаҳо барои паҳн кардани китобхонаҳо, таъмини ҷамъбаст ва идоракунии вобастагӣ аз ҷониби лоиҳа таҳия карда мешавад. бор, ба шумо имкон медиҳад, ки китобхонаҳои барои барнома лозимиро бо як клик дастрас кунед. Барои китобхонаҳои мизбон як анбор дастгирӣ карда мешавад crates.io.

асосӣ навовариҳо:

  • Имконияти қайд кардани сохторҳо (сохтор) ва рӯйхатҳо (enum бо блоки Variant) бо истифода аз атрибут " илова карда шуд.#[на_мукаммал]", ки Ин имкон медиҳад, дар оянда ба сохторҳо ва рӯйхатҳои эълоншуда майдонҳо ва имконоти нав илова кунед. Масалан, таҳиягарони модулҳое, ки сохторҳои дорои майдонҳои ба таври оммавӣ эълоншуда доранд, метавонанд "#[non_exhaustive]" -ро барои қайд кардани сохторҳое истифода баранд, ки метавонанд дар оянда майдонҳои нав илова карда шаванд. То ба ҳол, дар чунин вазъият, таҳиякунанда маҷбур буд, ки байни эълон кардани майдонҳои хусусӣ ва ҳатмӣ ба рӯйхати тағирнопазири майдонҳо интихоб кунад. Аттрибути нав ин маҳдудиятро нест мекунад ва ба шумо имкон медиҳад, ки дар оянда майдонҳои навро бе хатари вайрон кардани коди берунии қаблан тартибдодашуда илова кунед. Дар бастаҳои қуттиҳо, ҳангоми мувофиқат кардани имконоти дар бахши "мутобиқшавӣ" таърифи возеҳи ниқоби "_ => {...}" лозим аст, ки майдонҳои эҳтимолии ояндаро фаро мегирад, вагарна ҳангоми илова кардани майдонҳои нав хатогӣ нишон дода мешавад.
  • Илова карда шуд қобилияти даъват кардани макросҳои мурофиавӣ mac!() дар контексти навъи. Масалан, шумо ҳоло метавонед "type Foo = expand_to_type!(bar);" нависед, агар "expand_to_type" макроси мурофиавӣ бошад.
  • Дар блокҳои "extern { ... }" илова кард қобилияти истифодаи макросҳои мурофиавӣ ва атрибутӣ, аз ҷумла макросҳои “bang!()”, масалан:

    macro_reges! make_item { ($ном:идент) => { fn $ном(); } }

    берунӣ {
    сохтани_маълумот!(алфа);
    сохтани_мансаб!(бета);
    }

    берунии "C" {
    #[макроси_иденти ман] fn foo();
    }

  • Дар макросҳо ба амал бароварда шуд қобилияти тавлиди унсурҳои "macro_rules!". Таҳияи "macro_rules!" ҳам дар макросҳои ба функсия монанд («mac!()») ва ҳам дар макросҳо дар шакли атрибутҳо («#[mac]») имконпазир аст.
  • Дар элементи харитасозии $m:meta илова кард дастгирии арзишҳои рақамии худсарона ("[TOKEN_STREAM]", "{TOKEN_STREAM}" ва "(TOKEN_STREAM)"), масалан:

    macro_reges! accept_meta {($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    қабул_мета!( ман :: роҳ { a b c } );

  • Дар реҷаи Rust 2015, баромади хатогӣ барои мушкилоте, ки ҳангоми тафтиши қарзгирии тағирёбандаҳо (тафтишгари қарз) бо истифода аз техникаи NLL (Lifetimes Non-Lexical) муайян карда мешавад, фаъол карда мешавад. Пештар ҳангоми кор дар реҷаи Rust 2018 огоҳиҳо бо хатогиҳо иваз карда мешуданд.
    Пас аз он ки тағирот ба ҳолати Rust 2015 тамдид карда шуд, таҳиягарон тавонистанд ниҳоят нест кардан аз чеки қарзи кӯҳна.

    Ёдовар мешавем, ки системаи санҷиш дар асоси механизми нави ба ҳисоб гирифтани мӯҳлати истифодабарии тағирёбандаҳои қарзӣ имкон дод, ки баъзе мушкилоте, ки аз ҷониби коди санҷиши кӯҳна нодида гирифта шудаанд, муайян карда шаванд. Азбаски баромади хатогӣ барои чунин санҷишҳо метавонад ба мутобиқат бо коди қаблан коркунанда таъсир расонад, дар аввал ба ҷои хатогиҳо огоҳиҳо дода мешуданд.

  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, барои функсияи is_power_of_two (барои ададҳои бутуни беимзо) истифода мешавад.
  • Қисми нави API ба категорияи устувор кӯчонида шуд, аз ҷумла todo!() макро ва slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, усулҳо устувор карда шуданд.
    Опсия::as_deref, Опсия::as_deref_mut, Опсия::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32 f64}::from_be_bytes, {f32,f64}::from_le_bytes ва {f32,f64}::from_ne_bytes.

  • Дар бастаи мудири бор
    ба амал бароварда шуд огоҳиҳои компилятори кэшкунӣ дар диск. Опсияи "метамаълумоти бор" ба фармони "метамаълумоти бор" илова карда шуд--филтр-платформа" барои нишон додани танҳо бастаҳое, ки ба платформаи ҳадафи муайяншуда дар сутуни ҳалли вобастагӣ алоқаманданд. Барои муайян кардани версияҳои дурусти TLS опсияи конфигуратсияи http.ssl-version илова карда шуд.
    Имконияти нашри қисмат илова карда шуд "вобастагии дев" бе нишон додани калиди "версия".

  • Тартибдиҳандаи rustc дастгирии сатҳи сеюмро барои платформаҳои мавриди ҳадаф thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ва mips64el-unknown-linux-muslabi64 таъмин мекунад. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматӣ ва нашри сохторҳои расмӣ.

Манбаъ: opennet.ru

Илова Эзоҳ