انتشار 19.3.0 ماشین مجازی GraalVM و پیاده سازی Python، JavaScript، Ruby و R بر اساس آن

شرکت اوراکل опубликовала انتشار یک ماشین مجازی جهانی GraalVM 19.3.0، که از برنامه های در حال اجرا در جاوا اسکریپت (Node.js)، پایتون، روبی، R، هر زبانی برای JVM (جاوا، اسکالا، Clojure، Kotlin) و زبان هایی که می توان برای آنها بیت کد LLVM تولید کرد (C، C++) پشتیبانی می کند. ، زنگ). شعبه 19.3 به عنوان نسخه پشتیبانی طولانی مدت (LTS) طبقه بندی می شود و قابل توجه حمایت کردن 11 JDKاز جمله توانایی کامپایل کد جاوا در فایل های اجرایی (GraalVM Native Image). کد پروژه توزیع شده توسط تحت مجوز GPLv2. در همان زمان، نسخه‌های جدید پیاده‌سازی زبان پایتون، جاوا اسکریپت، روبی و R با استفاده از GraalVM منتشر شد - GraalPython, GraalJS, ترافل روبی и FastR.

GraalVM فراهم می کند یک کامپایلر JIT که می تواند کد را از هر زبان برنامه نویسی در جریان JVM، از جمله جاوا اسکریپت، روبی، پایتون و R اجرا کند و همچنین اجرای کدهای بومی در JVM تبدیل شده به بیت کد LLVM را امکان پذیر می کند. ابزارهای ارائه شده توسط GraalVM شامل یک دیباگر مستقل از زبان، یک سیستم پروفایل و یک تحلیلگر تخصیص حافظه است. GraalVM ایجاد برنامه های کاربردی ترکیبی با کامپوننت ها در زبان های مختلف را امکان پذیر می کند و به شما امکان می دهد به اشیا و آرایه ها از کدهای زبان های دیگر دسترسی داشته باشید. برای زبان های مبتنی بر JVM وجود دارد فرصت ایجاد فایل های اجرایی کامپایل شده در کد ماشین که می تواند به طور مستقیم با حداقل مصرف حافظه اجرا شود (مدیریت حافظه و رشته از طریق اتصال فریمورک اجرا می شود. بستر VM).

تغییرات در GraalJS:

  • سازگاری با Node.js 12.10.0 تضمین شده است.
  • ویژگی ها و توابع غیر استاندارد جهانی به طور پیش فرض غیرفعال هستند:
    global (به جای globalThis، تنظیم js.global-property برای بازگشت)، عملکرد (js.performance)، print و printErr (js.print).

  • Promise.all اجرا شد و پیشنهاد ادغام را باطل کرد، که در حالت 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.
  • پشتیبانی زمان اضافه شده.
  • socket.socket به حالتی رسیده است که به شما امکان می دهد "graalpython -m http.server" را اجرا کنید و منابع http رمزگذاری نشده (بدون TLS) را بارگیری کنید.
  • رفع مشکلات مربوط به نمایش اشیاء pandas.DataFrame.
    پردازش نادرست تاپل ها در bytes.startswith،
    تخصیص تخریب ساختار تکرارکننده ها و استفاده از dict.__contains__ برای دیکشنری ها.

  • پشتیبانی برای ast.PyCF_ONLY_AST اضافه شد که مجاز اطمینان حاصل کنید که pytest کار می کند.
  • اضافه پشتیبانی PEP 498 ( درون یابی رشته ای در حروف لفظی )؛
  • اجرا شد پرچم «--python.EmulateJython» برای وارد کردن کلاس‌های JVM با استفاده از نحو معمولی واردات پایتون و گرفتن استثناهای JVM از کد پایتون.
  • عملکرد تجزیه کننده بهبود یافته، ذخیره سازی استثنا،
    دسترسی به اشیاء پایتون از کد JVM. نتایج بهبود یافته در تست‌های عملکرد کد پایتون و پسوندهای بومی (اجرای پسوندهای بومی در بالای llvm به این معنی است که بیت کد llvm برای کامپایل JIT به GraalVM ارسال می‌شود).

تغییرات در TruffleRuby:

  • برای کامپایل پسوندهای بومی، اکنون از جعبه ابزار داخلی LLVM استفاده می شود که هم کد بومی و هم بیت کد ایجاد می کند. این بدان معنی است که پسوندهای بومی بیشتری باید خارج از جعبه کامپایل شوند و اکثر مشکلات پیوند را از بین ببرند.
  • نصب جداگانه LLVM برای نصب پسوندهای بومی در TruffleRuby.
  • نصب پسوندهای C++ در TruffleRuby دیگر نیازی به نصب libc++ و libc++abi ندارد.
  • مجوز به EPL 2.0/GPL 2.0/LGPL 2.1 به روز شد، مانند JRuby اخیر.
  • پشتیبانی از آرگومان های اختیاری به GC.stat اضافه شد.
  • متد Kernel#load را با wrapper و 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" راه اندازی شد، بیت کد استفاده می شود. با مشخص کردن «--R.BackEndLLVM=pkg1,pkg2» می‌توان از backend LLVM برای برخی از بسته‌های R به صورت انتخابی استفاده کرد. اگر در نصب بسته‌ها مشکل دارید، می‌توانید با فراخوانی fastr.setToolchain ("بومی") یا ویرایش دستی فایل $FASTR_HOME/etc/Makeconf همه چیز را برگردانید.

  • در این نسخه، FastR بدون کتابخانه های زمان اجرا GCC ارسال می شود.
  • رفع نشت حافظه؛
  • رفع مشکلات هنگام کار با بردارهای بزرگ (> 1 گیگابایت).
  • grepRaw پیاده سازی شد، اما فقط برای fixed=T.

منبع: opennet.ru

اضافه کردن نظر