Rust 1.45 ပရိုဂရမ်းမင်းဘာသာစကား ဖြန့်ချိသည်။

ထုတ်ဝေခဲ့သည်။ စနစ်ပရိုဂရမ်းမင်းဘာသာစကား၏ 1.45 ကိုထုတ်ပြန်သည်။ သံခြေးMozilla ပရောဂျက်မှ တည်ထောင်ခဲ့သည်။ ဘာသာစကားသည် မှတ်ဉာဏ်ဘေးကင်းရေးကို အာရုံစိုက်ပြီး၊ အလိုအလျောက် မှတ်ဉာဏ်စီမံခန့်ခွဲမှုကို ပံ့ပိုးပေးကာ အမှိုက်စုဆောင်းသူအသုံးမပြုဘဲ မြင့်မားသောအလုပ်အပြိုင်ရရှိစေရန်အတွက် ကိရိယာများကို ပံ့ပိုးပေးပါသည်။ runtime.

Rust ၏ အလိုအလျောက် မှတ်ဉာဏ်စီမံခန့်ခွဲမှုသည် ညွှန်ပြချက်များကို ကိုင်တွယ်ရာတွင် အမှားအယွင်းများကို ဖယ်ရှားပေးပြီး ၎င်းကို လွတ်ပြီးသည့်နောက် မမ်မိုရီဧရိယာကို ဝင်ရောက်ခြင်း၊ အချည်းနှီးသော ညွှန်ပြမှုဆိုင်ရာ အမှားအယွင်းများ၊ ကြားခံအလွဲသုံးမှုများ စသည်တို့ကဲ့သို့သော အဆင့်နိမ့်မှတ်ဉာဏ်ကို ကိုင်တွယ်ခြင်းမှ ဖြစ်ပေါ်လာသည့် ပြဿနာများကို ကာကွယ်ပေးသည်။ စာကြည့်တိုက်များကို ဖြန့်ဝေရန်၊ စုဝေးမှုကို သေချာစေရန်နှင့် ပရောဂျက်မှ မှီခိုမှုကို စီမံခန့်ခွဲရန် ပက်ကေ့ဂျ်မန်နေဂျာကို တီထွင်နေပါသည်။ ကုန်စည်ပရိုဂရမ်အတွက် လိုအပ်သော စာကြည့်တိုက်များကို တစ်ချက်နှိပ်ရုံဖြင့် သင်ရနိုင်မည်ဖြစ်သည်။ လက်ခံထားသည့် စာကြည့်တိုက်များအတွက် သိုလှောင်မှုအား ပံ့ပိုးထားသည်။ crates.io.

