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

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

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

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

  • Удаан хугацааны туршид арилсан дутагдал бүхэл тоо болон хөвөгч цэгийн тоонуудын хооронд хөрвүүлэх үед. Rust хөрвүүлэгч нь LLVM-г backend болгон ашигладаг тул төрөл хувиргах үйлдлүүд нь LLVM-ийн завсрын кодын заавруудаар хийгдсэн. fptoui, эдгээр нь нэг чухал шинж чанартай байдаг - хэрэв үүссэн утга нь зорилтот төрөлд тохирохгүй бол тодорхойгүй зан үйл. Жишээлбэл, f300 төрлийн 32 хөвөх утгыг u8 бүхэл тоо руу хөрвүүлэх үед үр дүн нь урьдчилан таамаглах боломжгүй бөгөөд өөр өөр системд өөр байж болно. Асуудал нь энэ функц нь "аюултай" гэж тэмдэглээгүй кодонд гарч ирдэг.

    Rust 1.45-ын байдлаар, төрлийн хэмжээ халих үйлдлийг хатуу зохицуулдаг бөгөөд "as" хувиргах үйлдэл нь халих эсэхийг шалгаж, хөрвүүлж буй утгыг зорилтот төрлийн хамгийн их эсвэл хамгийн бага утга руу хүчээр шахдаг (дээрх жишээний хувьд: 300-г 255 болгон хөрвүүлнэ). Ийм шалгалтыг идэвхгүй болгохын тулд "{f64, f32}::to_int_unchecked" нэмэлт API дуудлагууд нь аюултай горимд ажилладаг.

    fn cast(x: f32) -> u8 {
    x u8 гэж
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    let nan = f32::NAN;

    x: f32 = 1.0;
    let y: u8 = аюултай {x.to_int_unchecked()};

    println!("хэт_том_casted = {}", cast(хэт_том)); // гаралт 255
    println!("хэт_жижиг_casted = {}", cast(хэт_жижиг)); // гаралт 0
    println!("цацсан_тоо биш = {}", cast(nan)); // гаралт 0
    }

  • Тогтворжуулсан ашиглах процедурын макрофункцтэй төстэй илэрхийллүүд, загварууд болон мэдэгдлүүд. Өмнө нь ийм макрог хаа сайгүй дуудах боломжгүй, харин зөвхөн кодын тодорхой хэсэгт (бусад кодтой холбоогүй тусдаа дуудлага хэлбэрээр) дуудагддаг байв. Функцуудтай адил макро дуудах арга замыг өргөжүүлэх нь вэб хүрээг ажиллуулах шаардлагуудын нэг байсан. Rocket Rust-ийн тогтвортой хувилбаруудад. Өмнө нь Rocket-д зохицуулагчийг тодорхойлох нэмэлт уян хатан байдалд хүрэхийн тулд "proc_macro_hygiene" хэмээх туршилтын функцийг идэвхжүүлэх шаардлагатай байсан бөгөөд энэ нь Rust-ийн тогтвортой хувилбаруудад байдаггүй. Энэ функцийг одоо хэлний тогтвортой хувилбаруудад суулгасан болно.
  • Мужийн утгыг давтахын тулд "char" төрлийн мужуудыг ашиглахыг зөвшөөрсөн (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    'a' дахь ch-ийн хувьд..='z' {
    хэвлэх!("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" хэвлэнэ

  • API-ийн шинэ хэсгийг тогтворжуулсан зэрэг тогтвортой ангилалд шилжүүлсэн
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Сул ::as_ptr,
    rc::Sil::from_raw,
    rc::Sil::to_raw,
    str::strip_prefix,
    str::strip_suffix,
    sync :: сул :: as_ptr,
    синхрончлол :: сул :: түүхий эдээс,
    синхрончлол :: сул :: түүхий эд рүү,
    char::UNICODE_VERSION,
    Span::шийдвэрлэсэн_цаг,
    Span::location_at,
    Span::холимог_сайт,
    unix::process::CommandExt::arg0.

  • Rustc хөрвүүлэгч нь "target-feature" тугийг ашиглан зорилтот платформын янз бүрийн функцуудыг дарах дэмжлэгийг нэмсэн, жишээ нь "-C target-feature=+avx2,+fma". Мөн шинэ тугуудыг нэмсэн:
    Гэмтлийг зохицуулах стратегиас үл хамааран дуудлагын хүснэгтийг гаргахын тулд "force-unwind-tables"; "embed-bitcode" нь үүсгэсэн rlib-д LLVM биткод орсон эсэхийг хянах. "embed-bitcode" тугийг Cargo-д анхдагчаар идэвхжүүлсэн бөгөөд энэ нь бүтээх хугацаа болон дискний зайны зарцуулалтыг оновчтой болгодог.

  • Гурав дахь түвшний дэмжлэгийг mipsel-sony-psp болон thumbv7a-uwp-windows-msvc платформуудад өгсөн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээн байгуулалтыг нийтлэхгүйгээр.

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

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

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