الإصدار 19.3.0 من الجهاز الظاهري GraalVM وتطبيقات Python وJavaScript وRuby وR المبنية عليه

شركة أوراكل опубликовала الافراج عن آلة افتراضية عالمية جراال في إم 19.3.0، الذي يدعم تشغيل التطبيقات في JavaScript (Node.js)، وPython، وRuby، وR، وأي لغات لـ JVM (Java، وScala، وClojure، وKotlin) واللغات التي يمكن إنشاء كود بت LLVM لها (C، C++) ، الصدأ). تم تصنيف الفرع 19.3 على أنه إصدار دعم طويل الأمد (LTS) و مميز دعم JDK 11، بما في ذلك القدرة على تجميع تعليمات Java البرمجية في ملفات قابلة للتنفيذ (GraalVM Native Image). رمز المشروع وزعت من خلال مرخص بموجب GPLv2. وفي الوقت نفسه، تم إصدار إصدارات جديدة من تطبيقات لغة Python وJavaScript وRuby وR باستخدام GraalVM - GraalPython, GraalJS, TruffleRuby и فاست آر.

GraalVM يوفر مترجم JIT يمكنه تنفيذ التعليمات البرمجية من أي لغة برمجة نصية بسرعة في JVM، بما في ذلك JavaScript وRuby وPython وR، ويجعل من الممكن أيضًا تشغيل التعليمات البرمجية الأصلية في JVM المحولة إلى كود بت LLVM. تتضمن الأدوات التي توفرها GraalVM مصحح أخطاء مستقل عن اللغة، ونظام ملفات التعريف، ومحلل تخصيص الذاكرة. GraalVM يجعل من الممكن إنشاء تطبيقات مدمجة بمكونات بلغات مختلفة، مما يسمح لك بالوصول إلى الكائنات والمصفوفات من التعليمات البرمجية بلغات أخرى. بالنسبة للغات المستندة إلى JVM، يوجد فرصة إنشاء ملفات قابلة للتنفيذ مجمعة في كود الجهاز والتي يمكن تنفيذها مباشرة بأقل استهلاك للذاكرة (يتم تنفيذ إدارة الذاكرة والخيط من خلال توصيل إطار العمل الركيزة VM).

التغييرات في GraalJS:

  • التوافق مع Node.js 12.10.0 مضمون؛
  • يتم تعطيل الخصائص والوظائف العامة غير القياسية بشكل افتراضي:
    عالمي (تم استبداله بـ globalThis، مع ضبط خاصية js.global على العودة)، والأداء (js.performance)، والطباعة وprintErr (js.print)؛

  • تم تنفيذ اقتراح الدمج Promise.allSettled والإلغاء، والمتوفر في وضع ECMAScript 2020 ("-js.ecmascript-version=2020")؛
  • تم تحديث التبعيات ICU4J إلى 64.2، وASM إلى 7.1.

التغييرات في جرالبيثون:

  • تمت إضافة بذرة gc.{enable,disable,isenabled}، وتنفيذ charmap_build، وsys.hexversion، و_lzma؛
  • تحديث مكتبة بايثون القياسية 3.7.8؛
  • تمت إضافة دعم لـ NumPy 1.16.4 وPandas 0.25.0؛
  • تمت إضافة دعم الوقت.
  • تم إحضار المقبس.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 إلى GraalVM لتجميع JIT).

التغييرات في تروفل روبي:

  • لتجميع الملحقات الأصلية، يتم الآن استخدام مجموعة أدوات LLVM المضمنة، لإنشاء كل من التعليمات البرمجية الأصلية ورمز البت. وهذا يعني أنه يجب تجميع المزيد من الإضافات الأصلية خارج الصندوق، مما يؤدي إلى التخلص من معظم مشكلات الارتباط؛
  • تثبيت LLVM منفصل لتثبيت الامتدادات الأصلية في TruffleRuby؛
  • لم يعد تثبيت ملحقات C++ على TruffleRuby يتطلب تثبيت libc++ وlibc++abi؛
  • تم تحديث الترخيص إلى EPL 2.0/GPL 2.0/LGPL 2.1، وهو نفس ترخيص JRuby الأخير؛
  • تمت إضافة دعم للوسائط الاختيارية إلى GC.stat؛
  • تم تنفيذ طريقة تحميل Kernel# باستخدام غلاف وKernel#spawn باستخدام :chdir;
  • تمت إضافة rb_str_drop_bytes، وهو أمر رائع لأن OpenSSL يستخدمه؛
  • ملحقات مضمنة للجواهر المثبتة مسبقًا اللازمة للقضبان الجديدة في Rails 6؛
  • لتجميع الملحقات الأصلية، يتم استخدام الأعلام، كما هو الحال في التصوير بالرنين المغناطيسي؛
  • تم إجراء تحسينات في الأداء وتم تقليل استهلاك الذاكرة.

التغييرات في فاست آر:

  • يتم ضمان التوافق مع 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 بدون مكتبات وقت التشغيل الخاصة بدول مجلس التعاون الخليجي؛
  • تسرب الذاكرة الثابتة.
  • تم إصلاح المشكلات عند العمل مع المتجهات الكبيرة (> 1 جيجابايت)؛
  • تم تنفيذ grepRaw، ولكن فقط لـ Fixed=T.

المصدر: opennet.ru

إضافة تعليق