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

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

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

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

  • Ачааны багц менежер нь crates.io нийтийн бүртгэлтэй зэрэгцэн орших өөр багц бүртгэлтэй ажиллах хэрэгслүүдийг нэмсэн. Жишээлбэл, өмчлөлийн програм хөгжүүлэгчид одоо Cargo.toml-д хамаарлыг жагсаахдаа ашиглаж болох хувийн бүртгэлээ ашиглаж, бүтээгдэхүүндээ crates.io-тэй төстэй хувилбарын загварыг ашиглахаас гадна хоёр хайрцагт хамаарлыг лавлах боломжтой болсон. io болон өөрийн бүртгэлд.

    .cargo/config-д гадаад бүртгэл нэмэхийн тулд ($HOME эсвэл багцын лавлахад байрладаг)
    өгсөн "[бүртгэлүүд]" хэсэгт байгаа бөгөөд гадаад бүртгэлийг ашиглахын тулд Cargo.toml дахь хамаарал бүрийн тайлбарт "бүртгэл" гэсэн сонголт гарч ирсэн. Нэмэлт бүртгэлд холбогдохын тулд баталгаажуулалтын токеныг ~/.cargo/credentials файлд байрлуулаад тушаалыг ажиллуулна уу.
    "cargo login --registry=my-registry" болон багцыг нийтлэх -
    "cargo publish -registry=my-register";

  • “?” Операторыг ашиглахад бүрэн дэмжлэг нэмсэн. туршилтуудад сургаал, танд баримт бичгийн жишээ кодыг тест болгон ашиглах боломжийг олгоно. Өмнө нь оператор байсан
    "?" "fn main()" функц эсвэл "#[тест]" функц байгаа үед л туршилтын гүйцэтгэлийн алдааг зохицуулахад ашиглаж болно;

  • Процедурын макро ашиглан тодорхойлсон тусгай шинж чанаруудад өгсөн дурын багц жетон ашиглах чадвар (“#[attr($токен)]”, “#[attr[$токенс]] ба #[attr{$токенс}]”). Өмнө нь элементүүдийг зөвхөн "#[foo(bar, baz(quux, foo = "bar"))]" гэсэн тэмдэгт мөрийн утгыг ашиглан мод/рекурсив хэлбэрээр зааж өгдөг байсан бол одоо тоолол (') ашиглах боломжтой болсон. #[муж(0. .10)]') болон “#[хязгаарлагдмал(T: MyTrait)]” гэх мэт бүтээц;
  • Тогтворжсон төрлүүд (шинж чанар) TryFrom и TryInto, алдаатай харьцах төрөл хувиргалтыг зөвшөөрөх. Жишээлбэл, from_be_bytes зэрэг бүхэл тоон төрлийн аргууд нь массивыг оролт болгон ашигладаг боловч өгөгдөл нь ихэвчлэн Slice төрлөөр ирдэг бөгөөд массив болон зүсмэлүүдийн хооронд хөрвүүлэх нь гараар хийхэд бэрхшээлтэй байдаг. Шинэ шинж чанаруудын тусламжтайгаар заасан үйлдлийг .try_into(), жишээ нь "let num = u32::from_be_bytes(slice.try_into()?)" гэсэн дуудлагаар дамжуулан гүйцэтгэх боломжтой. Үргэлж амжилттай хөрвүүлгийн хувьд (жишээлбэл, u8-аас u32 хүртэл) алдааны төрлийг нэмсэн. Хүчингүй, ил тод ашиглах боломжийг олгодог
    "From"-ын одоо байгаа бүх хувилбаруудын хувьд TryFrom;

  • Функцийг цуцалсан CommandExt ::before_exec, энэ нь fork() дуудлагын дараа forked хүүхэд процессын хүрээнд гүйцэтгэсэн exec-ийг ажиллуулахын өмнө зохицуулагчийг гүйцэтгэх боломжийг олгосон. Ийм нөхцөлд файлын тодорхойлогч, зурагласан санах ойн хэсэг гэх мэт эх процессын зарим нөөцийг хуулбарлаж болох бөгөөд энэ нь тодорхойгүй үйлдэл, номын сангийн буруу үйл ажиллагаанд хүргэж болзошгүй юм.
    before_exec-ийн оронд аюултай функцийг ашиглахыг зөвлөж байна CommandExt::pre_exec.

  • 8-аас 64 битийн хэмжээтэй тогтворжсон тэмдэгт болон тэмдэггүй атомын бүхэл тооны төрлүүд (жишээлбэл, AtomicU8), түүнчлэн гарын үсэг зурсан төрлүүд NonZeroI[8|16|32|64|128].
  • API-ийн шинэ хэсгийг тогтвортой ангилалд шилжүүлсэн бөгөөд үүнд Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ​​орно. ] болон SystemTime аргууд тогтворжсон байна ::checked_[add|sub]. iter::from_fn болон iter::successors функцууд тогтворжсон;
  • Бүх бүхэл тооны төрлүүдийн хувьд шалгагдсан_pow, saturating_pow, wrapping_pow болон overflowing_pow аргуудыг хэрэгжүүлдэг;
  • "-C linker-plugin-lto" бүтээх сонголтыг зааж холбох үе шатанд оновчлолыг идэвхжүүлэх боломжийг нэмсэн.

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

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