GraalVM virtuālās mašīnas laidiens 19.3.0 un Python, JavaScript, Ruby un R implementācijas, pamatojoties uz to

Uzņēmums Oracle опубликовала universālas virtuālās mašīnas izlaišana GraalVM 19.3.0, kas atbalsta lietojumprogrammu palaišanu JavaScript (Node.js), Python, Ruby, R, jebkurās valodās JVM (Java, Scala, Clojure, Kotlin) un valodās, kurām var ģenerēt LLVM bitkodu (C, C++). , Rūsa). 19.3 filiāle ir klasificēta kā ilgtermiņa atbalsta (LTS) laidiens un ievērojams atbalstu JDK 11, tostarp iespēja apkopot Java kodu izpildāmos failos (GraalVM Native Image). Projekta kods izplata licencēts saskaņā ar GPLv2. Tajā pašā laikā tika izlaistas jaunas Python, JavaScript, Ruby un R valodu ieviešanas versijas, izmantojot GraalVM - GraalPython, GraalJS, TrifeleRubīns и FastR.

GraalVM nodrošina JIT kompilators, kas JVM lidojumā var izpildīt kodu no jebkuras skriptu valodas, tostarp JavaScript, Ruby, Python un R, kā arī ļauj palaist vietējo kodu JVM, kas pārveidots par LLVM bitkodu. GraalVM nodrošinātie rīki ietver no valodas neatkarīgu atkļūdotāju, profilēšanas sistēmu un atmiņas piešķiršanas analizatoru. GraalVM ļauj izveidot kombinētas lietojumprogrammas ar komponentiem dažādās valodās, ļaujot piekļūt objektiem un masīviem no koda citās valodās. Uz JVM balstītām valodām ir iespēja izveidojot izpildāmos failus, kas apkopoti mašīnkodā, kurus var izpildīt tieši ar minimālu atmiņas patēriņu (atmiņas un pavedienu pārvaldība tiek īstenota, savienojot ietvaru Substrāta VM).

Izmaiņas GraalJS:

  • Tiek nodrošināta saderība ar Node.js 12.10.0;
  • Pēc noklusējuma ir atspējoti nestandarta globālie rekvizīti un funkcijas:
    globāls (aizstāts ar globalThis, iestatot atgriežamo js.global-property), veiktspēju (js.performance), print un printErr (js.print);

  • Ieviests Promise.allSettled un nullish apvienošanas priekšlikums, kas ir pieejams ECMAScript 2020 režīmā (“-js.ecmascript-version=2020”);
  • Atjauninātas atkarības ICU4J uz 64.2, ASM uz 7.1.

Izmaiņas programmā GraalPython:

  • Pievienoti stubs gc.{enable,disable,isenabled}, ieviesti charmap_build, sys.hexversion un _lzma;
  • Atjaunināta Python 3.7.8 standarta bibliotēka;
  • Pievienots atbalsts NumPy 1.16.4 un Pandas 0.25.0;
  • Pievienots timeit atbalsts;
  • socket.socket ir nogādāts stāvoklī, kas ļauj palaist “graalpython -m http.server” un ielādēt nešifrētus (bez TLS) http resursus;
  • Novērstas problēmas ar pandas.DataFrame objektu parādīšanu.
    nepareiza kortežu apstrāde baitos.sākas ar,
    iteratoru destrukturēšanas piešķiršana un dict.__contains__ izmantošana vārdnīcām;

  • Pievienots atbalsts ast.PyCF_ONLY_AST, kas atļauts nodrošināt, ka pytest darbojas;
  • Pievienots atbalstīt PEP 498 (stīgu interpolācija literālos);
  • Īstenots karodziņš “--python.EmulateJython”, lai importētu JVM klases, izmantojot parasto Python importēšanas sintaksi, un uztvertu JVM izņēmumus no Python koda;
  • Uzlabota parsētāja veiktspēja, izņēmumu saglabāšana kešatmiņā,
    Piekļuve Python objektiem no JVM koda. Uzlaboti rezultāti python koda un vietējo paplašinājumu veiktspējas pārbaudēs (vietējo paplašinājumu izpilde virs llvm nozīmē, ka bitkods llvm tiek nodots GraalVM JIT kompilēšanai).

Izmaiņas valodā TruffleRuby:

  • Vietējo paplašinājumu apkopošanai tagad tiek izmantots iebūvētais LLVM rīku komplekts, kas veido gan vietējo kodu, gan bitkodu. Tas nozīmē, ka vairāk vietējo paplašinājumu ir jākompilē, novēršot lielāko daļu saistīšanas problēmu;
  • Atsevišķa LLVM instalācija vietējo paplašinājumu instalēšanai TruffleRuby;
  • C++ paplašinājumu instalēšanai TruffleRuby vairs nav jāinstalē libc++ un libc++abi;
  • Licence atjaunināta uz EPL 2.0/GPL 2.0/LGPL 2.1, tāda pati kā jaunākā JRuby;
  • Pievienots GC.stat izvēles argumentu atbalsts;
  • Ieviesta Kernel#load metode ar wrapper un Kernel#spawn ar :chdir;
  • Pievienots rb_str_drop_bytes, kas ir lieliski, jo OpenSSL to izmanto;
  • Iekļauti iepriekš instalētu dārgakmeņu paplašinājumi, kas nepieciešami Rails 6 jaunajām sliedēm;
  • Vietējo paplašinājumu apkopošanai tiek izmantoti karodziņi, tāpat kā MRI;
  • Veikta veiktspējas optimizācija un samazināts atmiņas patēriņš.

Izmaiņas programmā FastR:

  • nodrošināta saderība ar R 3.6.1;
  • Pievienots sākotnējais atbalsts vietējo paplašinājumu palaišanai, pamatojoties uz LLVM. Veidojot vietējās R pakotnes, FastR ir konfigurēts, lai izmantotu GraalVM iebūvētos LLVM rīkus. Iegūtie binārie faili saturēs gan vietējo kodu, gan LLVM bitkodu.

    Tādā veidā tiek veidotas arī iepriekš instalētās pakotnes.
    FastR pēc noklusējuma ielādē un palaiž vietējo paplašinājuma kodu, taču, palaižot to ar opciju "--R.BackEnd=llvm", tiks izmantots bitkods. LLVM aizmugursistēmu var izmantot selektīvi dažām R pakotnēm, norādot "--R.BackEndLLVM=pkg1,pkg2". Ja rodas problēmas ar pakotņu instalēšanu, varat visu atgriezt, izsaucot fastr.setToolchain("native") vai manuāli rediģējot failu $FASTR_HOME/etc/Makeconf;

  • Šajā laidienā FastR tiek piegādāts bez GCC izpildlaika bibliotēkām;
  • Fiksētas atmiņas noplūdes;
  • Novērstas problēmas, strādājot ar lieliem vektoriem (>1GB);
  • Ieviests grepRaw, bet tikai fiksēts=T.

Avots: opennet.ru

Pievieno komentāru