Нашри 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 ҳамчун як нашри Дастгирии дарозмуддат (LTS) тасниф карда мешавад ва назаррас дастгирӣ ҶДК 11, аз ҷумла қобилияти тартиб додани коди Java ба файлҳои иҷрошаванда (GraalVM Native Image). Рамзи лоиҳа паҳн мекунад тибқи GPLv2 литсензия шудааст. Ҳамзамон, версияҳои нави татбиқи забони Python, JavaScript, Ruby ва R бо истифода аз GraalVM бароварда шуданд - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM таъмин менамояд Компилятори JIT, ки метавонад кодро аз ҳама гуна забони скрипт дар JVM, аз ҷумла JavaScript, Ruby, Python ва R иҷро кунад ва инчунин имкон медиҳад, ки коди модариро дар JVM ба биткоди LLVM табдил дода шавад. Асбобҳое, ки аз ҷониби GraalVM пешниҳод шудаанд, як ислоҳкунандаи мустақили забон, системаи профилсозӣ ва таҳлилгари тақсимоти хотираро дар бар мегиранд. GraalVM имкон медиҳад, ки замимаҳои омехта бо ҷузъҳо бо забонҳои гуногун эҷод карда шаванд, ки ба шумо имкон медиҳад, ки объектҳо ва массивҳоро аз код бо забонҳои дигар дастрас кунед. Барои забонҳои JVM асосёфта вуҷуд дорад имконият эҷоди файлҳои иҷрошаванда, ки дар коди мошинӣ тартиб дода шудаанд, ки метавонанд мустақиман бо сарфи ҳадди ақали хотира иҷро шаванд (идоракунии хотира ва ришта тавассути пайваст кардани чаҳорчӯба амалӣ карда мешавад. Substrate VM).

Тағирот дар GraalJS:

  • Мутобиқат бо Node.js 12.10.0 таъмин карда мешавад;
  • Хусусиятҳо ва функсияҳои глобалии ғайристандартӣ бо нобаёнӣ хомӯш карда мешаванд:
    глобалӣ (бо globalThis иваз карда мешавад, гузоштани js.global-property барои бозгашт), иҷроиш (js.performance), чоп ва printErr (js.print);

  • Пешниҳоди муттаҳидсозии Promise.allSettled ва беэътибор, ки дар реҷаи ECMAScript 2020 дастрасанд (“-js.ecmascript-version=2020”);
  • Вобастагии таҷдидшуда ICU4J ба 64.2, ASM ба 7.1.

Тағирот дар 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" -ро иҷро кунед ва захираҳои http-и рамзнашуда (бе TLS) бор кунед;
  • Масъалаҳои собит бо намоиши объектҳои pandas.DataFrame.
    коркарди нодурусти наворҳо дар bytes.startswith,
    вайронкунии таъиноти итераторҳо ва истифодаи dict.__contains__ барои луғатҳо;

  • Дастгирии иловашуда барои ast.PyCF_ONLY_AST, ки иҷозат дода шудааст боварӣ ҳосил кунед, ки pytest кор мекунад;
  • Илова карда шуд дастгирӣ PEP 498 (интерполятсияи сатр бо литерал);
  • Ба амал бароварда шуд парчами "--python.EmulateJython" барои ворид кардани синфҳои JVM бо истифода аз синтаксиси муқаррарии воридоти Python ва гирифтани истисноҳои JVM аз рамзи Python;
  • Фаъолияти беҳтаршудаи таҳлилгар, кэшкунии истисно,
    дастрасӣ ба объектҳои Python аз рамзи JVM. Натиҷаҳои беҳтаршуда дар санҷишҳои иҷроиш барои коди python ва васеъшавии маҳаллӣ (иҷрои васеъшавии маҳаллӣ дар болои llvm маънои онро дорад, ки llvm bitcode ба 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 онро истифода мебарад;
  • Васеъ кардани ганҷҳои қаблан насбшуда, ки барои релсҳои нав дар Rails 6 лозиманд;
  • Барои тартиб додани васеъшавии маҳаллӣ, парчамҳо истифода мешаванд, чуноне ки дар MRI;
  • Иҷрои кор оптимизатсия карда шуд ва истеъмоли хотира кам карда шуд.

Тағирот дар FastR:

  • Мутобиқат бо R 3.6.1 таъмин карда мешавад;
  • Дастгирии пешакӣ барои иҷро кардани васеъшавии маҳаллӣ дар асоси LLVM илова карда шуд. Ҳангоми сохтани бастаҳои аслии R, FastR барои истифодаи асбобҳои дарунсохташудаи LLVM GraalVM танзим карда мешавад. Файлҳои дуии натиҷавӣ ҳам рамзи аслӣ ва ҳам биткоди LLVM-ро дар бар мегиранд.

    Бастаҳои қаблан насбшуда низ ҳамин тавр сохта мешаванд.
    FastR ба таври нобаёнӣ рамзи васеъшавии модариро бор мекунад ва иҷро мекунад, аммо вақте ки бо опсияи "--R.BackEnd=llvm" оғоз мешавад, биткод истифода мешавад. Бозгашти LLVM метавонад ба таври интихобӣ барои баъзе бастаҳои R бо нишон додани "--R.BackEndLLVM=pkg1,pkg2" истифода шавад. Агар шумо ҳангоми насб кардани бастаҳо мушкилот дошта бошед, шумо метавонед бо занг задан ба fastr.setToolchain("native") ё таҳрири дастӣ файли $FASTR_HOME/etc/Makeconf ҳама чизро баргардонед;

  • Дар ин нашр, FastR бе китобхонаҳои вақти кории GCC интиқол дода мешавад;
  • Ихроҷи хотираи собит;
  • Мушкилоти ҳалшуда ҳангоми кор бо векторҳои калон (>1 ГБ);
  • grepRaw амалӣ карда шуд, аммо танҳо барои fixed=T.

Манбаъ: opennet.ru

Илова Эзоҳ