Izdanje 19.3.0 GraalVM virtualnog stroja i implementacija Pythona, JavaScripta, Rubyja i R-a temeljenih na njemu

Tvrtka Oracle опубликовала izdanje univerzalnog virtualnog stroja GraalVM 19.3.0, koji podržava pokretanje aplikacija u JavaScriptu (Node.js), Python, Ruby, R, svim jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bitcode (C, C++ , hrđa). Grana 19.3 klasificirana je kao izdanje dugoročne podrške (LTS) i izvanredan podrška JDK11, uključujući mogućnost kompajliranja Java koda u izvršne datoteke (GraalVM Native Image). Šifra projekta distribuira licenciran pod GPLv2. U isto vrijeme, izdane su nove verzije Python, JavaScript, Ruby i R jezičnih implementacija koje koriste GraalVM - GraalPython, GraalJS, TartufRubin и FastR.

GraalVM pruža JIT kompajler koji može izvršavati kod iz bilo kojeg skriptnog jezika u hodu u JVM-u, uključujući JavaScript, Ruby, Python i R, a također omogućuje pokretanje izvornog koda u JVM-u pretvorenom u LLVM bitcode. Alati koje nudi GraalVM uključuju debugger neovisan o jeziku, sustav za profiliranje i analizator dodjele memorije. GraalVM omogućuje stvaranje kombiniranih aplikacija s komponentama na različitim jezicima, omogućujući vam pristup objektima i nizovima iz koda na drugim jezicima. Za jezike temeljene na JVM-u postoji prilika stvaranje izvršnih datoteka kompajliranih u strojni kod koji se može izravno izvršiti uz minimalnu potrošnju memorije (upravljanje memorijom i nitima implementirano je povezivanjem okvira Supstrat VM).

Promjene u GraalJS:

  • Osigurana je kompatibilnost s Node.js 12.10.0;
  • Nestandardna globalna svojstva i funkcije onemogućeni su prema zadanim postavkama:
    global (zamijenjen s globalThis, postavljanje js.global-property da se vrati), izvedba (js.performance), print i printErr (js.print);

  • Implementiran prijedlog spajanja Promise.allSettled i nullish, koji su dostupni u načinu ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • Ažurirane ovisnosti ICU4J na 64.2, ASM na 7.1.

promjene u GraalPythonu:

  • Dodani stubovi gc.{enable,disable,isenabled}, implementirani charmap_build, sys.hexversion i _lzma;
  • Ažurirana standardna biblioteka Python 3.7.8;
  • Dodana podrška za NumPy 1.16.4 i Pandas 0.25.0;
  • Dodana timeit podrška;
  • socket.socket je doveden u stanje koje vam omogućuje pokretanje “graalpython -m http.server” i učitavanje nekriptiranih (bez TLS) http resursa;
  • Riješeni problemi s prikazom pandas.DataFrame objekata.
    netočna obrada torki u bajtovima.startswith,
    destrukturiranje dodjele iteratora i korištenje dict.__contains__ za rječnike;

  • Dodana je podrška za ast.PyCF_ONLY_AST, što dozvoljeno osigurati da pytest radi;
  • Dodano podržati PEP 498 (interpolacija niza u literalima);
  • Provedeno oznaka “--python.EmulateJython” za uvoz JVM klasa korištenjem normalne Python sintakse uvoza i hvatanje JVM iznimaka iz Python koda;
  • Poboljšana izvedba parsera, predmemoriranje izuzetaka,
    pristup Python objektima iz JVM koda. Poboljšani rezultati u testovima izvedbe za python kod i izvorna proširenja (izvršavanje izvornih proširenja povrh llvm-a podrazumijeva da se bitcode llvm prosljeđuje GraalVM-u za JIT kompilaciju).

promjene u TruffleRuby:

  • Za kompajliranje izvornih proširenja sada se koristi ugrađeni LLVM toolkit, stvarajući izvorni kod i bit kod. To znači da bi se više izvornih proširenja trebalo kompajlirati iz kutije, eliminirajući većinu problema s povezivanjem;
  • Odvojena instalacija LLVM za instaliranje izvornih proširenja u TruffleRuby;
  • Instaliranje C++ proširenja na TruffleRuby više ne zahtijeva instaliranje libc++ i libc++abi;
  • Licenca ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, isto kao i nedavni JRuby;
  • Dodana podrška za neobavezne argumente u GC.stat;
  • Implementirana metoda Kernel#load s omotom i Kernel#spawn s :chdir;
  • Dodano rb_str_drop_bytes, što je sjajno jer ga OpenSSL koristi;
  • Uključena proširenja unaprijed instaliranih dragulja potrebnih za tračnice novo u Rails 6;
  • Za prevođenje izvornih proširenja koriste se zastavice, kao u MRI;
  • Napravljene su optimizacije performansi i smanjena je potrošnja memorije.

promjene u FastR:

  • Osigurana je kompatibilnost s R 3.6.1;
  • Dodana je preliminarna podrška za pokretanje izvornih proširenja temeljenih na LLVM. Prilikom izrade izvornih R paketa, FastR je konfiguriran za korištenje GraalVM-ovog ugrađenog LLVM alata. Rezultirajuće binarne datoteke sadržavat će i izvorni kod i bit kod LLVM.

    Unaprijed instalirani paketi također su izgrađeni na ovaj način.
    FastR prema zadanim postavkama učitava i pokreće izvorni kod proširenja, ali kada se pokrene s opcijom "--R.BackEnd=llvm", koristit će se bitcode. LLVM backend se može koristiti selektivno za neke R pakete navođenjem "--R.BackEndLLVM=pkg1,pkg2". Ako imate problema s instaliranjem paketa, možete vratiti sve natrag pozivom fastr.setToolchain("native") ili ručnim uređivanjem datoteke $FASTR_HOME/etc/Makeconf;

  • U ovom izdanju, FastR se isporučuje bez GCC runtime biblioteka;
  • Popravljeno curenje memorije;
  • Riješeni problemi pri radu s velikim vektorima (>1GB);
  • Implementiran grepRaw, ali samo za fixed=T.

Izvor: opennet.ru

Dodajte komentar