Օրակլ ընկերությունը համընդհանուր վիրտուալ մեքենայի թողարկում , JavaScript (Node.js), Python, Ruby, R, JVM-ի ցանկացած լեզվով (Java, Scala, Clojure, Kotlin) և լեզուներով, որոնց համար կարող է կազմվել LLVM բիթոդ (C, C++, Rust) կիրառությունների կ запускման աջակցությունը: 19.3 ճյուղը դասակարգվում է երկարատև աջակցությամբ (LTS) թողարկումների կատեգորիա և աջակցության , այդ թվում Java–ի քոդի կատարելու ֆայլերի (GraalVM Native Image) կոմպիլացիայի հնարավորություն։ Ծրագրի կոդը GPLv2 լիցենզիայի տակ։ Միաժամանակ թողարկվել են Python, JavaScript, Ruby և R լեզուներ օգտագործող GraalVM реализации новых версий: , , և .
GraalVM JIT-կոմպիլատոր, որը կարող է ընթացիկ կոդը JVM-ում կատարելու ցանկացած սկրիպտային լեզուներից, ներառյալ JavaScript, Ruby, Python և R, ինչպես նաև հնարավորություն է տալիս աշխատանքային կոդը JVM-ում վերափոխել LLVM բիթոդի։ GraalVM-ի տրամադրված գործիքները ներառում են լեզվային անկախության ծրագիր, պրոֆիլավորում և հիշողության բաշխման վերլուծող։ GraalVM հնարավորություն է ընծայում մշակել համակցված ծրագրեր տարբեր լեզուներ ունեցող բաղադրիչներով, հնարավորություն տալով դիմել այլ լեզուների կոդերի օբյեկտներին և զանգվածներին։ JVM բազայի լեզուների համար կազմակերպել մեքենայի կոդում կոմպիլացված կատարելագործված ֆայլեր, որոնք կարելի է ուղղակի կատարելով նվազագույն հիշողության սպառմամբ (հիշողության և թափաների կառավարումը իրականացվում է Substrate VM ցանցի միջոցով) ).
:
- 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
