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

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

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

Гол инноваци:

  • “Сандрах!” макроны хэрэглээ тогтворжсон. "const fn" мэдэгдэл гэх мэт эмхэтгэлийн явцад үүсгэсэн контекстүүдэд. Үүнээс гадна, "сандрах!" const мэдэгдлүүд нь “atsert!” макро ашиглахыг зөвшөөрдөг. болон бусад зарим стандарт номын сангийн API. Тогтворжилт нь форматын дэд бүтцийг бүхэлд нь хамарч чадаагүй байгаа тул одоогийн байдлаар "сандрах!" макро байна. нь зөвхөн статик тэмдэгт мөрүүдтэй (panic!(“...")) эсвэл орлуулах үед "&str" гэсэн интерполяцлагдсан утгыг ашиглах боломжтой (panic!("{}", a)), "{"-г орлуулахаар хязгаарлагдах ёстой. }" форматын тодорхойлогч болон бусад төрлүүдгүйгээр. Ирээдүйд тогтмол контекстэд макро хэрэглэх боломж улам өргөжих боловч тогтворжсон чадварууд нь эмхэтгэлийн үе шатанд баталгаажуулалтын шалгалт хийхэд хангалттай байна: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = батлах!(std::mem::size_of:: () == 8);
  • Ачааны багц менежер нь зөвхөн "dev", "release", "test" болон "bech" гэх мэтээр хязгаарлагдахгүй дурын нэртэй профайлыг ашиглахыг зөвшөөрдөг. Жишээлбэл, эцсийн бүтээгдэхүүний угсралт үүссэн үед л оновчлолыг холбох үе шатанд (LTO) идэвхжүүлэхийн тулд та Cargo.toml дээр "үйлдвэрлэлийн" профайл үүсгэж, түүнд "lto = үнэн" гэсэн тугийг нэмж болно. Гэсэн хэдий ч, өөрийн профайлаа тодорхойлохдоо өгөгдмөл тохиргоог өвлөн авахын тулд одоо байгаа профайлыг зааж өгөх ёстой. Доорх жишээ нь "lto = үнэн" гэсэн тугийг оруулснаар "хувилбар" профайлыг нөхөх "үйлдвэрлэлийн" профайлыг үүсгэдэг. Профайл өөрөө "--profile production" сонголтоор ачаа дуудаж идэвхжүүлэх ба угсралтын олдворуудыг "target/production" лавлах хэсэгт байрлуулна. [profile.production] удамшдаг = "суллах" lto = үнэн
  • Vec, String, HashMap, HashSet, VecDeque төрлүүдэд try_reserve-г ашиглах нь тогтворжсон бөгөөд энэ нь санах ой хуваарилах үйлдлүүдийн давтамжийг багасгах, зайлсхийхийн тулд тухайн төрлийн тодорхой тооны элементүүдэд зайг урьдчилан нөөцлөх боломжийг олгодог. санах ойн хомсдолоос болж үйл ажиллагааны явцад гацдаг.
  • "m!{ .. }.method()" болон "m!{ .. }?" гэх мэт илэрхийлэлд буржгар хаалт бүхий макрог зааж өгөхийг зөвшөөрнө.
  • File::read_to_end болон read_to_string функцуудын гүйцэтгэлийг оновчтой болгосон.
  • Юникод тодорхойлолтын дэмжлэгийг 14.0 хувилбар болгон шинэчилсэн.
  • "#[заавал_ашиглах]" гэж тэмдэглэгдсэн функцүүдийн тоог өргөтгөж, буцаах утгыг үл тоомсорловол анхааруулга өгөх бөгөөд энэ нь функцийг шинэ утгыг буцаахын оронд утгыг өөрчилнө гэж үзвэл алдааг тодорхойлоход тусалдаг.
  • libgccjit ашиглан код үүсгэх туршилтын арын хэсгийг нэмсэн.
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
    • [Т; N]:: зэрэг_мут_зүсмэл
    • [Т; N]::зүсмэлээр
    • цуглуулгууд::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • Мөр::яг_нөөцөд_орох
    • Vec::try_reserve
    • Vec::яг_нөөц_оролдох
    • VecDeque::try_reserve
    • VecDeque::яг_нөөцөд_оролдох
    • Давтагч :: газрын зураг_while
    • iter::MapWhile
    • proc_macro :: боломжтой
    • Command::get_program
    • Тушаал::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Тогтмолуудын оронд ямар ч контекст ашиглаж болох эсэхийг тодорхойлдог "const" шинж чанарыг hint::unreachable_unchecked функцэд ашигладаг.
  • Гурав дахь түвшний дэмжлэгийг armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi болон armv7a-km-д хэрэгжүүлсэн. solid_asp3-eabihf платформууд. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.

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

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