GraalVM makina birtualaren 19.3.0 bertsioa eta bertan oinarritutako Python, JavaScript, Ruby eta R inplementazioak

Oracle konpainia argitaratuko makina birtual unibertsal baten kaleratzea GraalVM 19.3.0JavaScript (Node.js), Python, Ruby, R, JVMrako edozein hizkuntza (Java, Scala, Clojure, Kotlin) eta LLVM bitkodea sor daitekeen hizkuntzak (C, C++) exekutatzen dituen aplikazioak onartzen ditu. , Herdoila). 19.3 adarra Epe Luzeko Laguntza (LTS) bertsio gisa sailkatuta dago eta nabarmena laguntza JDK11, Java kodea fitxategi exekutagarrietan konpilatzeko gaitasuna barne (GraalVM Native Image). Proiektuaren kodea arabera banatuta GPLv2 lizentziapean. Aldi berean, GraalVM erabiliz Python, JavaScript, Ruby eta R hizkuntza inplementazioen bertsio berriak kaleratu ziren - GraalPython, GraalJS, TruffleRuby ΠΈ AzkarR.

GraalVM It eskaintzen JVM-n edozein script-lengoaitako kodea exekutatu dezakeen JIT konpiladore bat, JavaScript, Ruby, Python eta R barne, eta LLVM bitkode bihurtutako JVMn jatorrizko kodea exekutatzeko aukera ematen du. GraalVM-k eskaintzen dituen tresnen artean, hizkuntzatik independentea den arazketa, profila egiteko sistema eta memoria esleitzeko analizatzaile bat daude. GraalVM-k hizkuntza ezberdinetako osagaiekin aplikazio konbinatuak sortzea ahalbidetzen du, beste hizkuntza batzuetako kodetik objektuak eta arrayak atzitzeko aukera emanez. JVMn oinarritutako hizkuntzetarako badago aukera makina-kodean konpilatutako fitxategi exekutagarriak sortzea, zuzenean exekutatu daitezkeen memoria gutxieneko kontsumoarekin (memoria eta hariaren kudeaketa esparrua konektatuz ezartzen da. Substratua VM).

GraalJS-en aldaketak:

  • Node.js 12.10.0-rekin bateragarritasuna bermatuta dago;
  • Propietate eta funtzio global ez-estandarrak lehenespenez desgaituta daude:
    global (globalThis-ekin ordezkatuta, js.global-property itzultzeko ezarriz), performance (js.performance), print eta printErr (js.print);

  • ECMAScript 2020 moduan erabilgarri dauden Promise.allSettled eta nulish bateratze-proposamena (Β«-js.ecmascript-version=2020Β»);
  • Mendekotasun eguneratuak ICU4J 64.2ra, ASM 7.1era.

aldaketak GraalPython-en:

  • Gc.{enable,disable,isenabled} zirriborroak gehitu dira, charmap_build, sys.hexversion eta _lzma inplementatu dira;
  • Python 3.7.8 liburutegi estandarra eguneratua;
  • NumPy 1.16.4 eta Pandas 0.25.0rako laguntza gehitu da;
  • Timeit euskarria gehitu da;
  • socket.socket β€œgraalpython -m http.server” exekutatu eta zifratu gabeko (TLS gabe) http baliabideak kargatzeko aukera ematen duen egoera batera eraman da;
  • Pandas.DataFrame objektuak bistaratzeko arazoak konpondu dira.
    bytes-en tuplak prozesatu okerra.startswith,
    iteradoren esleipena desegituratzea eta hiztegietarako dict.__contains__ erabiltzea;

  • ast.PyCF_ONLY_AST-rako laguntza gehitu da, hau da baimenduta pytest funtzionatzen duela ziurtatu;
  • Gehituta onartzen PEP 498 (kateen interpolazioa literaletan);
  • Inplementatua "--python.EmulateJython" bandera JVM klaseak Python inportazio sintaxi normala erabiliz inportatzeko eta Python kodeatik JVM salbuespenak harrapatzeko;
  • Analizatzaileen errendimendu hobetua, salbuespenen cachea,
    JVM kodetik Python objektuak atzitzea. Emaitzak hobetu dira python kodearen eta jatorrizko luzapenen errendimendu probetan (luzapen natiboak llvm-en gainean exekutatzen badituzu, bitcode llvm GraalVM-ra pasatzen da JIT konpilaziorako).

aldaketak TruffleRuby-n:

  • Bertako luzapenak konpilatzeko, LLVM tresna-kit integratua erabiltzen da orain, jatorrizko kodea eta bit-kodea sortuz. Horrek esan nahi du jatorrizko luzapen gehiago konpilatu behar direla kaxatik kanpo, estekatze-arazo gehienak ezabatuz;
  • LLVM instalazio bereizia TruffleRuby-n jatorrizko luzapenak instalatzeko;
  • TruffleRuby-n C++ luzapenak instalatzeko jada ez da libc++ eta libc++abi instalatzea eskatzen;
  • Lizentzia EPL 2.0/GPL 2.0/LGPL 2.1era eguneratu da, JRuby-ren berriarekin;
  • Aukerako argumentuen euskarria gehitu da GC.stat-en;
  • Kernel#load metodoa inplementatu du wrapper batekin eta Kernel#spawn :chdir;
  • rb_str_drop_bytes gehitu da, hau da, OpenSSL-k erabiltzen duelako;
  • Rails 6-n errail berrietarako beharrezkoak diren aurrez instalatutako harribitxien luzapenak barne;
  • Bertako luzapenak biltzeko, banderak erabiltzen dira, MRIn bezala;
  • Errendimenduaren optimizazioak egin dira eta memoria-kontsumoa murriztu da.

aldaketak FastR-n:

  • R 3.6.1-ekin bateragarritasuna bermatzen da;
  • LLVMn oinarritutako jatorrizko luzapenak exekutatzeko aurretiazko laguntza gehitu da. Jatorrizko R paketeak eraikitzean, FastR GraalVM-ren LLVM tresna integratua erabiltzeko konfiguratuta dago. Ondorioz, bitar fitxategiek jatorrizko kodea eta LLVM bit-kodea izango dituzte.

    Aurrez instalatutako paketeak ere horrela eraikitzen dira.
    FastR-k berezko luzapen-kodea kargatzen eta exekutatzen du lehenespenez, baina "--R.BackEnd=llvm" aukerarekin abiarazten denean, bitkodea erabiliko da. LLVM backend-a hautatuta erabil daiteke R pakete batzuentzat "--R.BackEndLLVM=pkg1,pkg2" zehaztuz. Paketeak instalatzeko arazoak badituzu, dena itzul dezakezu fastr.setToolchain("natiboa") deituz edo $FASTR_HOME/etc/Makeconf fitxategia eskuz editatuz;

  • Argitalpen honetan, FastR-k GCC exekuzio-liburutegirik gabe bidaltzen du;
  • Memoria ihesak konpondu ditu;
  • Bektore handiekin lan egitean arazoak konpondu dira (>1 GB);
  • grepRaw inplementatu da, baina fixed=T-rako bakarrik.

Iturria: opennet.ru

Gehitu iruzkin berria