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

Օրակլ ընկերությունը հրապարակել է համընդհանուր վիրտուալ մեքենայի թողարկում GraalVM 19.3.0, JavaScript (Node.js), Python, Ruby, R, JVM-ի ցանկացած լեզվով (Java, Scala, Clojure, Kotlin) և լեզուներով, որոնց համար կարող է կազմվել LLVM բիթոդ (C, C++, Rust) կիրառությունների կ запускման աջակցությունը: 19.3 ճյուղը դասակարգվում է երկարատև աջակցությամբ (LTS) թողարկումների կատեգորիա և կարևոր է աջակցության JDK 11, այդ թվում 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 ցանցի միջոցով) Substrate VM).

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

  • Node.js 12.10.0 հետ համատեղելիություն ապահովված է;
  • Զանգվածային գծային հատկություններ և գործառույթները կարգի դրված են՝ ըստ բուն ձեւի
    global (փոխարինվել է globalThis-ով, կա js.global-property պարամետրով վերադառնալու հնարավորություն), performance (js.performance), print և printErr (js.print);
  • Ստեղծված են Promise.allSettled և nullish coalescing proposal, որոնք հասանելի են ECMAScript 2020 վիճակում («—js.ecmascript-version=2020»);
  • ICU4J-ի կախյալությունները թարմացվել են մինչև 64.2, ASM մինչև 7.1։

Որոնումներ GraalPython-ում:

  • Ավելացվել են gc.{enable,disable,isenabled} նախնական ստեղծելու, charmap_build, sys.hexversion և _lzma;
  • Թարմացվել է Python 3.7.8 ստանդարտ գրադարանը;
  • Ավելացված է NumPy 1.16.4 և Pandas 0.25.0 աջակցություն;
  • Ավելացվել է timeit աջակցություն;
  • socket.socket հասցվել է կարողության վիճակ, որ թույլ է տալիս գանձել «graalpython -m http.server» և ներբեռնել ոչ հայելային (անհատական TLS) http-առարկաներ;
  • Դիտարկվել են pandas.DataFrame առարկաների նկատմամբ խնդիրներ,
    ոչ ճիշտ գործընթացի tuple-ների վերամշակում bytes.startswith-ում,
    դեստրուկտիվ թվերի մասնաբաժնման և dict.__contains__ օգտագործելով բառարանների համար;
  • Ավելացված է ast.PyCF_ONLY_AST աջակցությունը, որը հաջողակություն ապահովեց pytest-ի աշխատանքի համար;
  • Ավելացել է աջակցություն PEP 498 (լեզվագիտական ինտերպոլացիա);
  • օպերատոր «^» այն ծրագրավորումների համար՝ նշված ամսաթվից ավելի հին, կատարում է գործողություն, որը հակառակ է «~» օպերատորին։ Օրինակ, «—python.EmulateJython» դրոշ՝ JVM-հաշվարկն ձեռնարկելու համար սովորական Python-սինտաքսիս import-ի միջոցով և Python կոդից JVM-սխալների բռնում;
  • Ավելացված է վերլուծողի, բացառությունների կոշտացման աշխատանքի մակարդակի բարելավում,
    Python-Մենեջերներուն հասանելիություն JVM-կոդի միջոցով։ Օգուտները կատարելագործվել են Python կոդի և տեղից ընդարձակումների կատարողական թեստերում (Native ընդարձակումների կատարումը llvm-ի վրա ենթադրում է, որ llvm-ի bitcode-ն փոխանցվում է GraalVM-ի JIT հավաքագրման համար):

Որոնումներ TruffleRuby-ում:

  • Native ընդարձակումների հավաքագրման համար այժմ օգտագործվում է встроенный LLVM գործիքակազմը, որը ստեղծում է ինչպես native կոդ, այնպես էլ bitcode։ Սա նշանակում է, որ ավելի շատ native ընդարձակումներ պետք է հավաքվեն արձակման ժամանակ՝ լուծելով կոմպոզացիայի հետ կապված խնդիրների մեծ մասը;
  • TruffleRuby-ում native ընդարձակումների կամայական տեղադրման համար առանձին LLVM տեղադրում;
  • TruffleRuby-ում C++ ընդարձակումների տեղադրման համար ոչ մի libc++ և libc++abi տեղադրում չի պահանջվում;
  • Licenses-ի տարբերակը թարմացվել է EPL 2.0/GPL 2.0/LGPL 2.1, ինչպես նաև վերջերս JRuby-ում;
  • GC.stat-ում հավելյալ արգումենտների աջակցություն է ավելացվել;
  • Kernel#load մեթոդը իրականացվել է.wrapper-ով և Kernel#spawn-ով `:chdir`-ով;
  • rb_str_drop_bytes երաշխավորում է, որ այն օգտագործվում է OpenSSL-ի կողմից;
  • rails new-ի համար անհրաժեշտ նախնական gem-երի ընդարձակումների կարգադրումները ներառված են;
  • Native ընդարձակումների հավաքագրման համար կիրառվել են նշաններ, ինչպես MRI-ում;
  • Ներմուծվել են կատարողական օպտիմիզացիաներ և նվազեցված հիշողության օգտագործումը:

Որոնումներ FastR-ում:

  • R 3.6.1-ի կապակցությամբ աջակցություն է ապահովվել;
  • LLVM հիմքով native ընդարձակումների կատարումը ներառված է նախնական աջակցման մակարդակ առևտրում։ R-ի native փաթեթները կազմելու շրջանում FastR-ը կառուցված է GraalVM-ի встроенный LLVM գործիքակազմը օգտագործելու համար։ Արդյունքում ստեղծված վեցերորդ նկարները կ պարունակեն ինչպես native կոդ, այնպես էլ LLVM-bitcode։

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

  • Այս թողարկման FastR-ը տրամադրվում է առանց GCC runtime գրադարանից;
  • Հուշվում են հիշողության արտահոսքեր;
  • Բարձր վեկտորների հետ աշխատելիս (>1GB) խնդիրներ են ուղղվել;
  • Implemented grepRaw only for fixed=T.

Ընտանիք: opennet.ru

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster