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

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

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

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

  • Тогтворжсон "async" функц, async move { ... } блок, ".await" оператор дээр суурилсан шинэ асинхрон програмчлалын синтакс нь үндсэн командын урсгалыг хаадаггүй зохицуулагчийг бичихэд хялбар болгодог. Өмнө нь санал болгож буй асинхрон оролт/гаралтын API-тай харьцуулахад async/.await бүтээцүүд нь ойлгоход хялбар, уншихад хялбар бөгөөд гогцоо, нөхцөлт мэдэгдэл, үл хамаарах зүйл дээр суурилсан урсгалын удирдлагын танил техникийг ашиглан нарийн төвөгтэй асинхрон харилцан үйлчлэлийг хэрэгжүүлэх боломжийг танд олгоно.

    Async-await синтакс нь тэдгээрийн гүйцэтгэлийг түр зогсоож, удирдлагыг үндсэн урсгал руу буцаах, дараа нь зогссон газраасаа гүйцэтгэлийг үргэлжлүүлэх боломжтой функцуудыг үүсгэх боломжийг олгодог. Жишээлбэл, оролт гаралтыг боловсруулахад ийм түр зогсолт хийх шаардлагатай байдаг бөгөөд энэ нь дараагийн өгөгдөл ирэхийг хүлээх зуур бусад ажлыг хийж болно. "Async fn" болон "async move"-ээр тодорхойлогдсон функцууд болон блокууд нь шинж чанарыг буцаана ирээдүйн, энэ нь хойшлогдсон асинхрон тооцооллын дүрслэлийг тодорхойлдог. Та ".await" операторыг ашиглан хойшлуулсан тооцоог шууд эхлүүлж, үр дүнг авах боломжтой. .await дуудагдах хүртэл ямар ч үйлдэл хийгдэхгүй эсвэл урьдчилан төлөвлөөгүй бөгөөд энэ нь нэмэлт ачаалалгүйгээр нарийн төвөгтэй үүрлэсэн бүтцийг үүсгэх боломжийг олгоно.

    async fn first_function() -> u32 { .. }
    ...
    ирээдүй = first_function();
    ...
    үр дүн үзүүлье: u32 = ирээдүй. хүлээж байна;

  • Тогтворжсон "#![онцлог (хөдөлгөөнт_хэв маягийн_хамгаалалтууд)]", холбох төрлийн хувьсагчийг ашиглахыг зөвшөөрнө "шилжих"Загварт "гэж, "хэрвээ" илэрхийллийн хэсэгт эдгээр хувьсагчийн лавлагааг ашиглана уу.тоглолт". Жишээлбэл, дараахь барилга байгууламжийг одоо зөвшөөрнө.

    fn main() {
    let массив: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    тохирох массив {
    тоохгүй
    хэрэв nums.iter().sum::() == 10

    => {
    дусал(тоо);
    }
    _ => хандах боломжгүй!(),
    }
    }

  • Зөвшөөрөгдсөн заалт шинж чанарууд функцын параметр, хаалт, функцийн заагчийг тодорхойлох үед. Оношилгоог хулдаас (зөвшөөрөх, анхааруулах, үгүйсгэх, хориглох) удирддаг нөхцөлт эмхэтгэлийн шинж чанарууд (cfg, cfg_attr) болон туслах макро дуудлагын шинж чанаруудыг дэмждэг.

    fn len(
    #[cfg(windows)] зүсмэл: &[u16], // Windows дээр параметрийг ашиглах
    #[cfg(not(windows))] зүсмэл: &[u8], // бусад үйлдлийн системд ашиглах
    ) -> ашиглах {
    slice.len()
    }

  • NLL (Lexical Non-Lexical Lifetimes) техникийг ашиглан хувьсах хэмжигдэхүүнүүдийг зээлэх (зээлдэгч) шалгах явцад гарсан асуудлуудын талаар анхааруулга, орчуулсан аюултай алдааны ангилалд. Зээл авсан хувьсагчдын ашиглалтын хугацааг харгалзан үзэх шинэ механизм дээр суурилсан баталгаажуулалтын систем нь хуучин баталгаажуулалтын кодоор анзаарагдаагүй зарим асуудлыг тодорхойлох боломжийг олгосон гэдгийг санацгаая. Ийм шалгалтын алдааны гаралт нь өмнө нь ажиллаж байсан кодтой нийцтэй байдалд нөлөөлж болзошгүй тул алдааны оронд анхааруулга өгсөн. Одоо Rust 2018 горимд ажиллах үед анхааруулга алдаагаар солигдсон. Дараагийн хувилбарт алдааны гаралтыг Rust 2015 горимд хэрэгжүүлэх бөгөөд энэ нь эцэст нь хуучин зээлийн шалгагчаас салах болно;
  • Тогтмолуудын оронд дурын контекст ашиглах боломжийг тодорхойлдог "const" шинж чанарыг Vec::new, String::new, LinkedList::new, str::len, [T]::len функцүүдэд ашигладаг. , str :: as_bytes,
    хэвлийн булчин, ороох_абс болон хэт их_абс;

  • API-ийн шинэ хэсгийг тогтворжуулсан аргуудыг багтаасан тогтвортой ангилалд шилжүүлсэн
    Pin::into_inner, Instant::checked_duration_sice болон Instant::saturating_duration хойш;

  • Ачааны багц менежер нь тохиргооны файлд ".toml" өргөтгөлийг ашиглах боломжтой болсон. Стандарт номын санг Cargo-оос шууд бий болгох урьдчилсан дэмжлэгийг нэмсэн. Маргаантай "--all" тугийг орлуулж "--workspace" тугийг нэмсэн. Мета өгөгдөлд шинэ талбар нэмэгдсэн "нийтлэх", энэ нь git таг болон хувилбарын дугаарыг зааж өгснөөр хамаарлыг нийтлэх боломжийг олгодог. Төрөл бүрийн эмхэтгэлийн үе шатуудын гүйцэтгэлийн HTML тайланг үүсгэхийн тулд "-Ztimings" туршилтын сонголтыг нэмсэн.
  • Rustc хөрвүүлэгч дээр оношилгооны мессежүүд нь терминалд тохирохгүй кодын сүүлийг тайрахыг агуулдаг. Зорилтот платформуудад гурав дахь түвшний дэмжлэг үзүүлсэн
    i686-үл мэдэгдэх-uefi болон sparc64-үл мэдэгдэх-openbsd. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээн байгуулалтыг нийтлэхгүйгээр.

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

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