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

Oracle компаниясы жарияланған әмбебап виртуалды машинаны шығару GraalVM 19.3.0, ол JavaScript (Node.js), Python, Ruby, R, JVM (Java, Scala, Clojure, Kotlin) үшін кез келген тілдерде және LLVM бит кодын жасауға болатын тілдерде (C, C++) іске қосылған қолданбаларды қолдайды. , Тот). 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 негізіндегі тілдер үшін бар мүмкіндік жадты минималды тұтынумен тікелей орындалатын машиналық кодқа жинақталған орындалатын файлдарды жасау (жад пен ағынды басқару фреймворкті қосу арқылы жүзеге асырылады) VM субстрат).

GraalJS жүйесіндегі өзгерістер:

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

  • ECMAScript 2020 режимінде қол жетімді (-js.ecmascript-version=2020) Promise.allSettled және нөл біріктіру ұсынысы іске асырылды;
  • Жаңартылған тәуелділіктер 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» іске қосуға және шифрланбаған (TLS жоқ) http ресурстарын жүктеуге мүмкіндік беретін күйге келтірілді;
  • pandas.DataFrame нысандарын көрсетуге қатысты мәселелер түзетілді.
    байттағы кортеждерді қате өңдеу.startswith,
    итераторлардың тағайындалуын бұзу және сөздіктер үшін dict.__contains__ пайдалану;

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

Өзгерістер TruffleRuby ішінде:

  • Түпнұсқа кеңейтімдерді құрастыру үшін енді жергілікті кодты да, бит-кодты да жасайтын кірістірілген LLVM құралдар жинағы пайдаланылады. Бұл байланыстыру мәселелерінің көпшілігін жойып, қосымша жергілікті кеңейтімдер қораптан шығарылуы керек дегенді білдіреді;
  • TruffleRuby жүйесінде жергілікті кеңейтімдерді орнату үшін бөлек LLVM орнату;
  • TruffleRuby жүйесінде C++ кеңейтімдерін орнату енді libc++ және libc++abi орнатуды қажет етпейді;
  • Лицензия соңғы JRuby сияқты EPL 2.0/GPL 2.0/LGPL 2.1 нұсқасына жаңартылды;
  • GC.stat файлына қосымша аргументтерге қолдау қосылды;
  • Орауышпен Kernel#load әдісін және :chdir көмегімен Kernel#spawn әдісін іске асырды;
  • Rb_str_drop_bytes қосылды, бұл тамаша, себебі OpenSSL оны пайдаланады;
  • 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 жұмыс уақыты кітапханаларынсыз жеткізіледі;
  • Тұрақты жадтың ағып кетуі;
  • Үлкен векторлармен (>1 ГБ) жұмыс істеу кезіндегі ақаулар түзетілді;
  • grepRaw енгізілді, бірақ тек fixed=T үшін.

Ақпарат көзі: opennet.ru

пікір қалдыру