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

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

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

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

  • အမျိုးအစားများအတွက် အထောက်အပံ့ကို အကောင်အထည်ဖော်ခဲ့သည်။ ခင်းကျင်းမှုများ မည်သည့်အရွယ်အစား။ ယခင်က၊ ကိန်းပြည့်တန်ဖိုးများအားလုံးအတွက် ယေဘူယျလုပ်ဆောင်ချက်များကို မသတ်မှတ်နိုင်ခြင်းကြောင့်၊ စံစာကြည့်တိုက်သည် အရွယ်အစားရှိ ဒြပ်စင် 32 ခုအထိရှိသော ခင်းကျင်းမှုများအတွက်သာ ထည့်သွင်းထားသော စရိုက်လက္ခဏာများကို ပံ့ပိုးပေးသည် (အရွယ်အစားတစ်ခုစီအတွက် စရိုက်လက္ခဏာများကို တည်ငြိမ်စွာသတ်မှတ်ထားသည်)။ စဉ်ဆက်မပြတ် generics (“const generics”) ၏ လုပ်ဆောင်နိုင်စွမ်းကို ဖန်တီးမှုကြောင့်၊ မည်သည့် array အရွယ်အစားအတွက်မဆို generic functions များကို သတ်မှတ်ရန် ဖြစ်နိုင်သော်လည်း ၎င်းတို့ကို compiler တွင် အကောင်အထည်ဖော်ပြီးဖြစ်သော်လည်း တည်ငြိမ်သောဘာသာစကားအင်္ဂါရပ်များတွင် မပါဝင်သေးပါ။ ယခု ပါဝင်ပါတယ်။ မည်သည့်အရွယ်အစားရှိ array စရိုက်လက္ခဏာများအတွက် စံစာကြည့်တိုက်တွင်။

    ဥပမာအားဖြင့်၊ Rust 1.47 တွင် အောက်ပါတည်ဆောက်ပုံသည် ယခင်က error ဖြစ်ခဲ့သော်လည်း၊ array တစ်ခု၏ အကြောင်းအရာများကို print ထုတ်လိမ့်မည်-

    fn ပင်မ() {
    xs = [0; ၃၄];

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

  • တိုတောင်းသောခြေရာများ (backtrace)၊ အရေးပေါ်အခြေအနေများတွင် ထုတ်ပေးသည်။ အခြေအနေအများစုတွင် စိတ်မဝင်စားသော်လည်း အထွက်ကို ရှုပ်ပွစေပြီး ပြဿနာ၏ အဓိကအကြောင်းရင်းများမှ အာရုံကို အာရုံလွဲစေသည့်အရာများကို သဲလွန်စမှ ဖယ်ထုတ်ထားသည်။ သဲလွန်စ အပြည့်အစုံကို ပြန်ရရန်၊ သင်သည် ပတ်ဝန်းကျင် ပြောင်းလဲမှု "RUST_BACKTRACE=full" ကို သုံးနိုင်သည်။ ဥပမာ၊ ကုဒ်အတွက်

    fn ပင်မ() {
    ထိတ်လန့်ကြောက်ရွံ့သော!();
    }

    ယခင်က သဲလွန်စသည် အဆင့် ၂၃ တွင် ထွက်ရှိခဲ့သော်လည်း ယခုအခါ ၎င်းကို လျှော့ချသွားမည်ဖြစ်သည်။
    အနှစ်သာရကို ချက်ချင်းဆုပ်ကိုင်နိုင်စေမယ့် အဆင့် ၃ ဆင့်

    src/main.rs:2:5
    stack backtrace-
    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 compiler ကို အသုံးပြု၍ တည်ဆောက်ရန် မွမ်းမံထားသည်။ LLVM 11 (သံချေး အသုံးပြုမှု LLVM သည် backend အဖြစ် ကုဒ်မျိုးဆက်) တစ်ချိန်တည်းမှာပင်၊ ဗားရှင်း 8 အထိ LLVM အဟောင်းများဖြင့် တည်ဆောက်နိုင်မှုကို ဆက်လက်ထိန်းသိမ်းထားသော်လည်း ပုံမှန်အားဖြင့် (in rust-lang/llvm-ပရောဂျက်) ယခု LLVM 11 ကို အသုံးပြုနေပါသည်။ LLVM 11 သည် လာမည့်ရက်များတွင် ထွက်ရှိလာမည်ဟု မျှော်လင့်ပါသည်။
  • Windows ပလပ်ဖောင်းပေါ်တွင်၊ rustc compiler သည် “-C control-flow-guard” အလံကို အသုံးပြု၍ အသက်သွင်းထားသော ထိန်းချုပ်မှုစီးဆင်းမှုစစ်ဆေးခြင်း (Control Flow Guard) ကိုဖွင့်ရန်အတွက် ပံ့ပိုးပေးပါသည်။ အခြားပလက်ဖောင်းများတွင် ဤအလံကို ယခုလောလောဆယ် လစ်လျူရှုထားသည်။
  • APIs ၏ အပိုင်းအသစ်ကို တည်ငြိမ်အောင်ပြုလုပ်ခြင်းအပါအဝင် တည်ငြိမ်သောအမျိုးအစားသို့ လွှဲပြောင်းထားပါသည်။
    အထောက်အထား-:new_raw၊
    အပိုင်းအခြား-: is_ဗလာ၊
    RangeInclusive::is_empty၊
    ရလဒ်-:as_deref၊
    ရလဒ်-:as_deref_mut၊
    Vec::ယိုစိမ့်၊
    ညွှန်ပြချက်-:offset_from၊
    f32::TAU နှင့်
    f64::TAU။

  • ကိန်းသေများအစား မည်သည့်အကြောင်းအရာတွင်မဆို အသုံးပြုရန် ဖြစ်နိုင်ခြေကို ဆုံးဖြတ်ပေးသည့် "const" attribute ကို နည်းလမ်းများတွင် အသုံးပြုသည်-
    • သုညမဟုတ်သော ကိန်းပြည့်အားလုံးအတွက် အသစ်၊
    • checked_add၊ checked_sub၊ checked_mul၊ checked_neg၊ checked_shl၊ checked_shr၊ saturating_add၊ saturating_sub နှင့် saturating_mul ကိန်းပြည့်အားလုံးအတွက်၊
    • is_ascii_alphabetic၊ is_ascii_uppercase၊ is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace u and is_ascii.
  • FreeBSD အတွက် ပါဝင်ပါတယ်။ FreeBSD 11.4 မှ toolkit (FreeBSD 10 သည် LLVM 11 ကို မပံ့ပိုးပါ)။

source: opennet.ru

မှတ်ချက် Add