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

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

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

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

  • Төрөлүүдэд зориулсан дэмжлэгийг хэрэгжүүлсэн массив ямар ч хэмжээтэй. Өмнө нь бүхэл тоон утгуудын ерөнхий функцийг тодорхойлох боломжгүй байсан тул стандарт номын сан нь зөвхөн 32 хүртэлх элементийн хэмжээтэй массивуудад (хэмжээ тус бүрийн шинж чанаруудыг статик байдлаар тодорхойлсон) суурилагдсан шинж чанарыг дэмждэг байв. Тогтмол generics ("const generics") функцийг бий болгосны ачаар ямар ч массивын хэмжээтэй ерөнхий функцийг тодорхойлох боломжтой болсон боловч тэдгээр нь хөрвүүлэгч дээр хэрэгжсэн бөгөөд хэлний тогтвортой шинж чанаруудад хараахан ороогүй байна. одоо оролцсон ямар ч хэмжээтэй массив шинж чанаруудын стандарт номын санд.

    Жишээлбэл, Rust 1.47 дээрх дараах бүтэц нь өмнө нь алдаа гаргаж байсан ч массивын агуулгыг хэвлэх болно:

    fn main() {
    xs = [0; 34];

    println!("{:?}", xs);
    }

  • Онцгой байдлын үед илүү богино ул мөр (буцах) гаралтыг хангасан. Ихэнх тохиолдолд сонирхол татахуйц биш боловч гаралтыг эмх замбараагүй болгож, асуудлын үндсэн шалтгаанаас анхаарлыг сарниулдаг элементүүдийг ул мөрөөс хасдаг. Бүрэн ул мөрийг буцаахын тулд та "RUST_BACKTRACE=full" орчны хувьсагчийг ашиглаж болно. Жишээлбэл, кодын хувьд

    fn main() {
    сандрах!();
    }

    Өмнө нь ул мөрийг 23 үе шаттайгаар гаргадаг байсан бол одоо болтол бууруулна
    Мөн чанарыг шууд ойлгох 3 алхам:

    'main' thread 'ilt panic'-д сандран, src/main.rs:2:5
    стекийн ухралт:
    0: std::panicking::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 хаягаар
    1: тоглоомын талбай:: үндсэн
    ./src/main.rs:2 дээр
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 дээр

  • Rustc хөрвүүлэгчийг ашиглан бүтээхээр шинэчлэгдсэн LLVM 11 (Зэв ашигладаг LLVM-ийг арын хэсэг болгон код үүсгэх). Үүний зэрэгцээ, хуучин LLVM-үүдтэй 8 хувилбар хүртэл бүтээх чадвар хадгалагдсан боловч анхдагчаар (д rust-lang/llvm-project) одоо LLVM 11-г ашиглаж байна. LLVM 11 нь ойрын өдрүүдэд гарах төлөвтэй байна.
  • Windows платформ дээр rustc хөрвүүлэгч нь "-C control-flow-guard" тугийг ашиглан идэвхжүүлсэн хяналтын урсгалын бүрэн бүтэн байдлыг шалгах (Control Flow Guard)-ыг идэвхжүүлэхэд дэмжлэг үзүүлдэг. Бусад платформ дээр энэ туг одоогоор хэрэгсэхгүй байна.
  • API-ийн шинэ хэсгийг тогтворжуулсан зэрэг тогтвортой ангилалд шилжүүлсэн
    Ident::new_raw,
    Муж::хоосон,
    RangeInclusive ::хоосон,
    Үр дүн::as_deref,
    Үр дүн::as_deref_mut,
    Vec:: гоожиж,
    заагч::офсет_from,
    f32::TAU болон
    f64::TAU.

  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараахь аргуудад ашигладаг.
    • тэгээс бусад бүхэл тоонуудын хувьд шинэ;
    • бүх бүхэл тоонуудын шалгасан_нэмж, шалгагдсан_дадаа, шалгагдсан_мул, шалгагдсан_нэг, шалгагдсан_shl, шалгагдсан_шр, ханасан_нэм, ханасан_дэд ба ханасан_мул;
    • is_ascii_alphabetic, is_ascii_upppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitescir болон is_controls for.
  • FreeBSD-д зориулсан оролцсон FreeBSD 11.4-ийн багаж хэрэгсэл (FreeBSD 10 нь LLVM 11-ийг дэмждэггүй).

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

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