အဓိက တီထွင်ဆန်းသစ်မှုများ:

  • ဖယ်ထုတ်ခံရတာ ကြာပါပြီ။ ချို့ယွင်းချက် ကိန်းပြည့်များနှင့် Floating Point နံပါတ်များအကြား ကူးပြောင်းမှုများကို လုပ်ဆောင်သည့်အခါ။ Rust compiler သည် LLVM ကို backend အဖြစ်အသုံးပြုသောကြောင့်၊ အမျိုးအစားပြောင်းလဲခြင်းလုပ်ငန်းကို LLVM ကဲ့သို့သော အလယ်အလတ်ကုဒ်ညွှန်ကြားချက်များမှတစ်ဆင့် လုပ်ဆောင်ခဲ့ပါသည်။ fptouiသိသာထင်ရှားသောအင်္ဂါရပ်တစ်ခုပါရှိသော၊ ရလဒ်တန်ဖိုးသည် ပစ်မှတ်အမျိုးအစားနှင့် မကိုက်ညီပါက သတ်မှတ်မထားသောအပြုအမူ။ ဥပမာအားဖြင့်၊ float value 300 ကို type f32 ဖြင့် integer type u8 သို့ ပြောင်းသောအခါ၊ ရလဒ်သည် ခန့်မှန်းရခက်ပြီး မတူညီသော စနစ်များတွင် ကွဲပြားနိုင်ပါသည်။ ပြဿနာမှာ ဤအင်္ဂါရပ်သည် “မလုံခြုံသော” ဟု အမှတ်အသားပြုထားသည့် ကုဒ်တွင် ပေါ်နေခြင်းဖြစ်သည်။

    Rust 1.45 အရ၊ type size overflow ၏ အပြုအမူကို တင်းကြပ်စွာ ထိန်းညှိထားပြီး "as" conversion operation သည် overflow အတွက် စစ်ဆေးပြီး တန်ဖိုးအား ပစ်မှတ်အမျိုးအစား၏ အများဆုံး သို့မဟုတ် အနည်းဆုံးတန်ဖိုးအဖြစ် ပြောင်းထားကြောင်း (အထက်ဥပမာအတွက်၊ တန်ဖိုးတစ်ခု၊ 300 ကို 255 သို့ပြောင်းပါမည်။ ထိုစစ်ဆေးမှုများကို ပိတ်ရန်၊ နောက်ထပ် API ခေါ်ဆိုမှုများ “{f64, f32}::to_int_unchecked” ကို ပံ့ပိုးပေးထားပြီး မလုံခြုံသောမုဒ်တွင် လုပ်ဆောင်ပါသည်။

    fn cast(x: f32) --> u8 {
    x အဖြစ် u8
    }

    fn ပင်မ() {
    let too_big = 300.0;
    let too_small = -100.0;
    nan = f32::NAN;

    x: f32 = 1.0 ရအောင်၊
    y: u8 = မလုံခြုံပါ { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // output 255
    println!("too_small_casted = {}", cast(too_small)); // output 0
    println!("not_a_number_casted= {}", cast(nan)); // output 0
    }

  • တည်ငြိမ်အောင်သုံးပါ။ လုပ်ထုံးလုပ်နည်း မက်ခရိုလုပ်ဆောင်ချက်တူသော အသုံးအနှုန်းများ၊ ပုံစံပလိတ်များနှင့် ဖော်ပြချက်များ။ ယခင်က၊ ထိုသို့သော မက်ခရိုများကို နေရာတိုင်းတွင် မခေါ်ဆိုနိုင်သော်လည်း ကုဒ်၏ အချို့သော အစိတ်အပိုင်းများတွင်သာ (သီးခြားခေါ်ဆိုမှုအဖြစ် အခြားကုဒ်များနှင့် မရောယှက်ပါ)။ မက်ခရိုဟုခေါ်နိုင်သည့်နည်းလမ်းကို ချဲ့ထွင်ခြင်းသည် လုပ်ဆောင်ချက်များနှင့်ဆင်တူသည်၊ ဝဘ်ဘောင်ကို အလုပ်ဖြစ်စေရန် လိုအပ်ချက်များထဲမှတစ်ခုဖြစ်သည်။ ဒုံးပျံ Rust ၏တည်ငြိမ်သောထုတ်လွှတ်မှုတွင်။ ယခင်က၊ Rocket ရှိ လက်ကိုင်ကိရိယာများကို သတ်မှတ်ရာတွင် ထပ်လောင်းပျော့ပြောင်းမှုကို ရရှိရန်အတွက် Rust ၏ တည်ငြိမ်သောဗားရှင်းများတွင် မရရှိနိုင်သော “proc_macro_hygiene” ဟုခေါ်သော စမ်းသပ်မှုအင်္ဂါရပ်ကို ဖွင့်ထားရန် လိုအပ်ပါသည်။ ဤလုပ်ဆောင်ချက်ကို ယခုအခါတွင် တည်ငြိမ်သောဘာသာစကားဖြင့် ထုတ်လုပ်ထားပါသည်။
  • အပိုင်းအခြားတန်ဖိုးများကို ထပ်လောင်းဖော်ပြရန် “char” အမျိုးအစားပါရှိသော အပိုင်းအခြားများကို အသုံးပြုရန် ခွင့်ပြုထားသည် (ops::{Range၊ RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    ch အတွက် 'a'..='z' {
    print!("{}",ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz" ကို ရိုက်နှိပ်မည်

  • APIs ၏ အပိုင်းအသစ်ကို တည်ငြိမ်အောင်ပြုလုပ်ခြင်းအပါအဝင် တည်ငြိမ်သောအမျိုးအစားသို့ လွှဲပြောင်းထားပါသည်။
    Arc::as_ptr၊
    BTreeMap::remove_entry၊
    Rc::as_ptr၊
    rc::Weak::as_ptr၊
    rc::Weak::from_raw၊
    rc::Weak::into_raw၊
    str::strip_prefix၊
    str::strip_suffix၊
    ထပ်တူပြုခြင်း::Weak::as_ptr၊
    ထပ်တူပြုခြင်း::Weak::from_raw၊
    ထပ်တူပြုခြင်း::Weak::into_raw၊
    char-:UNICODE_VERSION၊
    အပိုင်း-:ဖြေရှင်းပြီး_မှာ၊
    အပိုင်း-:တည်နေရာ_မှာ၊
    အပိုင်း-:mixed_site၊
    unix::process::CommandExt::arg0။

  • rustc compiler သည် ဥပမာ၊ "-C target-feature=+avx2,+fma" အလံကို အသုံးပြု၍ ပစ်မှတ်ပလပ်ဖောင်း အင်္ဂါရပ်များကို ကျော်လွှားရန်အတွက် ပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။ အလံအသစ်များကိုလည်း ထည့်သွင်းထားသည်။
    ပျက်စီးမှုကိုင်တွယ်နည်းဗျူဟာကိုမခွဲခြားဘဲ unwind call tables ကိုထုတ်လုပ်ရန် "force-unwind-tables" LLVM ဘစ်ကုဒ်ကို ထုတ်လုပ်ထားသော rlibs တွင် ထည့်သွင်းခြင်းရှိမရှိ ထိန်းချုပ်ရန် "embed-bitcode" တည်ဆောက်ချိန်နှင့် ဒစ်ခ်နေရာ သုံးစွဲမှုကို ပိုကောင်းအောင်ပြုလုပ်ရန် "embed-bitcode" အလံကို Cargo တွင် မူရင်းအတိုင်း ဖွင့်ထားသည်။

  • mipsel-sony-psp နှင့် thumbv7a-uwp-windows-msvc ပလပ်ဖောင်းများအတွက် တတိယအဆင့် ပံ့ပိုးမှုပေးထားပါသည်။ တတိယအဆင့်တွင် အခြေခံပံ့ပိုးမှုပါဝင်သော်လည်း အလိုအလျောက်စမ်းသပ်ခြင်းနှင့် တရားဝင်တည်ဆောက်မှုများကို ထုတ်ပြန်ခြင်းမရှိဘဲ။

ထို့အပြင်၎င်းကိုမှတ်သားနိုင်သည်။ ပုံပြင် အရိုးရှင်းဆုံးဖန်တီးခြင်းအကြောင်း apps များ Rust language တွင်၊ system bootloader ကို စတင်အသုံးပြုပြီး operating system အစား ကိုယ်တိုင်ပါရှိသော loading လုပ်ရန် အဆင်သင့်ဖြစ်နေပါပြီ။
ဆောင်းပါးသည် အဆင့်နိမ့်ပရိုဂရမ်းမင်းနှင့် OS ဖွံ့ဖြိုးတိုးတက်မှုတွင် ဝယ်လိုအားရှိသော နည်းပညာများကို သရုပ်ပြရန်အတွက် ရည်ရွယ်ထားသော စီးရီးတစ်ခုတွင် ပထမဆုံးဖြစ်သည်။

source: opennet.ru

မှတ်ချက် Add