Rust 1.37 Програмчлалын хэлний хувилбар

Нийтэлсэн системийн програмчлалын хэлний хувилбар Зэв 1.37, Mozilla төслөөс үүсгэн байгуулсан. Энэ хэл нь санах ойн аюулгүй байдалд анхаарлаа төвлөрүүлж, санах ойн автомат удирдлагаар хангадаг бөгөөд хог цуглуулагч эсвэл ажиллах цаг ашиглахгүйгээр өндөр даалгаврын параллелизмд хүрэх боломжийг олгодог.

Rust-ийн автомат санах ойн удирдлага нь хөгжүүлэгчийг заагчийг удирдахаас чөлөөлж, санах ойн сул хандалт, хоосон заагчийг задлах, буфер хэтрүүлэх гэх мэт доод түвшний санах ойн ашиглалтаас үүсэх асуудлаас хамгаалдаг. Төслийн хүрээнд номын санг түгээх, угсралтыг баталгаажуулах, хамаарлыг удирдах багц менежерийг боловсруулж байна. Ачааны, програмд ​​шаардлагатай сангуудыг нэг товшилтоор авах боломжийг танд олгоно. Хост номын сангуудад репозиторыг дэмждэг crates.io.

Үндсэн инноваци:

  • Rustc хөрвүүлэгч дээр өгсөн кодын профайлын үр дүнд үндэслэн оновчтой болгох дэмжлэг (PGO, Profile-Guided Optimization),
    програмыг гүйцэтгэх явцад хуримтлагдсан статистикийн дүн шинжилгээнд үндэслэн илүү оновчтой код үүсгэх боломжийг танд олгоно. Профайл үүсгэхийн тулд "-C profile-generate" гэсэн тугийг өгсөн бөгөөд угсрах явцад уг профайлыг ашиглахын тулд "-C profile-use" (эхэндээ програмыг эхний тугаар угсарч, тойрон гүйж, үүсгэсний дараа хийдэг. профиль, энэ нь хоёр дахь тугтай дахин угсарсан);

  • Консолын програмуудыг хурдан туршихад тохиромжтой "cargo run" командыг гүйцэтгэх үед багцад хэд хэдэн гүйцэтгэгдэх файл байгаа тохиолдолд ажиллуулах боломжтой файлыг автоматаар сонгох боломжийг нэмсэн. Гүйцэтгэх өгөгдмөл файлыг багцын параметрүүдтэй [багц] хэсэгт байгаа анхдагч ажиллуулах удирдамжаар тодорхойлдог бөгөөд энэ нь таныг "cargo run"-ыг ажиллуулах бүрт "-bin" тугаар файлын нэрийг тодорхой зааж өгөхөөс зайлсхийх боломжийг олгодог;
  • Өмнө нь нийлүүлсэн "ачаа борлуулагч" команд тусдаа багц. Энэ тушаал нь хараат байдлын локал хуулбартай ажлыг зохион байгуулах боломжийг олгодог - "ачаа нийлүүлэгч" -ийг ажиллуулсны дараа төслийн хамаарлын бүх эх кодыг crates.io-оос орон нутгийн лавлах руу татаж аваад дараа нь хайрцагт хандахгүйгээр ажилд ашиглах боломжтой. io (тушаалыг гүйцэтгэсний дараа уг директорийг бүтээхэд ашиглахын тулд тохиргоог өөрчлөх зөвлөмжийг харуулав). Энэ функцийг хувилбарын хамт нэг архивт бүх хамаарлын багц бүхий rustc хөрвүүлэгчийг хүргэх ажлыг зохион байгуулахад аль хэдийн ашиглагдаж байна;
  • Төрөл бүрийн нэр (жишээ нь, "fn increment_or_zero(x: ByteOption) функцын үндсэн хэсэгт "ByteOption::None => 0" гэж зааж өгч болно), тооцооллын бүтцийг (‹) ашиглан тоолох сонголтуудын холбоосыг үүсгэх боломжтой боллоо. MyType‹.. ››::option => N) эсвэл өөрөө хандалт (c &self блокуудад та “Self::Quarter => 25” гэж зааж өгч болно);
  • Макронд нэргүй тогтмолуудыг үүсгэх чадварыг нэмсэн. "const"-д элементийн нэрийг тодорхойлохын оронд та "_" тэмдэгтийг ашиглан дахин давтагдахгүй танигчийг динамикаар сонгож, макро дахин дуудах үед нэрийн зөрчилдөөнөөс зайлсхийх боломжтой;
  • "#[repr(align(N))" атрибутыг AlignN‹T› бүтцийг зэрэгцүүлэн тодорхойлохтой төстэй синтакс ашиглан, дараа нь AlignN‹MyEnum› ашиглан тоогоор ашиглах чадварыг нэмсэн;
  • API-ийн шинэ хэсгийг BufReader::buffer, BufWriter::buffer, болон зэрэг тогтвортой ангилалд шилжүүлсэн.
    Нүд::from_mut,
    Нүд:: эсийн_зүсмэл,
    DoubleEndedIterator::nth_back,
    Сонголт::xor
    {i,u}{8,16,64,128,size}::урвуу_бит, Боодол::урвуу_бит болон
    зүсмэл::хуулбарлах.

Нэмж дурдахад үүнийг тэмдэглэж болно туршилтын эхлэл төсөл Async-std, энэ нь Rust стандарт номын сангийн асинхрон хувилбарыг санал болгодог (бүх интерфэйсүүд нь асинхронгүй хувилбараар санал болгодог бөгөөд асинхрон / хүлээх синтакстай ашиглахад бэлэн байдаг std номын сангийн порт).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх