GraalVM virtual machine ၏ 19.3.0 ကို ဖြန့်ချိပြီး ၎င်းကို အခြေခံ၍ Python၊ JavaScript၊ Ruby နှင့် R တို့ကို အကောင်အထည်ဖော်ခြင်း

Oracle ကုမ္ပဏီ ထုတ်ဝေခဲ့သည် universal virtual machine မှထုတ်လွှတ်သည်။ GraalVM 19.3.0JavaScript (Node.js)၊ Python၊ Ruby၊ R၊ JVM (Java၊ Scala၊ Clojure၊ Kotlin) အတွက် မည်သည့်ဘာသာစကားများနှင့် LLVM ဘစ်ကုဒ်ကို ထုတ်ပေးနိုင်သည့် ဘာသာစကားများ (C၊ C++)၊ သံချေး)။ 19.3 ဌာနခွဲကို Long Term Support (LTS) ထုတ်ဝေမှုနှင့် အမျိုးအစားခွဲခြားထားသည်။ မှတ်မှတ်ရရ ထောက်ခံမှု JDK ၁၃Java ကုဒ်ကို executable files (GraalVM Native Image) အဖြစ်သို့ စုစည်းနိုင်မှု အပါအဝင်။ ပရောဂျက်ကုဒ် ဖြန့်ဝေသည် GPLv2 အောက်တွင် လိုင်စင်ရထားသည်။ တစ်ချိန်တည်းမှာပင်၊ GraalVM ကို အသုံးပြု၍ Python၊ JavaScript၊ Ruby နှင့် R ဘာသာစကား အကောင်အထည်ဖော်မှု ဗားရှင်းအသစ်များကို ထုတ်ပြန်ခဲ့သည် - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM ထောက်ပံ့ JavaScript၊ Ruby၊ Python နှင့် R အပါအဝင် JVM ရှိ မည်သည့် scripting language မှမဆို ကုဒ်ကို အလျင်အမြန်လုပ်ဆောင်နိုင်သော JIT compiler နှင့် LLVM bitcode သို့ပြောင်းထားသော JVM တွင် မူရင်းကုဒ်ကို run နိုင်စေသည်။ GraalVM မှ ပံ့ပိုးပေးသော ကိရိယာများတွင် ဘာသာစကား-လွတ်လပ်သော အမှားရှာပြင်ကိရိယာ၊ ပရိုဖိုင်းစနစ်နှင့် မှတ်ဉာဏ်ခွဲဝေမှုခွဲခြမ်းစိတ်ဖြာမှုတို့ ပါဝင်သည်။ GraalVM သည် အခြားဘာသာစကားဖြင့် ကုဒ်မှ အရာဝတ္ထုများနှင့် အခင်းအကျင်းများကို ဝင်ရောက်ကြည့်ရှုနိုင်စေရန် ဘာသာစကားအမျိုးမျိုးဖြင့် အစိတ်အပိုင်းများနှင့် ပေါင်းစပ်အက်ပ်လီကေးရှင်းများကို ဖန်တီးနိုင်စေသည်။ JVM-based languages ​​တွေအတွက်တော့ ရှိပါတယ်။ အခွင့်အရေး မမ်မိုရီသုံးစွဲမှု အနည်းဆုံးဖြင့် တိုက်ရိုက်လုပ်ဆောင်နိုင်သော စက်ကုဒ်တွင် စုစည်းထားသော executable ဖိုင်များကို ဖန်တီးခြင်း (မူဘောင်ကို ချိတ်ဆက်ခြင်းဖြင့် မန်မိုရီနှင့် thread စီမံခန့်ခွဲမှုကို အကောင်အထည်ဖော်သည် Substrate VM).

GraalJS တွင်ပြောင်းလဲမှုများ:

  • Node.js 12.10.0 နှင့် လိုက်ဖက်မှုရှိသည်ကို အာမခံပါသည်။
  • ပုံမှန်မဟုတ်သော ကမ္ဘာလုံးဆိုင်ရာ ဂုဏ်သတ္တိများနှင့် လုပ်ဆောင်ချက်များကို မူရင်းအားဖြင့် ပိတ်ထားသည်-
    global (globalThis ဖြင့် အစားထိုးသည်၊ js.global-property ကို return ပြန်ရန် သတ်မှတ်ခြင်း)၊ စွမ်းဆောင်ရည် (js.performance)၊ print နှင့် printErr (js.print);

  • ECMAScript 2020 မုဒ် (“-js.ecmascript-version=2020”);
  • မှီခိုမှု ICU4J ကို 64.2၊ ASM မှ 7.1 သို့ အပ်ဒိတ်လုပ်ထားသည်။

