GraalVM virtual mashinasining 19.3.0 versiyasi va unga asoslangan Python, JavaScript, Ruby va R ilovalari

Oracle kompaniyasi e'lon qilindi universal virtual mashinaning chiqarilishi GraalVM 19.3.0JavaScript (Node.js), Python, Ruby, R, JVM uchun har qanday tillar (Java, Scala, Clojure, Kotlin) va LLVM bitkodi yaratilishi mumkin bo'lgan tillar (C, C++) da ishlaydigan ilovalarni qo'llab-quvvatlaydi. , Rust). 19.3 filiali Uzoq muddatli qo'llab-quvvatlash (LTS) versiyasi sifatida tasniflanadi va ajoyib qo'llab-quvvatlash JDK11, shu jumladan Java kodini bajariladigan fayllarga kompilyatsiya qilish qobiliyati (GraalVM Native Image). Loyiha kodi tarqaladi GPLv2 ostida litsenziyalangan. Shu bilan birga, GraalVM-dan foydalangan holda Python, JavaScript, Ruby va R tilini amalga oshirishning yangi versiyalari chiqarildi - GraalPython, GraalJS, TruffleRuby ΠΈ FastR.

GraalVM beradi JVM-dagi istalgan skript tilidan, jumladan JavaScript, Ruby, Python va R-dan kodni tezda bajarishi mumkin bo'lgan JIT kompilyatori, shuningdek, LLVM bitkodiga aylantirilgan JVMda mahalliy kodni ishga tushirish imkonini beradi. GraalVM tomonidan taqdim etilgan vositalar tildan mustaqil tuzatuvchi, profillash tizimi va xotira ajratish analizatorini o'z ichiga oladi. GraalVM turli tillardagi komponentlar bilan birlashtirilgan ilovalar yaratish imkonini beradi, bu sizga boshqa tillardagi koddan ob'ektlar va massivlarga kirish imkonini beradi. JVM-ga asoslangan tillar uchun mavjud imkoniyat to'g'ridan-to'g'ri minimal xotira sarfi bilan bajarilishi mumkin bo'lgan mashina kodiga kompilyatsiya qilingan bajariladigan fayllarni yaratish (xotira va ipni boshqarish ramkani ulash orqali amalga oshiriladi. Substrat VM).

GraalJS-dagi o'zgarishlar:

  • Node.js 12.10.0 bilan muvofiqligi ta'minlangan;
  • Nostandart global xususiyatlar va funktsiyalar sukut bo'yicha o'chirib qo'yilgan:
    global (globalThis bilan almashtirildi, js.global-propertyni qaytarish uchun sozlash), unumdorlik (js.performance), chop etish va printErr (js.print);

  • Amalga oshirilgan Promise.allSettled va nol birlashtirish taklifi, ular ECMAScript 2020 rejimida mavjud (β€œ-js.ecmascript-version=2020”);
  • Yangilangan bog'liqliklar ICU4J 64.2 ga, ASM 7.1 ga.

O'zgarishlar GraalPython da:

  • Qo'shilgan stublar gc.{enable,disable,isenabled}, amalga oshirilgan charmap_build, sys.hexversion va _lzma;
  • Yangilangan Python 3.7.8 standart kutubxonasi;
  • NumPy 1.16.4 va Pandas 0.25.0 uchun qo'shimcha qo'llab-quvvatlash;
  • Timeit qo'llab-quvvatlashi qo'shildi;
  • socket.socket "graalpython -m http.server" ni ishga tushirish va shifrlanmagan (TLS holda) http resurslarini yuklash imkonini beruvchi holatga keltirildi;
  • Pandas.DataFrame obyektlarini ko'rsatish bilan bog'liq muammolar tuzatildi.
    baytlardagi kortejlarni noto'g'ri qayta ishlash.startswith,
    iteratorlarning tuzilishini buzish va lug'atlar uchun dict.__contains__ dan foydalanish;

  • ast.PyCF_ONLY_AST uchun qo'llab-quvvatlash qo'shildi, qaysi ruxsat berilgan pytest ishlashiga ishonch hosil qiling;
  • Qo'shilgan qo'llab-quvvatlash PEP 498 (literallarda satr interpolyatsiyasi);
  • Amalga oshirildi oddiy Python import sintaksisidan foydalangan holda JVM sinflarini import qilish va Python kodidan JVM istisnolarini ushlash uchun "--python.EmulateJython" bayrog'i;
  • Yaxshilangan tahlil qilish ishlashi, istisno keshlash,
    JVM kodidan Python obyektlariga kirish. Python kodi va mahalliy kengaytmalar uchun ishlash testlarida yaxshilangan natijalar (llvm ustiga mahalliy kengaytmalarni bajarish JIT kompilyatsiyasi uchun llvm bitkodi GraalVMga uzatilganligini anglatadi).

