GraalVM virtuaalmasina versioon 19.3.0 ja sellel põhinevad Pythoni, JavaScripti, Ruby ja R juurutused

Oracle'i ettevõte опубликовала universaalse virtuaalmasina väljalase GraalVM 19.3.0, mis toetab rakenduste töötamist JavaScriptis (Node.js), Pythonis, Ruby's, R-s, mis tahes JVM-i keeli (Java, Scala, Clojure, Kotlin) ja keeli, mille jaoks saab genereerida LLVM-i bitikoodi (C, C++). , Rooste). 19.3 haru on klassifitseeritud pikaajalise toe (LTS) väljalaseks ja tähelepanuväärne toetus JDK11, sealhulgas võime kompileerida Java koodi käivitatavateks failideks (GraalVM Native Image). Projekti kood jaotatud litsentsitud GPLv2 alusel. Samal ajal ilmusid GraalVM-i kasutavate Pythoni, JavaScripti, Ruby ja R keele rakenduste uued versioonid - GraalPython, GraalJS, Trühvli Rubiin и FastR.

GraalVM annab JIT-kompilaator, mis suudab JVM-is käigupealt käivitada koodi mis tahes skriptikeelest, sealhulgas JavaScripti, Ruby, Python ja R, ning võimaldab ka LLVM-bitkoodiks konverteeritud JVM-is algkoodi käitamist. GraalVMi pakutavad tööriistad hõlmavad keelest sõltumatut silurit, profiilide koostamise süsteemi ja mälujaotuse analüsaatorit. GraalVM võimaldab luua kombineeritud rakendusi erinevates keeltes komponentidega, võimaldades juurdepääsu objektidele ja massiividele teiste keelte koodist. JVM-põhiste keelte jaoks on olemas võimalus masinkoodiks kompileeritud käivitatavate failide loomine, mida saab minimaalse mälukuluga otse käivitada (mälu ja lõimede haldamine toimub raamistiku ühendamise kaudu Substraadi VM).

Muudatused GraalJS-is:

  • Tagatud on ühilduvus Node.js 12.10.0-ga;
  • Mittestandardsed globaalsed atribuudid ja funktsioonid on vaikimisi keelatud:
    globaalne (asendatakse globalThis-ga, millega määratakse tagastatav js.global-property), jõudlus (js.performance), print ja printErr (js.print);

  • Rakendatud Promise.allArvestatud ja nullitud liitmise ettepanek, mis on saadaval režiimis ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • Värskendatud sõltuvused ICU4J versioonile 64.2, ASM versioonile 7.1.

Muutused GraalPythonis:

  • Lisatud tünnid gc.{enable,disable,isenabled}, rakendatud charmap_build, sys.hexversion ja _lzma;
  • Uuendatud Pythoni 3.7.8 standardteegi;
  • Lisatud NumPy 1.16.4 ja Pandas 0.25.0 tugi;
  • Lisatud timeit tugi;
  • socket.socket on viidud olekusse, mis võimaldab käivitada “graalpython -m http.server” ja laadida krüptimata (ilma TLS-ita) http ressursse;
  • Lahendatud on pandas.DataFrame'i objektide kuvamisega seotud probleemid.
    baitides.startswith, korteežide vale töötlemine
    iteraatorite destruktureerimine ja dict.__contains__ kasutamine sõnastike jaoks;

  • Lisati tugi failile ast.PyCF_ONLY_AST, mis lubatud tagama pytesti toimimise;
  • Lisatud toetama PEP 498 (stringi interpolatsioon literaalides);
  • Rakendatud lipp "--python.EmulateJython", et importida JVM-i klassid tavalist Pythoni impordisüntaksit kasutades ja püüda Pythoni koodist JVM-i erandeid;
  • Parseri jõudlus, erandite vahemälu,
    Pythoni objektidele juurdepääs JVM-koodist. Täiustatud tulemused pythoni koodi ja natiivsete laiendite jõudlustestides (llvm-i peal olevate alglaiendite käivitamine tähendab, et bitkood llvm edastatakse JIT-i kompileerimiseks GraalVM-ile).

Muutused keeles TruffleRuby:

  • Natiivsete laienduste koostamiseks kasutatakse nüüd sisseehitatud LLVM-i tööriistakomplekti, mis loob nii algkoodi kui ka bitikoodi. See tähendab, et rohkem natiivseid laiendeid tuleks komplekteerida, kõrvaldades enamiku linkimisprobleemidest;
  • Eraldi LLVM-i installimine omalaiendite installimiseks TruffleRubysse;
  • C++ laienduste installimine TruffleRubysse ei nõua enam libc++ ja libc++abi installimist;
  • Litsentsi värskendati versioonile EPL 2.0/GPL 2.0/LGPL 2.1, sama mis hiljutine JRuby;
  • Lisatud failile GC.stat valikuliste argumentide tugi;
  • Rakendas Kernel#load meetodi ümbrisega ja Kernel#spawn koos :chdir;
  • Lisatud rb_str_drop_bytes, mis on suurepärane, sest OpenSSL kasutab seda;
  • Kaasas Rails 6 uute rööbaste jaoks vajalike eelinstallitud kalliskivide laiendused;
  • Natiivsete laiendite koostamiseks kasutatakse lippe, nagu MRI puhul;
  • Tehtud on jõudlust optimeeritud ja mälukulu vähendatud.

Muutused FastR-is:

  • Tagatud on ühilduvus R 3.6.1-ga;
  • Lisatud esialgne tugi LLVM-il põhinevate omalaiendite käitamiseks. Natiivsete R-pakettide koostamisel on FastR konfigureeritud kasutama GraalVM-i sisseehitatud LLVM-i tööriistu. Saadud binaarfailid sisaldavad nii natiivset koodi kui ka LLVM-bitkoodi.

    Nii ehitatakse ka eelinstallitud paketid.
    FastR laadib ja käivitab vaikimisi natiivse laienduse koodi, kuid kui käivitatakse valikuga "--R.BackEnd=llvm", kasutatakse bitikoodi. LLVM-i taustaprogrammi saab mõne R-paketi jaoks kasutada valikuliselt, määrates "--R.BackEndLLVM=pkg1,pkg2". Kui teil on pakettide installimisel probleeme, saate kõik tagasi saata, kutsudes välja faili fastr.setToolchain("native") või redigeerides käsitsi faili $FASTR_HOME/etc/Makeconf;

  • Selles versioonis tarnitakse FastR ilma GCC käitusaja teekideta;
  • Parandatud mälulekked;
  • Parandatud probleemid suurte vektoritega (>1GB) töötamisel;
  • Rakendatud grepRaw, kuid ainult fikseeritud=T jaoks.

Allikas: opennet.ru

Lisa kommentaar