GraalVM virtualios mašinos 19.3.0 leidimas ir ja pagrįsti Python, JavaScript, Ruby ir R diegimai

Oracle kompanija опубликовала universalios virtualios mašinos išleidimas GraalVM 19.3.0, kuris palaiko veikiančias programas JavaScript (Node.js), Python, Ruby, R, bet kuriomis JVM kalbomis (Java, Scala, Clojure, Kotlin) ir kalbomis, kurioms galima sugeneruoti LLVM bitų kodą (C, C++). , Rūdys). 19.3 filialas klasifikuojamas kaip ilgalaikio palaikymo (LTS) leidimas ir nepaprastas parama 11 JDK, įskaitant galimybę kompiliuoti Java kodą į vykdomuosius failus (GraalVM Native Image). Projekto kodas išplatino licencijuota pagal GPLv2. Tuo pačiu metu buvo išleistos naujos Python, JavaScript, Ruby ir R kalbų diegimo versijos naudojant GraalVM - GraalPython, GraalJS, TriufelisRuby и GreitasR.

GraalVM teikia JIT kompiliatorius, galintis vykdyti kodą iš bet kurios scenarijų kalbos JVM, įskaitant JavaScript, Ruby, Python ir R, taip pat leidžia paleisti vietinį kodą JVM, konvertuotą į LLVM bitkodą. GraalVM pateikiami įrankiai apima nuo kalbos nepriklausomą derintuvą, profiliavimo sistemą ir atminties paskirstymo analizatorių. GraalVM leidžia kurti kombinuotas programas su komponentais skirtingomis kalbomis, leidžiančius pasiekti objektus ir masyvus iš kodo kitomis kalbomis. JVM pagrįstoms kalboms yra galimybė kurti vykdomuosius failus, sukompiliuotus į mašininį kodą, kurį galima vykdyti tiesiogiai sunaudojant minimalų atminties kiekį (atminties ir gijų valdymas įgyvendinamas sujungiant sistemą Substratas VM).

GraalJS pakeitimai:

  • Užtikrintas suderinamumas su Node.js 12.10.0;
  • Pagal numatytuosius nustatymus nestandartinės visuotinės savybės ir funkcijos yra išjungtos:
    global (pakeista globalThis, nustatant grąžinti js.global-property), našumą (js.performance), print ir printErr (js.print);

  • Įdiegtas Promise.allNustatytas ir nulinis sujungimo pasiūlymas, kuris pasiekiamas ECMAScript 2020 režimu („-js.ecmascript-version=2020“);
  • Atnaujintos ICU4J priklausomybės į 64.2, ASM į 7.1.

Pokyčiai GraalPython:

  • Pridėta stubų gc.{enable,disable,isenabled}, įdiegta charmap_build, sys.hexversion ir _lzma;
  • Atnaujinta Python 3.7.8 standartinė biblioteka;
  • Pridėtas NumPy 1.16.4 ir Pandas 0.25.0 palaikymas;
  • Pridėtas timeit palaikymas;
  • socket.socket buvo perkelta į būseną, leidžiančią paleisti „graalpython -m http.server“ ir įkelti nešifruotus (be TLS) http išteklius;
  • Ištaisytos pandos.DataFrame objektų rodymo problemos.
    neteisingas eilučių apdorojimas baituose.startswith,
    naikinimo iteratorių priskyrimas ir dict.__contains__ naudojimas žodynams;

  • Pridėtas ast.PyCF_ONLY_AST palaikymas, kuris leidžiama užtikrinti, kad pytest veiktų;
  • Pridėta parama PEP 498 (stygų interpoliacija literalais);
  • Įgyvendinta žyma „--python.EmulateJython“, kad importuotumėte JVM klases naudojant įprastą Python importo sintaksę ir gautumėte JVM išimtis iš Python kodo;
  • Patobulintas analizatoriaus našumas, išimtis talpykloje,
    pasiekti Python objektus iš JVM kodo. Patobulinti python kodo ir vietinių plėtinių našumo testų rezultatai (vykdant vietinius plėtinius ant llvm reiškia, kad bitkodas llvm perduodamas GraalVM JIT kompiliavimui).

Pokyčiai TruffleRuby:

  • Vietiniams plėtiniams kompiliuoti dabar naudojamas integruotas LLVM įrankių rinkinys, sukuriantis ir vietinį kodą, ir bitų kodą. Tai reiškia, kad daugiau vietinių plėtinių turėtų būti sudaryti iš karto, kad būtų išvengta daugumos susiejimo problemų;
  • Atskiras LLVM diegimas vietiniams plėtiniams įdiegti „TruffleRuby“;
  • Norint įdiegti C++ plėtinius TruffleRuby, nebereikia diegti libc++ ir libc++abi;
  • Licencija atnaujinta į EPL 2.0/GPL 2.0/LGPL 2.1, tokia pati kaip naujausia JRuby;
  • Pridėta GC.stat pasirenkamų argumentų palaikymas;
  • Įdiegtas metodas Kernel#load su įvyniotuvu ir Kernel#spawn su :chdir;
  • Pridėta rb_str_drop_bytes, o tai puiku, nes jį naudoja OpenSSL;
  • Įtraukti iš anksto įdiegtų brangakmenių plėtiniai, reikalingi bėgiams, naujiems Rails 6;
  • Norint sudaryti vietinius plėtinius, naudojamos vėliavėlės, kaip ir MRT;
  • Atliktas našumo optimizavimas ir sumažintas atminties suvartojimas.

Pokyčiai FastR:

  • Užtikrintas suderinamumas su R 3.6.1;
  • Pridėtas preliminarus vietinių plėtinių, pagrįstų LLVM, palaikymas. Kuriant vietinius R paketus, FastR sukonfigūruojamas naudoti GraalVM integruotus LLVM įrankius. Gautuose dvejetainiuose failuose bus ir vietinis kodas, ir LLVM bitų kodas.

    Taip kuriami ir iš anksto įdiegti paketai.
    „FastR“ įkelia ir paleidžia savąjį plėtinio kodą pagal numatytuosius nustatymus, tačiau paleidus su parinktimi „--R.BackEnd=llvm“, bus naudojamas bitų kodas. Kai kuriems R paketams LLVM gali būti naudojamas pasirinktinai, nurodant "--R.BackEndLLVM=pkg1,pkg2". Jei kyla problemų diegiant paketus, viską galite grąžinti iškviesdami fastr.setToolchain("native") arba rankiniu būdu redaguodami failą $FASTR_HOME/etc/Makeconf;

  • Šiame leidime FastR pristatoma be GCC vykdymo bibliotekų;
  • Ištaisyti atminties nutekėjimai;
  • Ištaisytos problemos dirbant su dideliais vektoriais (>1GB);
  • Įdiegtas grepRaw, bet tik Fix=T.

Šaltinis: opennet.ru

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