အပြောင်းအလဲများ GraalPython တွင်-

  • ထပ်ထည့်ထားသော ချလံ gc။
  • မွမ်းမံထားသော Python 3.7.8 စံပြစာကြည့်တိုက်၊
  • NumPy 1.16.4 နှင့် Pandas 0.25.0 အတွက် ပံ့ပိုးမှု ထပ်လောင်း;
  • ထပ်လောင်းအချိန်ကိုက်ပံ့ပိုးမှု;
  • socket.socket သည် သင့်အား “graalpython -m http.server” ကို run ရန်နှင့် ကုဒ်ဝှက်ထားသော (TLS မပါဘဲ) http အရင်းအမြစ်များကို ဖွင့်ရန် ခွင့်ပြုသည့် အခြေအနေသို့ ဆောင်သွားခဲ့သည်။
  • pandas.DataFrame အရာဝတ္ထုများကို ပြသခြင်းဆိုင်ရာ ပြဿနာများကို ဖြေရှင်းခဲ့သည်။
    bytes.startswith tuples ၏ မှားယွင်းစွာ လုပ်ဆောင်ခြင်း
    ထပ်ဆင့်ရေးသားသူများ၏ တာဝန်ကို ဖျက်စီးခြင်းနှင့် dict.__contains__ အဘိဓာန်များအတွက်၊

  • ast.PyCF_ONLY_AST အတွက် ပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။ ခွင့်ပြုသည်။ pytest အလုပ်လုပ်ကြောင်းသေချာပါစေ။
  • ထပ်ပြောပါသည်။ ထောက်ပံ့ PEP 498 (စာသားများတွင် string interpolation);
  • ဟိုဟာ ပုံမှန် Python တင်သွင်းမှု အထားအသိုကို အသုံးပြု၍ JVM အတန်းများကို တင်သွင်းရန် “--python.EmulateJython” အလံအား တင်သွင်းပြီး Python ကုဒ်မှ JVM ခြွင်းချက်များကို ဖမ်းယူပါ။
  • ပိုကောင်းအောင် parser စွမ်းဆောင်ရည်၊ ခြွင်းချက် ကက်ရှ်၊
    JVM ကုဒ်မှ Python အရာဝတ္ထုများကို ဝင်ရောက်ကြည့်ရှုခြင်း။ python ကုဒ်နှင့် မူရင်း extensions များအတွက် စွမ်းဆောင်ရည်စစ်ဆေးမှုများတွင် ပိုမိုကောင်းမွန်သောရလဒ်များ (llvm ၏ထိပ်ရှိ မူရင်း extensions များကို လုပ်ဆောင်ခြင်းသည် JIT compilation အတွက် GraalVM သို့ bitcode llvm ကိုရောက်ရှိသွားသည်ဟု ဆိုလိုသည်)။

