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

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

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

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

  • မှီခိုနေသော မက်တာဒေတာကို ရရှိလာသည်နှင့်တပြိုင်နက် ၎င်း၏စုစည်းမှုကို ပြီးအောင်မစောင့်ဘဲ မှီခိုနေသော မက်တာဒေတာကို ရရှိလာသည်နှင့်တပြိုင်နက် ပိုက်လိုင်းပြုလုပ်ထားသော စုစည်းမှုမုဒ် (ပိုက်လိုင်းပြုလုပ်ထားသည်) ကို ပေါင်းထည့်ထားသည်။ ပက်ကေ့ဂျ်တစ်ခုကို ပြုစုသောအခါ၊ မှီခိုမှုများအား အမျိုးအစားများစာရင်းများ၊ မှီခိုမှုများနှင့် ထုတ်ယူထားသော ဒြပ်စင်များပါ၀င်သည့် မက်တာဒေတာကို သတ်မှတ်ရုံဖြင့် မှီခိုအားထားမှုများကို အပြည့်အ၀စုစည်းရန်မလိုအပ်ပါ။ မက်တာဒေတာကို စုစည်းမှုလုပ်ငန်းစဉ်တွင် အစောပိုင်းတွင် ရရှိနိုင်သောကြောင့် ချိတ်ဆက်ထားသော ပက်ကေ့ဂျ်များကို ယခုထက် များစွာစော၍ စုစည်းနိုင်ပါပြီ။ တစ်ခုတည်းသော ပက်ကေ့ဂျ်များကို တည်ဆောက်သည့်အခါ၊ အဆိုပြုမုဒ်သည် စွမ်းဆောင်ရည်ကို မထိခိုက်စေသော်လည်း တည်ဆောက်မှုတွင် အကိုင်းအခက် မှီခိုမှုရှိသော ပက်ကေ့ဂျ်များကို ဖုံးအုပ်ထားလျှင် အလုံးစုံ တည်ဆောက်ချိန်ကို 10-20% လျှော့ချနိုင်သည်။
  • မှားယွင်းသောလုပ်ဆောင်ချက်များကို အသုံးပြုခြင်းအား ထောက်လှမ်းသေချာစေပါသည်။ std::mem::အစပြု၍မရ и std::mem::သုည. ဥပမာအားဖြင့်၊ std::mem::uninitialized သည် arrays များကို လျင်မြန်စွာဖန်တီးရန်အတွက် အဆင်ပြေသော်လည်း ၎င်းသည် အစပြုထားပုံပေါ်သောကြောင့် compiler ကို အထင်လွဲစေသော်လည်း လက်တွေ့တွင်မူ တန်ဖိုးသည် မစဥ်းစားရသေးပါ။ mem::unitialized လုပ်ဆောင်ချက်ကို ရပ်ဆိုင်းထားပြီးဖြစ်ကြောင်း အမှတ်အသားပြုထားပြီး ၎င်းအစား အလယ်အလတ်အမျိုးအစားကို အသုံးပြုရန် အကြံပြုထားသည်။ ဒါနဲ့ပတ်သက်ပြီး ယူနစ်. mem::သုည၊ ဤလုပ်ဆောင်ချက်သည် သုညတန်ဖိုးများကို လက်မခံနိုင်သော အမျိုးအစားများနှင့် ပြဿနာများကို ဖြစ်စေနိုင်သည်။

    သတ်မှတ်မထားသော အပြုအမူကို ဖော်ထုတ်ရာတွင် ကူညီရန်၊ ထုတ်ဝေမှုအသစ်သည် mem::unitialized သို့မဟုတ် mem::zeroed နှင့် အချို့သောပြဿနာများကို ရှာဖွေတွေ့ရှိသည့် ကွန်ပြူလာသို့ အလင်းစစ်ဆေးချက်တစ်ခု ထည့်ပေးသည်။ ဥပမာအားဖြင့်၊ ယခု mem::uninitialized သို့မဟုတ် mem:: အမျိုးအစားများ နှင့် သုည ပါရှိသော mem::uninitialized သို့မဟုတ် mem::null တန်ဖိုးများကို လက်မခံနိုင်သော pointer objects များကို ကိုယ်စားပြုသော ယခု သင် အမှားတစ်ခု ရရှိပါသည်။

  • ကုန်သေတ္တာပက်ကေ့ဂျ်များကို အသုံးမပြုတော့ကြောင်း အမှတ်အသားပြုရန်နှင့် အနာဂတ်တွင် ဖျက်ရန်စီစဉ်ထားရန် "#[ကန့်ကွက်ထားသော]" ရည်ညွှန်းချက်ကို တိုးချဲ့ထားပါသည်။ Rust 1.38 အရ၊ ဤ attribute ကို macro အတွက်လည်း သုံးနိုင်သည်။
  • submodules များတွင် “#[global_allocator]” ရည်ညွှန်းချက်ကို အသုံးပြုရန် စွမ်းရည်ကို ထည့်သွင်းထားသည်။
  • လုပ်ဆောင်ချက်ကို ထည့်သွင်းထားသည်။ std::any::type_nameအမှားရှာပြင်ခြင်း ရည်ရွယ်ချက်များအတွက် အသုံးဝင်နိုင်သည့် အမျိုးအစားအမည်ကို သင်ရှာဖွေနိုင်စေသည့်၊ ဥပမာအားဖြင့်၊ ပရိုဂရမ်ကို အကောင်အထည်ဖော်နေစဉ်တွင် မည်သည့် function အမျိုးအစားကို ခေါ်ဆိုသည်ကို သိရှိနိုင်သည်-

    fn gen_value‹T: မူရင်း>() -> T {
    println!("ဥပမာ {}", std::any::type_name::‹T›());
    မူရင်း-:default()
    }

    fn ပင်မ() {
    _: i32 = gen_value(); # "i32" ကို ရိုက်နှိပ်ပါမည်။
    _: စာကြောင်း = gen_value(); # "alloc::string::String" ကို ရိုက်နှိပ်မည်
    }

  • စံစာကြည့်တိုက်၏ တိုးချဲ့လုပ်ဆောင်မှုများ-
    • slice::{concat, connect, join} သည် ယခုအခါ &T အပြင် တန်ဖိုး &[T] ကို &T;
    • "*const T" နှင့် "*mut T" အမှတ်အသားကို ယခုအကောင်အထည်ဖော်လိုက်ပါ::Unpin;
    • "Arc‹[T]›" နှင့် "Rc‹[T]›" FromIterator‹T› ကို ယခုအကောင်အထည်ဖော်လိုက်ပါ။
    • iter-:{StepBy, Peekable, Take} ယခု DoubleEndedIterator ကို အကောင်အထည်ဖော်လိုက်ပါ။
    • ascii::EscapeDefault သည် Clone နှင့် Display ကိုအကောင်အထည်ဖော်သည်။
  • တည်ငြိမ်အောင်ပြုလုပ်ထားသော နည်းလမ်းများအပါအဝင် API ၏ အပိုင်းအသစ်ကို တည်ငြိမ်သောအမျိုးအစားသို့ လွှဲပြောင်းထားပါသည်။
    • ‹*const T›::cast, ‹*mut T›::cast၊
    • ကြာချိန်-:as_secs_f{32|64}၊
    • ကြာချိန်-:div_duration_f{32|64}၊
    • ကြာချိန်-:div_f{32|64}၊
    • ကြာချိန်-:from_secs_f{32|64}၊
    • ကြာချိန်-:mul_f{32|64}၊
    • အကြွင်းဖြင့် ခွဲခြမ်းစိပ်ဖြာခြင်း။
      ကိန်းပြည့် primitives အားလုံးအတွက် div_euclid နှင့် rem_euclid;

  • ကုန်တင်ကုန်ချပက်ကေ့ဂျ်မန်နေဂျာရှိ မတူညီသောအင်္ဂါရပ်များကိုဖွင့်ရန် “--အင်္ဂါရပ်များ” ရွေးချယ်မှုကို သတ်မှတ်ခြင်းအတွက် ပံ့ပိုးမှု အကြိမ်များစွာ ထပ်ထည့်ထားသည်။
  • compiler က တတိယတစ်ခုပေးတယ်။ အဆင့် ပစ်မှတ်ပလက်ဖောင်း aarch64-uwp-windows-msvc၊ i686-uwp-windows-gnu၊ i686-uwp-windows-msvc၊ x86_64-uwp-windows-gnu၊ x86_64-uwp-windows-msvc ပစ်မှတ်များ၊ armlinux7-unknown- -gnueabi၊ armv7-unknown-linux-musleabi၊ hexagon-unknown-linux-musl နှင့် riscv32i-unknown-none-elf။ တတိယအဆင့်တွင် အခြေခံပံ့ပိုးမှုပါဝင်သော်လည်း အလိုအလျောက်စမ်းသပ်ခြင်းနှင့် တရားဝင်တည်ဆောက်မှုများကို ထုတ်ပြန်ခြင်းမရှိဘဲ။

source: opennet.ru

မှတ်ချက် Add