Vydanie 19.3.0 virtuálneho stroja GraalVM a na ňom založené implementácie Pythonu, JavaScriptu, Ruby a R

Spoločnosť Oracle опубликовала vydanie univerzálneho virtuálneho stroja GraalVM 19.3.0, ktorý podporuje spúšťanie aplikácií v JavaScripte (Node.js), Pythone, Ruby, R, akýchkoľvek jazykoch pre JVM (Java, Scala, Clojure, Kotlin) a jazykoch, pre ktoré je možné generovať bitkód LLVM (C, C++ , Hrdza). Vetva 19.3 je klasifikovaná ako vydanie dlhodobej podpory (LTS) a pozoruhodné podpora 11. JDK, vrátane schopnosti kompilovať Java kód do spustiteľných súborov (GraalVM Native Image). Kód projektu distribuovaný pod licenciou GPLv2. Zároveň boli vydané nové verzie implementácií jazyka Python, JavaScript, Ruby a R pomocou GraalVM - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM poskytuje Kompilátor JIT, ktorý dokáže spustiť kód z akéhokoľvek skriptovacieho jazyka za behu v JVM, vrátane JavaScriptu, Ruby, Pythonu a R, a tiež umožňuje spúšťať natívny kód v JVM konvertovaný na bitový kód LLVM. Nástroje poskytované GraalVM zahŕňajú jazykovo nezávislý debugger, profilovací systém a analyzátor alokácie pamäte. GraalVM umožňuje vytvárať kombinované aplikácie s komponentmi v rôznych jazykoch, čo vám umožňuje pristupovať k objektom a poliam z kódu v iných jazykoch. Pre jazyky založené na JVM existuje príležitosť vytváranie spustiteľných súborov kompilovaných do strojového kódu, ktorý je možné spustiť priamo s minimálnou spotrebou pamäte (správa pamäte a vlákien je implementovaná prostredníctvom pripojenia rámca Substrát VM).

Zmeny v GraalJS:

  • Je zabezpečená kompatibilita s Node.js 12.10.0;
  • Neštandardné globálne vlastnosti a funkcie sú predvolene zakázané:
    global (nahradené globalThis, nastavenie js.global-property na návrat), performance (js.performance), print a printErr (js.print);

  • Implementovaný návrh na zlúčenie Promise.allSettled a nulovanie, ktoré sú dostupné v režime ECMAScript 2020 („-js.ecmascript-version=2020“);
  • Aktualizované závislosti ICU4J na 64.2, ASM na 7.1.

zmeny v GraalPythone:

  • Pridané stubs gc.{enable,disable,isenabled}, implementované charmap_build, sys.hexversion a _lzma;
  • Aktualizovaná štandardná knižnica Pythonu 3.7.8;
  • Pridaná podpora pre NumPy 1.16.4 a Pandas 0.25.0;
  • Pridaná podpora timeit;
  • socket.socket bol uvedený do stavu, ktorý vám umožňuje spustiť „graalpython -m http.server“ a načítať nešifrované (bez TLS) http zdroje;
  • Opravené problémy so zobrazovaním objektov pandas.DataFrame.
    nesprávne spracovanie n-tic v bajtoch.startswith,
    deštruktívne priradenie iterátorov a použitie diktátu.__obsahuje__ pre slovníky;

  • Pridaná podpora pre ast.PyCF_ONLY_AST, ktorá povolený zabezpečiť, aby pytest fungoval;
  • Pridané podpora PEP 498 (interpolácia reťazca v literáloch);
  • Implementovaná príznak „--python.EmulateJython“ na import tried JVM pomocou normálnej syntaxe importu Pythonu a zachytenie výnimiek JVM z kódu Pythonu;
  • Vylepšený výkon analyzátora, ukladanie do vyrovnávacej pamäte výnimiek,
    prístup k objektom Pythonu z kódu JVM. Vylepšené výsledky testov výkonu pre python kód a natívne rozšírenia (spustenie natívnych rozšírení nad llvm znamená, že bitcode llvm sa odovzdá GraalVM na kompiláciu JIT).

zmeny v TruffleRuby:

  • Na kompiláciu natívnych rozšírení sa teraz používa vstavaná súprava nástrojov LLVM, ktorá vytvára natívny kód aj bitový kód. To znamená, že viac natívnych rozšírení by sa malo skompilovať hneď po vybalení, čím sa eliminuje väčšina problémov s prepájaním;
  • Samostatná inštalácia LLVM na inštaláciu natívnych rozšírení v TruffleRuby;
  • Inštalácia rozšírení C++ na TruffleRuby už nevyžaduje inštaláciu libc++ a libc++abi;
  • Licencia aktualizovaná na EPL 2.0/GPL 2.0/LGPL 2.1, rovnako ako nedávna JRuby;
  • Pridaná podpora pre voliteľné argumenty do GC.stat;
  • Implementovaná metóda Kernel#load s obalom a Kernel#spawn s :chdir;
  • Pridané rb_str_drop_bytes, čo je skvelé, pretože ho používa OpenSSL;
  • Zahrnuté rozšírenia predinštalovaných drahokamov potrebných pre koľajnice nové v Rails 6;
  • Na zostavenie natívnych rozšírení sa používajú príznaky, ako pri MRI;
  • Uskutočnili sa optimalizácie výkonu a znížila sa spotreba pamäte.

zmeny vo FastR:

  • Je zabezpečená kompatibilita s R 3.6.1;
  • Pridaná predbežná podpora pre spustenie natívnych rozšírení založených na LLVM. Pri vytváraní natívnych R balíkov je FastR nakonfigurovaný tak, aby používal vstavané nástroje LLVM GraalVM. Výsledné binárne súbory budú obsahovať natívny kód aj bitový kód LLVM.

    Takto sú zostavené aj predinštalované balíčky.
    FastR štandardne načíta a spustí natívny kód rozšírenia, ale pri spustení s voľbou "--R.BackEnd=llvm" sa použije bitový kód. Backend LLVM možno použiť selektívne pre niektoré balíky R zadaním "--R.BackEndLLVM=pkg1,pkg2". Ak máte problémy s inštaláciou balíkov, môžete všetko vrátiť späť zavolaním fastr.setToolchain("native") alebo manuálnou úpravou súboru $FASTR_HOME/etc/Makeconf;

  • V tomto vydaní sa FastR dodáva bez runtime knižníc GCC;
  • Opravené úniky pamäte;
  • Opravené problémy pri práci s veľkými vektormi (>1 GB);
  • Implementovaný grepRaw, ale len pre fix=T.

Zdroj: opennet.ru

Pridať komentár