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

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

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

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

  • Шинж чанар тогтворжсон ирээдүйн, энэ нь async / .await блокуудыг ашиглах үед үнэлгээ нь хараахан дуусаагүй байж болзошгүй утгыг илэрхийлдэг. Ирээдүйг ашиглан тодорхойлсон асинхрон утгууд нь тодорхой утгын тооцоог дуусгахыг хүлээхийн зэрэгцээ хэлхээнд ашигтай ажлыг үргэлжлүүлэх боломжийг олгодог;
  • Номын санг тогтворжуулсан хуваарилах, санах ойд хуваарилагдсан утгыг удирдах ухаалаг заагч болон цуглуулгуудыг хангадаг. std дахь санах ойн хуваарилалт одоо төрлийг ашигладаг VEC, тэдгээр нь alloc-аас дахин экспортлогдсон. Alloc-г тусад нь ашиглах нь std-тай холбоогүй программуудад (“#![no_std]”), түүнчлэн std-гүй ижил төстэй программуудад ашиглахад зориулагдсан номын сангуудад утга учиртай болно;
  • Утгыг зөв эхлүүлэхийн тулд шалгахыг тойрч гарах санал болгосон завсрын төрөл Магадгүй Нэгж, үүнийг mem:: эхлүүлээгүй функцийн оронд илүү аюулгүй хувилбар болгон ашиглаж болно. mem:: uninitialized функц нь массивуудыг хурдан үүсгэхэд тохиромжтой боловч хөрвүүлэгчийг төөрөгдүүлдэг, учир нь энэ нь эхлүүлсэн мэт боловч бодит байдал дээр утга нь эхлээгүй хэвээр байна. MaybeUninit нь хөрвүүлэгчид утгыг эхлүүлээгүй гэдгийг тодорхой зааж өгөх, үүнтэй холбоотой тодорхойгүй үйлдлийг харгалзан үзэх, мөн "магадгүй_t:" болон алхам алхмаар эхлүүлэх замаар программ дахь шалгалтыг зохион байгуулж, дууссаныг тэмдэглэх боломжийг олгодог. ".assume_init()" дуудлагыг ашиглан. MaybeUninit гарч ирснээр mem:: uninitialized функц нь хуучирсан тул ашиглахыг зөвлөдөггүй;
  • Зээлж авсан хувьсагчдын ашиглалтын хугацааг бүртгэх системийг өргөжүүлсэн NLL (Нон-Lexical Lifetimes) техникийг Rust 2015 хэл дээр тогтворжуулсан (эхэндээ NLL-ийг зөвхөн Rust 2018 дэмждэг байсан). NLL нь лексикийн түвшинд насан туршдаа ажиллахын оронд гүйцэтгэлийн урсгалын график дахь заагчийн багцын түвшинд үүнийг хийдэг. Энэ арга нь хувьсагчийн зээлсэн эсэхийг шалгах чанарыг нэмэгдүүлэх боломжийг олгодог (зээлдэгч шалгагч) мөн зарим төрлийн зөв кодыг ашиглах боломжийг олгодог бөгөөд үүнийг ашигласнаар өмнө нь алдаа гардаг. Шинэ зан үйл нь дибаг хийхийг илүү хялбар болгодог;
  • Ассоциатив массивуудын шинэ хэрэгжилтийг оруулсан HashMap, бүтцийн хэрэглээнд үндэслэн Швейцарийн хүснэгт (автоматаар ачаалагдсан hashbrown :: HashMap, өөрөөр заагаагүй бол SipHash 1-3 дээр суурилсан std::HashMap гэх мэт). Програм хангамжийн интерфейс ижил хэвээр байгаа бөгөөд хөгжүүлэгчийн хувьд мэдэгдэхүйц ялгаа нь гүйцэтгэлийг нэмэгдүүлэх, санах ойн хэрэглээг багасгахад хүргэдэг;
  • Багц менежерийн ачаанд нэмсэн "--офлайн" сонголт бөгөөд энэ нь сүлжээнд холбогдохгүйгээр ажиллах боломжийг олгодог бөгөөд хамаарлыг суулгахдаа зөвхөн дотоод системд хадгалагдсан багцуудыг ашигладаг. Хэрэв хамаарал нь локал кэшэд байхгүй бол алдаа гарна. Офлайн болохоосоо өмнө орон нутгийн кэшэд хамаарлыг урьдчилан ачаалахын тулд та "ачаа татах" командыг ашиглаж болно;
  • Макрог "dbg!" гэж нэрлэх чадварыг хэрэгжүүлсэн. хэд хэдэн аргументыг зааж өгөх;
  • Тогтмолуудын оронд ямар ч контекст ашиглах боломжийг тодорхойлдог "const" шинж чанарыг аргуудад ашигладаг.
    Layout::from_size_align_checked-гүй,
    mem :: needs_drop,
    NonNull :: унжсан болон
    Nonull::cast;

  • API-ийн шинэ хэсгийг тогтворжуулсан аргуудыг багтаасан тогтвортой ангилалд шилжүүлсэн
    даалгавар::Вэйкер, даалгавар::Санал асуулга,
    VecDeque :: зүүн тийш эргүүлэх, VecDeque :: баруун тийш эргүүлэх,
    Унших::унших_вектор, Write::бичих_вектор,
    Давтагч::хуулсан,
    BorrowMut (мөртүүдийн хувьд) болон str::as_mut_ptr.

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

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