O'zgarishlar TruffleRuby-da:

  • Mahalliy kengaytmalarni kompilyatsiya qilish uchun o'rnatilgan LLVM asboblar to'plami endi mahalliy kodni ham, bitkodni ham yaratadi. Bu shuni anglatadiki, ko'proq mahalliy kengaytmalar qutidan tashqarida kompilyatsiya qilinishi kerak, bu esa ulanish bilan bog'liq ko'plab muammolarni bartaraf qiladi;
  • TruffleRuby-da mahalliy kengaytmalarni o'rnatish uchun alohida LLVM o'rnatilishi;
  • TruffleRuby-ga C++ kengaytmalarini o'rnatish endi libc++ va libc++abi-ni o'rnatishni talab qilmaydi;
  • Litsenziya EPL 2.0/GPL 2.0/LGPL 2.1 ga yangilangan, oxirgi JRuby bilan bir xil;
  • GC.stat-ga ixtiyoriy argumentlar uchun qo'shimcha yordam qo'shildi;
  • Kernel#load usulini o'ram bilan va Kernel#spawn bilan :chdir;
  • Rb_str_drop_bytes qo'shildi, bu juda yaxshi, chunki OpenSSL undan foydalanadi;
  • Rails 6-da yangi relslar uchun zarur bo'lgan oldindan o'rnatilgan qimmatbaho toshlarning kengaytmalari kiritilgan;
  • Mahalliy kengaytmalarni kompilyatsiya qilish uchun MRIda bo'lgani kabi bayroqlar qo'llaniladi;
  • Ishlash samaradorligini optimallashtirish amalga oshirildi va xotira sarfi kamaydi.

O'zgarishlar FastR da:

  • R 3.6.1 bilan muvofiqligi ta'minlanadi;
  • LLVM asosida mahalliy kengaytmalarni ishga tushirish uchun dastlabki yordam qo'shildi. Mahalliy R paketlarini yaratishda FastR GraalVM-ning o'rnatilgan LLVM vositalaridan foydalanish uchun sozlangan. Olingan ikkilik fayllar mahalliy kod va LLVM bitkodini o'z ichiga oladi.

    Oldindan o'rnatilgan paketlar ham shu tarzda qurilgan.
    FastR sukut bo'yicha mahalliy kengaytma kodini yuklaydi va ishga tushiradi, lekin "--R.BackEnd=llvm" opsiyasi bilan ishga tushirilganda bitkod ishlatiladi. LLVM backendidan "--R.BackEndLLVM=pkg1,pkg2" ni belgilash orqali ba'zi R paketlar uchun tanlab foydalanish mumkin. Agar paketlarni o'rnatishda muammoga duch kelsangiz, fastr.setToolchain("native") ga qo'ng'iroq qilish yoki $FASTR_HOME/etc/Makeconf faylini qo'lda tahrirlash orqali hamma narsani orqaga qaytarishingiz mumkin;

  • Ushbu nashrda FastR GCC ish vaqti kutubxonalarisiz yuboriladi;
  • Ruxsat etilgan xotira oqish;
  • Katta vektorlar (>1GB) bilan ishlashda muammolar tuzatildi;
  • Amalga oshirilgan grepRaw, lekin faqat fixed=T uchun.

Manba: opennet.ru

a Izoh qo'shish