GraalVM վիրտուալ մեքենայի 19.3.0 թողարկումը և դրա հիման վրա Python-ի, JavaScript-ի, Ruby-ի և R-ի իրականացումները

Oracle ընկերությունը опубликовала ունիվերսալ վիրտուալ մեքենայի թողարկում GraalVM 19.3.0, որն աջակցում է JavaScript-ի (Node.js), Python-ի, Ruby-ի, R-ի ցանկացած լեզուների (Java, Scala, Clojure, Kotlin) և այն լեզուների համար, որոնց համար կարող է ստեղծվել LLVM բիթկոդ (C, C++) գործարկվող հավելվածները: , Ժանգ)։ 19.3 մասնաճյուղը դասակարգվում է որպես երկարաժամկետ աջակցության (LTS) թողարկում և ուշագրավ աջակցություն 11 JDK, ներառյալ Java կոդը գործարկվող ֆայլերի մեջ (GraalVM Native Image) կազմելու հնարավորությունը։ Ծրագրի կոդը տարածվում է լիցենզավորված GPLv2-ի համաձայն: Միևնույն ժամանակ թողարկվել են Python, JavaScript, Ruby և R լեզուների ներդրման նոր տարբերակները GraalVM-ի միջոցով. GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM տրամադրում է JIT կոմպիլյատոր, որը կարող է գործարկել կոդ ցանկացած սկրիպտային լեզվից JVM-ում, ներառյալ JavaScript-ը, Ruby-ը, Python-ը և R-ը, ինչպես նաև հնարավորություն է տալիս գործարկել բնիկ կոդը JVM-ում, որը փոխակերպվել է LLVM բիթկոդի: GraalVM-ի տրամադրած գործիքները ներառում են լեզվից անկախ վրիպազերծիչ, պրոֆիլավորման համակարգ և հիշողության բաշխման անալիզատոր: GraalVM-ը հնարավորություն է տալիս տարբեր լեզուներով կոմպոնենտներով համակցված հավելվածներ ստեղծել, ինչը թույլ է տալիս մուտք գործել այլ լեզուների կոդից առարկաներ և զանգվածներ: JVM-ի վրա հիմնված լեզուների համար կա առիթ ստեղծելով գործարկվող ֆայլեր՝ կազմված մեքենայական կոդի մեջ, որոնք կարող են ուղղակիորեն իրականացվել հիշողության նվազագույն սպառմամբ (հիշողության և թելերի կառավարումն իրականացվում է շրջանակը միացնելու միջոցով Substrate VM).

Փոփոխություններ GraalJS-ում:

  • Համատեղելիությունը Node.js 12.10.0-ի հետ ապահովված է;
  • Ոչ ստանդարտ գլոբալ հատկությունները և գործառույթները լռելյայն անջատված են.
    գլոբալ (փոխարինված է globalThis-ով, js.global-property-ի վերադարձի կարգավորում), կատարողականություն (js.performance), print և printErr (js.print);

  • Իրականացված Promise.all Կարգավորվել և չեղյալ համարել միավորման առաջարկը, որոնք հասանելի են ECMAScript 2020 ռեժիմում (“-js.ecmascript-version=2020”);
  • Թարմացված կախվածությունները ICU4J-ից մինչև 64.2, ASM-ը մինչև 7.1:

Փոփոխություններ GraalPython-ում.

  • Ավելացվեցին stubs gc.{enable,disable,isenabled}, ներդրված charmap_build, sys.hexversion և _lzma;
  • Թարմացված Python 3.7.8 ստանդարտ գրադարան;
  • Ավելացվեց NumPy 1.16.4 և Pandas 0.25.0 աջակցություն;
  • Ավելացված ժամանակի աջակցություն;
  • socket.socket-ը բերվել է մի վիճակի, որը թույլ է տալիս գործարկել «graalpython -m http.server» և բեռնել չգաղտնագրված (առանց TLS) http ռեսուրսները.
  • Շտկվել են pandas.DataFrame օբյեկտների ցուցադրման հետ կապված խնդիրները:
    Բայթերով բազմակի սխալ մշակում. startswith,
    itterators-ի ապակառուցողական հանձնարարություն և dict.__contains__ բառարանների օգտագործումը;

  • Ավելացվել է աջակցություն ast.PyCF_ONLY_AST-ի համար, որը թույլատրվում է ապահովել, որ pytest-ը աշխատում է.
  • Ավելացված է աջակցություն PEP 498 (լարային ինտերպոլացիա բառացիներով);
  • Իրականացվել է «--python.EmulateJython» դրոշը՝ JVM դասեր ներմուծելու համար՝ օգտագործելով Python ներմուծման սովորական շարահյուսությունը և բռնելու JVM բացառությունները Python կոդից;
  • Բարելավված վերլուծիչի կատարում, բացառությունների քեշավորում,
    մուտք գործել Python օբյեկտներ JVM կոդից: python կոդի և բնիկ ընդլայնումների կատարողականի թեստերի բարելավված արդյունքները (llvm-ի վերևում տեղական ընդլայնումների կատարումը ենթադրում է, որ bitcode llvm-ը փոխանցվում է GraalVM-ին՝ JIT կազմման համար):

