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

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

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

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

  • Хамааралтай хайрцагны багцыг эмхэтгэж дуусахыг хүлээлгүйгээр, хамаарлын мета өгөгдөл бэлэн болмогц бүтээж эхэлдэг шугаман эмхэтгэлийн горимыг нэмсэн. Багцыг эмхэтгэхдээ хамаарлыг бүрэн цуглуулах шаардлагагүй бөгөөд төрөл, хамаарал, экспортлогдсон элементүүдийн жагсаалтыг багтаасан мета өгөгдлийг тодорхойлоход л хангалттай. Мета өгөгдлийг эмхэтгэх үйл явцын эхэнд бэлэн болгосон тул холбосон багцуудыг одоо хамаагүй эрт эмхэтгэх боломжтой. Ганц багцуудыг бүтээх үед санал болгож буй горим нь гүйцэтгэлд нөлөөлөхгүй боловч хэрэв угсралт нь салаалсан хамаарал бүхий багцуудыг хамардаг бол нийт бүтээх хугацааг 10-20% бууруулах боломжтой;
  • Функцуудын буруу ашиглалтыг илрүүлэхийг баталгаажуулдаг std::mem:: эхлүүлээгүй и std :: mem :: тэглэсэн. Жишээ нь: std::mem::uninitialized нь массивыг хурдан үүсгэхэд тохиромжтой боловч хөрвүүлэгчийг төөрөгдүүлдэг, учир нь энэ нь эхлүүлсэн мэт боловч бодит байдал дээр утга нь эхлээгүй хэвээр байна. mem:: эхлүүлээгүй функцийг аль хэдийн хуучирсан гэж тэмдэглэсэн бөгөөд оронд нь завсрын төрлийг ашиглахыг зөвлөж байна. Магадгүй Нэгж. mem::zeroed-ийн хувьд энэ функц нь тэг утгыг хүлээн авах боломжгүй төрлүүдэд асуудал үүсгэж болно.

    Тодорхойгүй зан төлөвийг тодорхойлоход туслахын тулд шинэ хувилбар нь mem:: uninitialized эсвэл mem :: zeroed-тэй холбоотой зарим асуудлыг илрүүлдэг хөрвүүлэгчид хөвөн шалгахыг нэмж өгдөг. Жишээлбэл, та одоо тэг утгыг хүлээн авах боломжгүй заагч объектуудыг төлөөлдөг &T болон Box‹T› төрлүүдээр mem::initialized эсвэл mem::zeroed ашиглахыг оролдох үед алдаа гарч байна;

  • "#[хуучирсан]" атрибут нь хайрцагны багцуудыг хуучирсан гэж тэмдэглэж, цаашид устгахаар төлөвлөх боломжийг олгосон. Rust 1.38 хувилбарын хувьд энэ атрибутыг мөн макроод ашиглаж болно;
  • Дэд модулиудад “#[global_allocator]” шинж чанарыг ашиглах чадварыг нэмсэн;
  • Нэмэлт функц std :: дурын :: төрлийн_нэр, энэ нь тухайн төрлийн нэрийг олж мэдэх боломжийг олгодог бөгөөд энэ нь дибаг хийхэд хэрэгтэй байж болох юм. Жишээлбэл, програмыг ажиллуулах явцад та ямар төрлийн функцийг дуудаж байсныг олж мэдэх боломжтой.

    fn gen_value‹T: Өгөгдмөл>() -› T {
    println!("{}-ийн жишээг эхлүүлж байна", std::any::type_name::‹T›());
    Өгөгдмөл::өгөгдмөл()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" хэвлэгдэх болно
    let _: String = gen_value(); # "alloc::string::String" хэвлэнэ.
    }

  • Стандарт номын сангийн өргөтгөсөн функцууд:
    • slice::{concat, connect, join} одоо &T-ээс гадна &[T] утгыг авах боломжтой;
    • "*const T" болон "*mut T" нь одоо тэмдэглэгээг хэрэгжүүлнэ:: Unpin;
    • "Arc‹[T]›" болон "Rc‹[T]›" одоо FromIterator‹T›-г хэрэгжүүлж байна;
    • iter::{StepBy, Peekable, Take} одоо DoubleEndedIterator-г хэрэгжүүлж байна.
    • ascii::EscapeDefault нь Clone болон Display-г хэрэгжүүлдэг.
  • API-ийн шинэ хэсгийг тогтворжуулсан аргуудыг багтаасан тогтвортой ангилалд шилжүүлсэн
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Үргэлжлэх хугацаа::seks_f{32|64},
    • Үргэлжлэх хугацаа::div_duration_f{32|64},
    • Үргэлжлэх хугацаа::div_f{32|64},
    • Үргэлжлэх хугацаа::secs_f{32|64},
    • Үргэлжлэх хугацаа::mul_f{32|64},
    • үлдэгдэлтэй хуваах үйлдлүүд
      div_euclid ба rem_euclid бүх бүхэл тооны командын хувьд;

  • Ачааны багц менежерт өөр өөр функцуудыг идэвхжүүлэхийн тулд "--features" сонголтыг олон удаа зааж өгөх дэмжлэг нэмэгдсэн;
  • Хөрвүүлэгч нь гуравны нэгийг өгдөг зэрэглэл зорилтот платформуудын дэмжлэг aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msv7- мэдэгддэг armv-, -gnueabi, armv7-үл мэдэгдэх-linux-musleabi, зургаан өнцөгт-үл мэдэгдэх-linux-musl болон riscv32i-үл мэдэгдэх-none-elf. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээн байгуулалтыг нийтлэхгүйгээр.

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

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