Release 19.3.0 av den virtuella GraalVM-maskinen och implementeringar av Python, JavaScript, Ruby och R baserade på den

Oracle Company опубликовала lansering av en universell virtuell maskin GraalVM 19.3.0, som stöder körning av applikationer i JavaScript (Node.js), Python, Ruby, R, alla språk för JVM (Java, Scala, Clojure, Kotlin) och språk för vilka LLVM-bitkod kan genereras (C, C++ , Rost). 19.3-grenen klassificeras som en Long Term Support (LTS) release och anmärkningsvärd Stöd JDK11, inklusive möjligheten att kompilera Java-kod till körbara filer (GraalVM Native Image). Projektkod levererad av licensierad under GPLv2. Samtidigt släpptes nya versioner av Python, JavaScript, Ruby och R språkimplementeringar med GraalVM - GraalPython, GraalJS, TryffelRuby и FastR.

GraalVM erbjuder En JIT-kompilator som kan exekvera kod från vilket skriptspråk som helst i JVM, inklusive JavaScript, Ruby, Python och R, och som även gör det möjligt att köra inbyggd kod i JVM konverterad till LLVM-bitkod. Verktygen som tillhandahålls av GraalVM inkluderar en språkoberoende debugger, ett profileringssystem och en minnesallokeringsanalysator. GraalVM gör det möjligt att skapa kombinerade applikationer med komponenter på olika språk, vilket gör att du kan komma åt objekt och arrayer från kod på andra språk. För JVM-baserade språk finns det möjlighet skapa körbara filer kompilerade till maskinkod som kan köras direkt med minimal minnesförbrukning (minne och trådhantering implementeras genom att ansluta ramverket Substrat VM).

Ändringar i GraalJS:

  • Kompatibilitet med Node.js 12.10.0 säkerställs;
  • Icke-standardiserade globala egenskaper och funktioner är inaktiverade som standard:
    global (ersatt av globalThis, inställning av js.global-property för att returnera), prestanda (js.performance), print och printErr (js.print);

  • Implementerat Promise.allSettled och nullish koalesceringsförslag, som är tillgängliga i ECMAScript 2020-läge ("-js.ecmascript-version=2020");
  • Uppdaterade beroenden ICU4J till 64.2, ASM till 7.1.

Förändringar i GraalPython:

  • Lade till stubbar gc.{enable,disable,isenabled}, implementerade charmap_build, sys.hexversion och _lzma;
  • Uppdaterat Python 3.7.8 standardbibliotek;
  • Tillagt stöd för NumPy 1.16.4 och Pandas 0.25.0;
  • Lagt till timeit-stöd;
  • socket.socket har förts till ett tillstånd som låter dig köra "graalpython -m http.server" och ladda okrypterade (utan TLS) http-resurser;
  • Fixade problem med att visa pandas.DataFrame-objekt.
    felaktig bearbetning av tupler i bytes.startswith,
    destruktureringstilldelning av iteratorer och användning av dict.__contains__ för ordböcker;

  • Lade till stöd för ast.PyCF_ONLY_AST, som tillåten se till att pytest fungerar;
  • Lagt till stöd PEP 498 (stränginterpolation i bokstaver);
  • Genomfört flaggan "--python.EmulateJython" för att importera JVM-klasser med normal Python-importsyntax och fånga JVM-undantag från Python-kod;
  • Förbättrad parserprestanda, undantagscache,
    åtkomst till Python-objekt från JVM-kod. Förbättrade resultat i prestandatester för pythonkod och inbyggda tillägg (att köra inbyggda tillägg ovanpå llvm innebär att bitkod llvm skickas till GraalVM för JIT-kompilering).

Förändringar i TruffleRuby:

  • För att kompilera inbyggda tillägg används nu den inbyggda LLVM-verktygslådan, som skapar både inbyggd kod och bitkod. Detta innebär att fler inbyggda tillägg bör kompileras direkt, vilket eliminerar de flesta länkningsproblem;
  • Separat LLVM-installation för installation av inbyggda tillägg i TruffleRuby;
  • Installation av C++-tillägg på TruffleRuby kräver inte längre installation av libc++ och libc++abi;
  • Licens uppdaterad till EPL 2.0/GPL 2.0/LGPL 2.1, samma som senaste JRuby;
  • Lade till stöd för valfria argument till GC.stat;
  • Implementerade Kernel#load-metoden med en wrapper och Kernel#spawn med :chdir;
  • Lade till rb_str_drop_bytes, vilket är bra eftersom OpenSSL använder det;
  • Inkluderade förlängningar av förinstallerade ädelstenar som behövs för skenor nya i Rails 6;
  • För att kompilera native extensions används flaggor, som vid MRI;
  • Prestandaoptimeringar har gjorts och minnesförbrukningen har minskat.

Förändringar i FastR:

  • Kompatibilitet med R 3.6.1 säkerställs;
  • Lade till preliminärt stöd för att köra inbyggda tillägg baserade på LLVM. När man bygger inbyggda R-paket är FastR konfigurerad att använda GraalVM:s inbyggda LLVM-verktyg. De resulterande binära filerna kommer att innehålla både ursprunglig kod och LLVM-bitkod.

    Förinstallerade paket är också byggda på detta sätt.
    FastR laddar och kör inbyggd tilläggskod som standard, men när den startas med alternativet "--R.BackEnd=llvm" kommer bitkod att användas. LLVM-backend kan användas selektivt för vissa R-paket genom att ange "--R.BackEndLLVM=pkg1,pkg2". Om du har problem med att installera paket kan du återställa allt genom att anropa fastr.setToolchain("native") eller manuellt redigera filen $FASTR_HOME/etc/Makeconf;

  • I den här utgåvan skickas FastR utan GCC-körtidsbiblioteken;
  • Fixade minnesläckor;
  • Fixade problem vid arbete med stora vektorer (>1GB);
  • Implementerat grepRaw, men bara för fix=T.

Källa: opennet.ru

Lägg en kommentar