Փոփոխություններ TruffleRuby-ում.

  • Ներկառուցված ընդլայնումները կազմելու համար այժմ օգտագործվում է ներկառուցված LLVM գործիքակազմը՝ ստեղծելով և՛ բնիկ կոդ, և՛ բիթկոդ: Սա նշանակում է, որ ավելի շատ տեղական ընդլայնումներ պետք է կազմվեն առանց տուփի, վերացնելով կապող խնդիրների մեծ մասը.
  • LLVM-ի առանձին տեղադրում՝ TruffleRuby-ում բնիկ ընդլայնումներ տեղադրելու համար;
  • TruffleRuby-ում C++ ընդլայնումներ տեղադրելու համար այլևս չի պահանջվում տեղադրել libc++ և libc++abi;
  • Լիցենզիան թարմացվել է EPL 2.0/GPL 2.0/LGPL 2.1-ի, նույնը, ինչ վերջին JRuby-ն;
  • GC.stat-ում ավելացվել է կամընտիր փաստարկների աջակցություն;
  • Իրականացրել է Kernel#load մեթոդը wrapper-ով և Kernel#spawn՝ :chdir;
  • Ավելացվեց rb_str_drop_bytes, ինչը հիանալի է, քանի որ OpenSSL-ն օգտագործում է այն;
  • Ներառված է նախապես տեղադրված ադամանդների ընդլայնումներ, որոնք անհրաժեշտ են Rails 6-ում նոր ռելսերի համար;
  • Մայրենի ընդարձակումները կազմելու համար օգտագործվում են դրոշներ, ինչպես MRI-ում;
  • Կատարվել են կատարողականի օպտիմալացում, իսկ հիշողության սպառումը կրճատվել է:

Փոփոխություններ FastR-ում:

  • Համատեղելիությունը R 3.6.1-ի հետ ապահովված է;
  • Ավելացվեց նախնական աջակցություն LLVM-ի վրա հիմնված ընդլայնումների գործարկման համար: Native R փաթեթներ կառուցելիս FastR-ը կազմաձևված է GraalVM-ի ներկառուցված LLVM գործիքավորումն օգտագործելու համար: Ստացված երկուական ֆայլերը կպարունակեն և՛ հայրենի կոդ, և՛ LLVM բիթկոդ:

    Նախապես տեղադրված փաթեթները նույնպես կառուցվում են այս կերպ:
    FastR-ը լռելյայն բեռնում և գործարկում է բնօրինակ ընդլայնման կոդը, բայց երբ գործարկվի «--R.BackEnd=llvm» տարբերակով, կօգտագործվի բիթկոդ: LLVM backend-ը կարող է ընտրովի օգտագործվել որոշ R փաթեթների համար՝ նշելով «--R.BackEndLLVM=pkg1,pkg2»: Եթե ​​խնդիրներ ունեք փաթեթների տեղադրման հետ, կարող եք ետ վերադարձնել ամեն ինչ՝ զանգահարելով fastr.setToolchain («հայրենի») կամ ձեռքով խմբագրելով $FASTR_HOME/etc/Makeconf ֆայլը;

  • Այս թողարկումում FastR-ը առաքվում է առանց GCC-ի գործարկման գրադարանների;
  • Հիշողության արտահոսքի շտկում;
  • Խոշոր վեկտորների հետ աշխատելիս (>1ԳԲ) շտկված խնդիրներ;
  • Իրականացված grepRaw, բայց միայն fixed=T-ի համար:

Source: opennet.ru

Добавить комментарий