Рэліз 19.3.0 віртуальнай машыны GraalVM і рэалізацый Python, JavaScript, Ruby і R на яе аснове

Кампанія Oracle апублікавала выпуск універсальнай віртуальнай машыны GraalVM 19.3.0, якая падтрымлівае запуск прыкладанняў на JavaScript (Node.js), Python, Ruby, R, любых мовах для JVM (Java, Scala, Clojure, Kotlin) і мовах, для якіх можа фармавацца біткод LLVM (C, C++, Rust). Галінка 19.3/XNUMX аднесена да катэгорыі выпускаў з працяглым тэрмінам падтрымкі (LTS) і характэрная падтрымкай JDK 11, у тым ліку з магчымасцю кампіляцыі Java-кода ў выкананыя файлы (GraalVM Native Image). Код праекту распаўсюджваецца пад ліцэнзіяй GPLv2. Адначасова выпушчаны новыя версіі выкарыстоўвалых GraalVM рэалізацый моў Python, JavaScript, Ruby і R GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM дае JIT-кампілятар, які можа на лёце выконваць у JVM код любых скрыптовых моў, уключаючы JavaScript, Ruby, Python і R, а таксама дае магчымасць запускаць натыўны код у JVM, ператвораны ў біткод LLVM. Які прадстаўляецца GraalVM інструментар уключае незалежныя ад моў праграмавання адладчык, сістэму прафілявання і аналізатар размеркавання памяці. GraalVM дае магчымасць ствараць камбінаваныя прыкладанні з кампанентамі на розных мовах, дазваляючы звяртацца да аб'ектаў і масіваў з кода на іншых мовах. Для моў на базе JVM маецца магчымасць стварэння скампіляваных у машынны код выкананых файлаў, якія можна выконваць напроста з мінімальным спажываннем памяці (кіраванне памяццю і струменямі рэалізавана праз падлучэнне фрэймворка Substrate VM).

Змены ў GraalJS:

  • Забяспечана сумяшчальнасць з Node.js 12.10.0;
  • Адключаны па змаўчанні нестандартныя глабальныя ўласцівасці і функцыі:
    global (заменена на globalThis, для вяртання прадугледжана настройка js.global-property), performance (js.performance), print і printErr (js.print);

  • Рэалізаваны Promise.allSettled і nullish coalescing proposal, якія даступныя ў рэжыме ECMAScript 2020 (“js.ecmascript-version=2020”);
  • Абноўлены залежнасці ICU4J да 64.2/7.1, ASM да XNUMX.

Змены у GraalPython:

  • Дададзеныя заглушкі gc.{enable,disable,isenabled}, рэалізаваны charmap_build, sys.hexversion і _lzma;
  • Абноўлена стандартная бібліятэка Python 3.7.8;
  • Дададзена падтрымка NumPy 1.16.4 і Pandas 0.25.0;
  • Дададзена падтрымка timeit;
  • socket.socket даведзены да стану, які дазваляе запускаць "graalpython -m http.server" і загружаць нешыфраваныя (без TLS) http-рэсурсы;
  • Выпраўлены праблемы, звязаныя з высновай аб'ектаў pandas.DataFrame,
    некарэктнай апрацоўкай картэжаў у bytes.startswith,
    дэструктуравальным прысваеннем ітэратараў і выкарыстаннем dict.__contains__ для слоўнікаў;

  • Дададзена падтрымка ast.PyCF_ONLY_AST, якая дазволіла забяспечыць працу pytest;
  • Дададзена падтрымка PEP 498 (інтэрпаляцыя радкоў у літаралах);
  • Рэалізаваны сцяг "—python.EmulateJython" для імпарту JVM-класаў з дапамогай нармальнага Python-сінтаксісу import і лоўлі JVM-выключэнняў з кода на Python;
  • Палепшана прадукцыйнасць парсера, кэшавання выключэнняў,
    доступу да аб'ектаў Python з JVM-кода. Палепшаны вынікі ў тэстах прадукцыйнасці для кода python і натыўных пашырэнняў (выкананне натыўных пашырэнняў па-над llvm мае на ўвазе, што bitcode llvm перадаецца GraalVM для JIT-кампіляцыі).

Змены у TruffleRuby:

  • Для кампіляцыі натыўных пашырэнняў зараз ужываецца ўбудаваны інструментар LLVM, які стварае і натыўны код, і біткод. Гэта значыць, што больш натыўных пашырэнняў павінны кампілявацца са скрынкі, дазваляючы вырашыць большасць праблем, злучаных з кампаноўкай;
  • Асобная ўстаноўка LLVM для ўстаноўкі натыўных пашырэнняў у TruffleRuby;
  • Для ўсталёўкі C++ пашырэнняў на TruffleRuby зараз не патрабуецца ўсталёўка libc++ і libc++abi;
  • Ліцэнзія абноўлена да EPL 2.0/GPL 2.0/LGPL 2.1, як і ў нядаўнім JRuby;
  • Дададзена падтрымка апцыянальных аргументаў у GC.stat;
  • Рэалізаваны метад Kernel#load з абгорткай і Kernel#spawn з :chdir;
  • Дададзены rb_str_drop_bytes, выдатны тым, што яго выкарыстоўвае OpenSSL;
  • Уключаны пашырэнні прадусталяваных gem-ов, патрэбныя для rails new у Rails 6;
  • Для кампіляцыі натыўных пашырэнняў задзейнічаны сцягі, як у MRI;
  • Унесены аптымізацыі прадукцыйнасці і скарочана спажыванне памяці.

Змены у FastR:

  • Забяспечана сумяшчальнасць з R 3.6.1;
  • Дададзена папярэдняя падтрымка выканання натыўных пашырэнняў на аснове LLVM. Пры зборцы натыўных пакетаў R FastR сканфігураваны для выкарыстання ўбудаванага ў GraalVM інструментара LLVM. Выніковыя бінарныя файлы будуць утрымоўваць і натыўны код і LLVM-біткод.

    Прадусталяваныя пакеты таксама сабраны гэтым чынам.
    FastR загружае і запускае натыўны код пашырэнняў па змаўчанні, але, калі запушчаны з опцыяй "-R.BackEnd=llvm", будзе выкарыстоўвацца біткод. LLVM бэкэнд можна выкарыстоўваць выбарча для некаторых R пакетаў, паказваючы "-R.BackEndLLVM = pkg1, pkg2". У выпадку праблем пры ўсталёўцы пакетаў, можна вярнуць усё назад, выклікаўшы fastr.setToolchain(«native») або ўручную падрэдагаваўшы файл $FASTR_HOME/etc/Makeconf;

  • У гэтым рэлізе FastR пастаўляецца без бібліятэк GCC runtime;
  • Выпраўлены ўцечкі памяці;
  • Выпраўлены праблемы пры працы з вялікімі вектарамі (>1GB);
  • Рэалізаваны grepRaw, але толькі для fixed=T.

Крыніца: opennet.ru

Дадаць каментар