ProHoster > блог > Навіны інтэрнэту > Рэліз 19.3.0 віртуальнай машыны GraalVM і рэалізацый Python, JavaScript, Ruby і R на яе аснове
Рэліз 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).
Адключаны па змаўчанні нестандартныя глабальныя ўласцівасці і функцыі:
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.
Дададзеныя заглушкі 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-кампіляцыі).
Для кампіляцыі натыўных пашырэнняў зараз ужываецца ўбудаваны інструментар 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;
Унесены аптымізацыі прадукцыйнасці і скарочана спажыванне памяці.
Дададзена папярэдняя падтрымка выканання натыўных пашырэнняў на аснове 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);