အပြောင်းအလဲများ TruffleRuby တွင်-

  • မူရင်း extensions များကို စုစည်းရန်၊ built-in LLVM toolkit ကို ယခုအသုံးပြုပြီး ဇာတိကုဒ်နှင့် bitcode နှစ်မျိုးလုံးကို ဖန်တီးပါသည်။ ဆိုလိုသည်မှာ ချိတ်ဆက်မှုပြဿနာအများစုကို ဖယ်ရှားပစ်ရန် နောက်ထပ် မူရင်း extension များကို ဘောင်အတွင်းမှ စုစည်းသင့်သည်။
  • TruffleRuby တွင် မူရင်း extension များကို ထည့်သွင်းရန်အတွက် သီးခြား LLVM တပ်ဆင်ခြင်း
  • TruffleRuby တွင် C++ extensions များကို ထည့်သွင်းခြင်းသည် libc++ နှင့် libc++abi ကို ထည့်သွင်းရန်မလိုအပ်တော့ပါ။
  • လိုင်စင်ကို EPL 2.0/GPL 2.0/LGPL 2.1 သို့ အပ်ဒိတ်လုပ်ထားပြီး၊ လတ်တလော JRuby နှင့် အတူတူပင်။
  • GC.stat သို့ ရွေးချယ်နိုင်သော အကြောင်းပြချက်များအတွက် ပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။
  • Kernel#load method ကို wrapper နှင့် Kernel#spawn ဖြင့် :chdir;
  • rb_str_drop_bytes ကို ထပ်ထည့်ထားသောကြောင့် OpenSSL က ၎င်းကို အသုံးပြုသောကြောင့် အလွန်ကောင်းမွန်ပါသည်။
  • Rails 6 ရှိ သံလမ်းအသစ်အတွက် လိုအပ်သော ကြိုတင်ထည့်သွင်းထားသော ကျောက်မျက်ရတနာများ၏ တိုးချဲ့မှုများ ပါဝင်သည်။
  • မူရင်း extension များကို စုစည်းရန်အတွက် MRI တွင်ကဲ့သို့ အလံများကို အသုံးပြုပါသည်။
  • စွမ်းဆောင်ရည် ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ပြီး မှတ်ဉာဏ်သုံးစွဲမှုကို လျှော့ချထားသည်။

အပြောင်းအလဲများ FastR တွင်-

  • R 3.6.1 နှင့် လိုက်ဖက်မှုရှိသည်ကို အာမခံပါသည်။
  • LLVM ကိုအခြေခံ၍ မူရင်း extensions များလည်ပတ်ခြင်းအတွက် ပဏာမပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။ မူရင်း R ပက်ကေ့ဂျ်များကို တည်ဆောက်သောအခါ၊ FastR သည် GraalVM ၏ built-in LLVM ကိရိယာကို အသုံးပြုရန် စီစဉ်ထားသည်။ ရလဒ် binary ဖိုင်များတွင် မူရင်းကုဒ်နှင့် LLVM ဘစ်ကုဒ် နှစ်မျိုးလုံး ပါဝင်ပါမည်။

    ကြိုတင်ထည့်သွင်းထားသော ပက်ကေ့ဂျ်များကိုလည်း ဤနည်းဖြင့် တည်ဆောက်ထားပါသည်။
    FastR သည် မူရင်း တိုးချဲ့ကုဒ်ကို မူရင်းအတိုင်း ဖွင့်ပြီး လုပ်ဆောင်သော်လည်း "--R.BackEnd=llvm" ရွေးချယ်မှုဖြင့် စတင်သောအခါ၊ ဘစ်ကုဒ်ကို အသုံးပြုပါမည်။ "--R.BackEndLLVM=pkg1,pkg2" ကို သတ်မှတ်ခြင်းဖြင့် LLVM နောက်ခံကို အချို့သော R ပက်ကေ့ဂျ်များအတွက် ရွေးချယ်အသုံးပြုနိုင်ပါသည်။ သင့်တွင် ပက်ကေ့ဂျ်များကို ထည့်သွင်းရာတွင် အဆင်မပြေပါက၊ သင်သည် fastr.setToolchain("native") ကိုခေါ်ဆိုခြင်းဖြင့် သို့မဟုတ် $FASTR_HOME/etc/Makeconf ဖိုင်ကို ကိုယ်တိုင်တည်းဖြတ်ခြင်းဖြင့် အရာအားလုံးကို ပြန်ပြောင်းနိုင်ပါသည်။

  • ဤထုတ်ဝေမှုတွင်၊ FastR သည် GCC runtime libraries များမပါဘဲ တင်ပို့သည်။
  • ပုံသေမှတ်ဉာဏ်ယိုစိမ့်မှု;
  • ကြီးမားသော vector များ (>1GB) ဖြင့် အလုပ်လုပ်သောအခါ ပြဿနာများကို ဖြေရှင်းပေးသည်။
  • grepRaw ကို အကောင်အထည်ဖော်ခဲ့သော်လည်း fixed=T အတွက်သာ။

source: opennet.ru

မှတ်ချက် Add