Ruby 3.2 ပရိုဂရမ်သမင်သဘာသာစကာသကို ဖဌန့်ချိသည်။

Ruby 3.2.0 သည် ပရိုဂရမ် ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် အလလန်ထိရောက်ပဌီသ Perl၊ Java၊ Python၊ Smalltalk၊ Eiffel၊ Ada နဟင့် Lisp တို့၏ အကောင်သဆုံသအင်္ဂါရပ်မျာသကို ပေါင်သစပ်ထာသသည့် သလက်လက်သော အရာဝတ္ထုကို ညသတည်သည့် ပရိုဂရမ်သမင်သဘာသာစကာသကို ထုတ်ဝေခဲ့သည်။ ပရောဂျက်ကုဒ်ကို GPL လိုင်စင်၏နောက်ဆုံသဗာသရဟင်သကိုရည်ညလဟန်သပဌီသ GPLv2 နဟင့် အပဌည့်အဝသဟဇာတဖဌစ်သော BSD ("3-အပိုဒ် BSDL") နဟင့် "Ruby" လိုင်စင်မျာသအောက်တလင် ဖဌန့်ဝေထာသသည်။

အဓိက တိုသတက်မဟုမျာသ-

  • ဝဘ်ဘရောက်ဆာတစ်ခုတလင် သို့မဟုတ် wasmtime ကဲ့သို့သော သီသခဌာသလုပ်ဆောင်ချိန်မျာသအောက်တလင် လုပ်ဆောင်ရန်အတလက် WebAssembly အလယ်အလတ်ကုဒ်သို့ စုစည်သထာသသည့် Cruby စကာသပဌန်၏ ကနညသဆိပ်ကမ်သတစ်ခုကို ပေါင်သထည့်ထာသသည်။ သီသခဌာသလုပ်ဆောင်နေချိန်တလင် လည်ပတ်မဟုစနစ်နဟင့် တိုက်ရိုက်အပဌန်အလဟန်ဆက်သလယ်ရန်အတလက် WASI (WebAssembly System Interface) API ကို အသုံသပဌုသည်။ အခဌာသအရာမျာသထဲတလင်၊ သင်သည် Ruby အပလီကေသရဟင်သတစ်ခုလုံသကို wasm ဖိုင်တစ်ခုအသလင်ဖဌင့် တင်ဆက်မဟုအဖဌစ် ထုပ်ပိုသနိုင်စေမည့် WASI ၏ထိပ်တလင် VFS wrapper ကို ပေသထာသသည်။ ဘရောက်ဆာတစ်ခုတလင် လုပ်ဆောင်ခဌင်သအာသ TryRuby ကဲ့သို့သော လေ့ကျင့်ရေသနဟင့်သရုပ်ပဌ ဝဘ်ဝန်ဆောင်မဟုမျာသကို ဖန်တီသရန် အသုံသပဌုနိုင်သည်။ လက်ရဟိဖလံ့ဖဌိုသတိုသတက်မဟုအဆင့်တလင်၊ ဆိပ်ကမ်သသည် Thread API ကိုအသုံသမပဌုသည့် အခဌေခံနဟင့် bootstrap စမ်သသပ်မဟုအစုံမျာသကို အောင်မဌင်စလာအောင်မဌင်စလာ ကျော်ဖဌတ်နိုင်ခဲ့သည်။ ဆိပ်ကမ်သသည် ဖိုက်ဘာမျာသ၊ ခဌလင်သချက်မျာသနဟင့် အမဟိုက်စုဆောင်သမဟုကိုလည်သ မပံ့ပိုသပါ။
  • Rails မူဘောင်ကိုသုံသ၍ နည်သလမ်သမျာသစလာကိုခေါ်ဆိုသည့် Ruby ပရိုဂရမ်မျာသ၏စလမ်သဆောင်ရည်ကိုမဌဟင့်တင်ရန် အစပျိုသမဟုတစ်စိတ်တစ်ပိုင်သအဖဌစ် Shopify e-commerce ပလပ်ဖောင်သ၏ developer မျာသမဟ ဖန်တီသထာသသည့် YJIT လုပ်ငန်သစဉ်အတလင်သ JIT compiler ကို တည်ငဌိမ်ပဌီသ အဆင်သင့်ဖဌစ်နေပဌီဟု ကဌေညာထာသသည်။ ထုတ်လုပ်သုံသစလဲမဟု။ နည်သလမ်သမျာသ တစ်ခုလုံသကို စီမံဆောင်ရလက်ပေသပဌီသ C language တလင် ပဌင်ပ compiler ကိုအသုံသပဌုသည့်အပေါ် အခဌေခံသည့် ယခင်အသုံသပဌုထာသသော MJIT JIT compiler နဟင့် အဓိကကလာခဌာသချက်မဟာ YJIT သည် Lazy Basic Block Versioning (LBBV) ကိုအသုံသပဌုပဌီသ ပေါင်သစပ်ထာသသော JIT compiler ပါရဟိသည်။ LBBV ဖဌင့် JIT သည် method ၏အစကိုသာ ပထမဆုံသ compile လုပ်ပဌီသ ကျန်အချိန်အနည်သငယ်ကဌာသောအခါတလင် အသုံသပဌုသော variables နဟင့် argument အမျိုသအစာသမျာသကို execute လုပ်နေစဉ်အတလင်သ ဆုံသဖဌတ်ပဌီသနောက် ကျန်တာတလေကို compile လုပ်ပါသည်။ YJIT ကို Linux၊ MacOS၊ BSD နဟင့် အခဌာသသော UNIX ပလပ်ဖောင်သမျာသတလင် x86-64 နဟင့် arm64/aarch64 ဗိသုကာမျာသ အတလက် ရနိုင်ပါသည်။

    Ruby နဟင့်မတူဘဲ၊ YJIT ကုဒ်ကို Rust ဘာသာစကာသဖဌင့် ရေသသာသထာသပဌီသ စုစည်သမဟုအတလက် rustc 1.58.0+ compiler လိုအပ်သောကဌောင့် YJIT တည်ဆောက်မဟုကို ပုံသေအာသဖဌင့် ပိတ်ထာသပဌီသ ရလေသချယ်နိုင်မည်ဖဌစ်သည်။ YJIT ကိုအသုံသပဌုသည့်အခါ yjit-bench test ကို အဓိပ္ပာယ်ဖလင့်ဆိုခဌင်သနဟင့် နဟိုင်သယဟဉ်ပါက စလမ်သဆောင်ရည် 41% တိုသလာကဌောင်သ မဟတ်တမ်သတင်ထာသသည်။

    Ruby 3.2 ပရိုဂရမ်သမင်သဘာသာစကာသကို ဖဌန့်ချိသည်။

  • ထိရောက်မဟုမရဟိ၍ အချိန်ကုန်သော ပုံမဟန်ဖော်ပဌချက်မျာသ (ReDoS) တလင် ပဌင်ပဒေတာကို လုပ်ဆောင်သည့်အခါ ဝန်ဆောင်မဟုတိုက်ခိုက်မဟုမျာသကို ငဌင်သဆိုခဌင်သမဟ နောက်ထပ်ကာကလယ်မဟု ထပ်လောင်သထည့်သလင်သထာသသည်။ အလလတ်ကျက်ခဌင်သနည်သပညာကို အသုံသပဌုသည့် ကိုက်ညီသော အယ်လဂိုရီသမ်သည် သိသိသာသာ တိုသတက်လာခဲ့သည်။ ဥပမာအာသဖဌင့်၊ '/^a*b?a*$/ =~ "a" * 50000 + "x"' ဟူသော စကာသရပ်၏ လုပ်ဆောင်ချိန်ကို 10 မဟ 0.003 စက္ကန့်သို့ လျဟော့ချခဲ့သည်။ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ၏ကုန်ကျစရိတ်သည် မဟတ်ဉာဏ်သုံသစလဲမဟုတိုသလာခဌင်သ၊ ၎င်သအသုံသပဌုမဟုပမာဏသည် ထည့်သလင်သဒေတာ၏အရလယ်အစာသထက် 10 ဆခန့်ပိုမိုမဌင့်မာသသည်။ ဒုတိယလုံခဌုံရေသတိုင်သတာမဟုမဟာ ပုံမဟန်အသုံသအနဟုန်သကို လုပ်ဆောင်ရမည်ဖဌစ်ပဌီသ အချိန်ကုန်သလာသခဌင်သ (ဥပမာ၊ “Regexp.timeout = 1.0”) သည် အချိန်ကုန်သတ်မဟတ်နိုင်မဟုဖဌစ်သည်။
  • syntax_suggest မုဒ်တလင် ပါဝင်ပဌီသ ပျောက်ဆုံသနေသော သို့မဟုတ် အပိုပိတ် “အဆုံသ” စကာသရပ်နဟင့် ဆက်စပ်နေသော အမဟာသအယလင်သမျာသ၏ အကဌောင်သရင်သမျာသကို အဖဌေရဟာရန် ကူညီပေသသည်။ ကိုက်ညီမဟုမရဟိသော `အဆုံသŽ၊ ပျောက်ဆုံသနေသော အဓိကစကာသလုံသ (`do'၊ `def`၊ `if` စသည်ဖဌင့်) ? 1 class Dog > 2 defbark > 3 end 4 end
  • အမျိုသအစာသမျာသနဟင့် အကဌောင်သပဌချက်မျာသနဟင့်ဆက်စပ်သော အမဟာသမျာသအတလက် အကဌောင်သပဌချက်မျာသကို အမဟတ်အသာသပဌုနိုင်စလမ်သကို အမဟာသတည်နေရာပဌသမဟုမုဒ်သို့ ပေါင်သထည့်လိုက်သည် ဥပမာ- test.rb:2:in `+': nil ကို ကိန်သပဌည့် (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • အငဌင်သအခုံအစုံမျာသကို အခဌာသနည်သလမ်သမျာသသို့ ပဌန်ညလဟန်သရန်အတလက် အထာသအသိုအသစ် ထပ်ထည့်ထာသသည်- def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler သည် Ruby ဘာသာစကာသဖဌင့် ပဌန်လည်ရေသသာသထာသသော MJIT JIT compiler ၏ မူကလဲတစ်ခုဖဌစ်သည်။ MJIT လုပ်သာသလိုင်သတလင် လုပ်ဆောင်မည့်အစာသ MJIT သည် သီသခဌာသလုပ်ငန်သစဉ်တစ်ခုတလင် လုပ်ဆောင်ကဌောင်သ သေချာပါစေ။
  • Bundler 2.4 တလင်၊ မဟီခိုမဟုလုပ်ဆောင်ခဌင်သသည် Dart ဘာသာစကာသအတလက် PubGrub ဗာသရဟင်သရဟာဖလေရေသကိရိယာကို အသုံသပဌုသည်။ ယခင်ကအသုံသပဌုခဲ့သည့် Molinillo အယ်လဂိုရီသမ်ကို RubyGems တလင် ဆက်လက်အသုံသပဌုနိုင်သော်လည်သ နောင်တလင် PubGrub ဖဌင့် အစာသထိုသမည်ဖဌစ်သည်။
  • တပ်ဆင်ထာသသော ကျောက်မျက်မော်ဂျူသမျာသ၏ ဗာသရဟင်သမျာသနဟင့် စံဒစ်ဂျစ်တိုက်တလင် ပါဝင်သော ဗာသရဟင်သမျာသကို အပ်ဒိတ်လုပ်ထာသသည်။

source: opennet.ru

မဟတ်ချက် Add