Oracle utgĂ„van av den universella virtuella maskinen , som stöder körning av applikationer pĂ„ JavaScript (Node.js), Python, Ruby, R, alla sprĂ„k för JVM (Java, Scala, Clojure, Kotlin) och sprĂ„k som kan kompilera till LLVM bitkod (C, C++, Rust). Version 19.3 kategoriseras som en lĂ„ngsiktig stödversion (LTS) och stödet , inklusive möjligheten att kompilera Java-kod till körbara filer (GraalVM Native Image). Projektkoden Ă€r licensierad under GPLv2. Samtidigt slĂ€pptes nya versioner av GraalVM-implementeringarna av sprĂ„ken Python, JavaScript, Ruby och R â , , och .
GraalVM en JIT-kompilator som kan köras on-the-fly i JVM med kod av alla skriptsprÄk, inklusive JavaScript, Ruby, Python och R, och möjliggör körning av nativ kod i JVM som har konverterats till LLVM bitkod. De verktyg som tillhandahÄlls av GraalVM inkluderar sprÄkupphörende debugger, profileringssystem och minnesanalysator. GraalVM möjliggör skapandet av kombinerade applikationer med komponenter pÄ olika sprÄk, vilket gör det möjligt att komma Ät objekt och arrayer frÄn kod pÄ andra sprÄk. För sprÄk baserade pÄ JVM finns det möjlighet att skapa körbara filer kompilera till maskinkod som kan köras direkt med minimalt minnesutnyttjande (minneshantering och trÄdar hanteras genom att ansluta till ramverket ).
:
- SÀkerstÀlld kompatibilitet med Node.js 12.10.0;
- Ej-standard globala egenskaper och funktioner Àr avstÀngda som standard:
global (ersatt med globalThis, med en instĂ€llning för att Ă„tergĂ„ till js.global-property), performance (js.performance), print och printErr (js.print); - Promise.allSettled och nullish coalescing proposal har implementerats, och som Ă€r tillgĂ€ngliga i ECMAScript 2020-lĂ€get ("âjs.ecmascript-version=2020");
- Beroenden ICU4J har uppdaterats till 64.2, ASM till 7.1.
i GraalPython:
- Stubbar gc.{enable,disable,isenabled} har lagts till, samt charmap_build, sys.hexversion och _lzma har implementerats;
- Standardbiblioteket Python 3.7.8 har uppdaterats;
- Stöd för NumPy 1.16.4 och Pandas 0.25.0 har lagts till;
- stöd för timeit har lagts till;
- socket.socket har nÄtt en punkt dÀr "graalpython -m http.server" kan köras och okrypterade (utan TLS) http-resurser kan laddas;
- Problem relaterade till utdata av pandas.DataFrame-objekt har ÄtgÀrdats,
felaktig behandling av tupler i bytes.startswith,
destrukturerande tilldelning av iteratorer och anvÀndning av dict.__contains__ för ordböcker har ÄtgÀrdats; - Stöd för ast.PyCF_ONLY_AST har lagts till, vilket att sÀkerstÀlla driften av pytest;
- Tillagd PEP 498 (strÀnginterpolering i litteraler);
- flaggan ââpython.EmulateJythonâ för att importera JVM-klasser med vanlig Python-syntax och fĂ„nga JVM-undantag frĂ„n Python-kod;
- Prestandan hos parsern, cache av undantag,
Ätkomst till Python-objekt frÄn JVM-kod har förbÀttrats. Prestandatestresultaten för Python-kod och inhemska tillÀgg har förbÀttrats (exekvering av inhemska tillÀgg ovanpÄ llvm innebÀr att llvm-bitkoden skickas till GraalVM för JIT-kompilering).
i TruffleRuby:
- Den inbyggda LLVM-verktygslÄdan anvÀnds nu för kompilering av inhemska tillÀgg, som skapar bÄde inhemsk kod och bitkod. Det betyder att fler inhemska tillÀgg nu ska kunna kompileras direkt, vilket löser de flesta problem som Àr relaterade till lÀnkning;
- Separat installation av LLVM för installation av inhemska tillÀgg i TruffleRuby;
- För att installera C++ tillÀgg pÄ TruffleRuby krÀvs nu ingen installation av libc++ och libc++abi;
- Licensen har uppdaterats till EPL 2.0/GPL 2.0/LGPL 2.1, liksom i det senaste JRuby;
- Stöd för valfria argument i GC.stat har lagts till;
- Metoden Kernel#load med wrapper och Kernel#spawn med :chdir har implementerats;
- rb_str_drop_bytes har lagts till, sÀrskilt eftersom den anvÀnds av OpenSSL;
- Förinstallerade gem-tillÀgg som behövs för rails new i Rails 6 inkluderas;
- Flaggor har anvÀnts för kompilering av inhemska tillÀgg, precis som i MRI;
- Prestandaoptimeringar har genomförts och minnesanvÀndningen har minskats.
i FastR:
- Kompatibilitet med R 3.6.1 har sÀkerstÀllts;
- Förhandsstöd för exekvering av inhemska tillÀgg baserat pÄ LLVM har lagts till. Vid byggnation av inhemska R-paket Àr FastR konfigurerat för att anvÀnda den inbyggda LLVM-verktygslÄdan i GraalVM. De resulterande binÀrfilerna kommer att innehÄlla bÄde inhemsk kod och LLVM-bitkod.
Förinstallerade paket har ocksÄ byggts pÄ detta sÀtt.
FastR laddar och kör inhemsk kod av tillĂ€gg som standard, men nĂ€r det körs med alternativet ââR.BackEnd=llvmâ kommer bitkod att anvĂ€ndas. LLVM-backend kan selektivt anvĂ€ndas för vissa R-paket genom att ange ââR.BackEndLLVM=pkg1,pkg2â. Vid problem med installation av paket kan man Ă„tergĂ„ genom att anropa fastr.setToolchain(ânativeâ) eller manuellt redigera filen $FASTR_HOME/etc/Makeconf; - I denna version levereras FastR utan GCC-runtimebibliotek;
- Minne lÀckor har ÄtgÀrdats;
- Problem med stora vektorer (>1GB) har ÄtgÀrdats;
- grepRaw har implementerats, men endast för fixed=T.
KĂ€lla: opennet.ru
