GraalVM виртуалдык машинасынын 19.3.0 чыгарылышы жана анын негизинде Python, JavaScript, Ruby жана R ишке ашыруулары

Oracle компаниясы жарыяланган универсалдуу виртуалдык машинаны чыгаруу GraalVM 19.3.0JavaScript (Node.js), Python, Ruby, R, JVM үчүн каалаган тилдерде (Java, Scala, Clojure, Kotlin) жана LLVM биткоду түзүлө турган тилдерде (C, C++) иштеп жаткан тиркемелерди колдойт. , Rust). 19.3 бутагы Узак мөөнөттүү колдоо (LTS) чыгаруу жана катары классификацияланат көрүнүктүү колдоо JDK11, анын ичинде Java кодун аткарылуучу файлдарга компиляциялоо мүмкүнчүлүгү (GraalVM Native Image). Долбоор коду жайылуу GPLv2 боюнча лицензияланган. Ошол эле учурда, GraalVM аркылуу Python, JavaScript, Ruby жана R тилдерин ишке ашыруунун жаңы версиялары чыгарылды - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM камсыз кылат JVMде JavaScript, Ruby, Python жана R сыяктуу каалаган скрипт тилинен кодду тез арада аткара алган JIT компилятору, ошондой эле LLVM биткодуна айландырылган JVMде жергиликтүү кодду иштетүүгө мүмкүндүк берет. GraalVM тарабынан берилген куралдарга тилден көз карандысыз мүчүлүштүктөрдү оңдоочу, профилдөө тутуму жана эстутумду бөлүштүрүү анализатору кирет. GraalVM башка тилдердеги коддон объекттерге жана массивдерге кирүүгө мүмкүндүк берүүчү ар кандай тилдердеги компоненттери менен айкалышкан тиркемелерди түзүүгө мүмкүндүк берет. JVM негизделген тилдер үчүн бар мүмкүнчүлүк минималдуу эстутум керектөө менен түздөн-түз аткарыла турган машина кодуна компиляцияланган аткарылуучу файлдарды түзүү (эстутумду жана жипти башкаруу алкакты туташтыруу аркылуу ишке ашырылат. Substrate VM).

GraalJSдеги өзгөрүүлөр:

  • Node.js 12.10.0 менен шайкештик камсыз кылынат;
  • Стандарттуу эмес глобалдык касиеттер жана функциялар демейки боюнча өчүрүлгөн:
    глобалдык (globalThis менен алмаштырылган, кайтуу үчүн js.global-property орнотуу), аткаруу (js.performance), басып чыгаруу жана printErr (js.print);

  • ECMAScript 2020 режиминде жеткиликтүү болгон Promise.allSettled жана жокко чыгарылган бириктирүү сунушу ишке ашырылды (“-js.ecmascript-version=2020”);
  • ICU4J көз карандылыгы 64.2ге, ASM 7.1ге жаңыртылды.

өзгөрүүлөр GraalPython ичинде:

  • Кошулган stub 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 объекттерин көрсөтүү менен байланышкан көйгөйлөр оңдолду.
    байт кортеждерин туура эмес иштетүү.startswith,
    итераторлордун структурасын бузуу жана сөздүктөр үчүн dict.__contains__ колдонуу;

  • ast.PyCF_ONLY_AST үчүн колдоо кошулду, бул уруксат берилген pytest иштешин камсыз кылуу;
  • Кошулган колдоо PEP 498 (литералдардагы сап интерполяциясы);
  • Аткарылган кадимки Python импорттук синтаксисин колдонуу менен JVM класстарын импорттоо жана Python кодунан JVM өзгөчөлүктөрүн кармоо үчүн “--python.EmulateJython” желеги;
  • Жакшыртылган талдоочу иштеши, өзгөчөлүктү кэштөө,
    JVM кодунан Python объекттерине жетүү. Python коду жана жергиликтүү кеңейтүүлөр үчүн аткаруу тесттеринин жакшыртылган натыйжалары (llvm үстүнө жергиликтүү кеңейтүүлөрдү аткаруу биткод llvm JIT компиляциясы үчүн GraalVMге өткөрүлөт дегенди билдирет).

өзгөрүүлөр TruffleRubyде:

  • Түпкү кеңейтүүлөрдү компиляциялоо үчүн, LLVM инструменталдык комплекти азыр колдонулуп, жергиликтүү кодду да, биткодду да түзөт. Бул көптөгөн түпнуска кеңейтүүлөр кутудан чыгып, байланыштыруучу маселелерди жок кылуу керек дегенди билдирет;
  • TruffleRubyде түпнуска кеңейтүүлөрдү орнотуу үчүн өзүнчө LLVM орнотуу;
  • TruffleRubyге C++ кеңейтүүлөрүн орнотуу мындан ары libc++ жана libc++abi орнотууну талап кылбайт;
  • Лицензия акыркы JRuby сыяктуу эле EPL 2.0/GPL 2.0/LGPL 2.1ге жаңыртылган;
  • GC.stat үчүн кошумча аргументтерге колдоо кошулду;
  • Кернел#жүктөө ыкмасын орогуч менен жана Ядро#жүктөө ыкмасын :chdir менен ишке ашырды;
  • Rb_str_drop_bytes кошулду, бул эң сонун, анткени OpenSSL аны колдонот;
  • Rails 6дагы жаңы рельстерге керектүү алдын ала орнотулган асыл таштардын кеңейтүүлөрү камтылган;
  • Түпкү кеңейтүүлөрдү компиляциялоо үчүн MRIдагыдай желектер колдонулат;
  • Ишти оптималдаштыруу жасалды жана эстутум керектөө кыскарды.

өзгөрүүлөр FastRде:

  • R 3.6.1 менен шайкештик камсыз кылынат;
  • LLVM негизинде жергиликтүү кеңейтүүлөрдү иштетүү үчүн алдын ала колдоо кошулду. Түпкү R пакеттерин курууда, FastR GraalVMдин орнотулган LLVM инструменттерин колдонууга конфигурацияланган. Натыйжада экилик файлдар жергиликтүү кодду жана LLVM бит кодун камтыйт.

    Алдын ала орнотулган пакеттер да ушундай жол менен курулган.
    FastR демейки боюнча жергиликтүү кеңейтүү кодун жүктөйт жана иштетет, бирок "--R.BackEnd=llvm" опциясы менен ишке киргизилгенде, биткод колдонулат. LLVM backend "--R.BackEndLLVM=pkg1,pkg2" көрсөтүү менен кээ бир R пакеттери үчүн тандалып колдонулушу мүмкүн. Эгерде сизде пакеттерди орнотууда кыйынчылыктар болсо, fastr.setToolchain("native") дарегине чалып же $FASTR_HOME/etc/Makeconf файлын кол менен түзөтүп, баарын артка кайтара аласыз;

  • Бул чыгарылышта FastR GCC иштөө убактысынын китепканалары жок жөнөтүлөт;
  • Эс тутумдун бузулушу;
  • Чоң векторлор менен иштөөдө чечилген көйгөйлөр (>1 ГБ);
  • grepRaw ишке ашырылды, бирок белгиленген = T үчүн гана.

Source: opennet.ru

Комментарий кошуу