مرجع
آخر الزيارات

جراعل في إم

1٬390 كلمة•0 مشاهدة•🗒️ منذ 20 ساعة
باختصار: جراعل في إم عبارة عن عدة تطوير Java (JDK) مكتوبة بلغة Java. في هذه المقالة 15 قسماً: «FastR: تطبيق لغة R»، «دعم اللغة ووقت التشغيل» و«الصورة الأصلية GraalVM» وغيرها.
المحتويات
  1. FastR: تطبيق لغة R
  2. دعم اللغة ووقت التشغيل
  3. الصورة الأصلية GraalVM
  4. GraalPy: تطبيق لغة بايثون 3
  5. مترجم GraalVM
  6. إطار تنفيذ لغة Truffle
  7. تضمين اللغات
  8. تاريخ
  9. GraalWasm: تطبيق WebAssembly
  10. المكونات
  11. تبني
  12. دعم الأدوات القائمة على الأجهزة
  13. assert x == 42;
  14. الأهداف
  15. الإصدارات

بدايةً، جراعل في إم عبارة عن عدة تطوير Java (JDK) مكتوبة بلغة Java. يستند توزيع GraalVM مفتوح المصدر ل GraalVM على OpenJDK ، ويعتمد التوزيع المؤسسي على Oracle JDK. إلى جانب ترجمة في الوقت المناسب (JIT) ، يمكن لـ GraalVM ترجمة تطبيق Java مسبقًا. يسمح هذا بتهيئة أسرع، وأداء أكبر في وقت التشغيل، وتقليل استهلاك الموارد، ولكن الملف القابل للتنفيذ الناتج لا يمكن تشغيله إلا على النظام الأساسي الذي تم ترجمته من أجله. ويوفر لغات برمجة إضافية وأوضاع التنفيذ. تم توزيع الإصدار الأول الجاهز للإنتاج، GraalVM 19.0، في مايو 2019. أحدث إصدار هو GraalVM لـ JDK 21، والذي أصبح متاحًا في سبتمبر 2023. وفيما يلي تفاصيل أوسع عن ذلك.

من جانب آخر، LLVM Runtime هو وقت تشغيل لتنفيذ اللغات التي يمكن تحويلها إلى كود بت LLVM.

وعلى صعيد آخر، GraalVM Polyglot API ، واجهة برمجة تطبيقات لتضمين كود لغة الضيف في تطبيق مضيف يستند إلى Java.

  • تشمل الفروق الرئيسية بين GraalVM وJDK الأساسي ما يلي:
  • مترجم Graal ، مترجم في الوقت المناسب (JIT) .
  • GraalVM Native Image هي تقنية لترجمة تطبيقات Java مسبقًا.

وعلى صعيد آخر، JavaScript Runtime، وقت تشغيل JavaScript متوافق مع ECMAScript 2023، فضلًا عن Node.js.

وفي السياق ذاته، إطار تنفيذ لغة Truffle و GraalVM SDK، وهو إطار عمل يستند إلى Java ومجموعة من واجهات برمجة التطبيقات لتطوير أوقات تشغيل لغة عالية الأداء.

FastR: تطبيق لغة R

وفي هذا الصدد، يمكن تنفيذ دعم لغات إضافية من قبل مستعملي GraalVM. بعض تطبيقات لغات الطرف الثالث البارزة هي grCuda، SOMns، TruffleSqueak، وYona.

دعم اللغة ووقت التشغيل

كذلك، GraalJS: وقت تشغيل JavaScript متوافق مع ECMAScript 2023، مع دعم Node.js

من جانب آخر، استنادًا إلى إطار تنفيذ لغة Truffle، تم تصميم اللغات الإضافية للاستخدام مع GraalVM:

وفي هذا السياق، تمت كتابة GraalVM في نظام Java البيئي ومن أجله. يمكنه تشغيل التطبيقات المكتوبة بجميع اللغات التي تتوافق مع Java bytecode ، مثلًا، Java و Scala وKotlin والمزيد.

الصورة الأصلية GraalVM

وفي هذا السياق، يتم دعم GraalVM Native Image رسميًا من قبل Fn وGluon وHelidon و Micronaut وPicocli و Quarkus و Vert.x و Spring Boot Java.

ومن ناحية أخرى، GraalVM Native Image هي تقنية ترجمة متقدمة تنتج ثنائيات قابلة للتنفيذ لملفات الفئة. تم إصدارها كتقنية متبناة في وقت مبكر، مما يعني أنها جاهزة للإنتاج ولكنها قد تتضمن تحديثات غير متوافقة مع الإصدارات المستقبلية.

ومن ناحية أخرى، في إصدارات Java SE من 9 إلى 15، يقوم الأمر بإنشاء ملف قابل للتنفيذ. تتيح علامة التجريبية استخدام برنامج التحويل البرمجي Graal JIT. تتوفر هذه الوظيفة منذ في مكون الصورة الأصلية لإصدارات GraalVM المستقلة.

كذلك، في سبتمبر 2016، وضعت أوراكل خططًا تفصيلية لإضافة الترجمة في وقت مبكر إلى OpenJDK باستخدام مترجم GraalVM لـ Java SE 9 . هذا الاقتراح، الذي تم تتبعه بواسطة JEP 295: الترجمة المسبقة ، تم تضمينه في Java SE 9. تمت إضافة الاستخدام التجريبي لـ GraalVM كمترجم فوري لمنصة Linux x64 لـ Java SE 10 .

ومن ناحية أخرى، تدعم هذه الوظيفة اللغات المستندة إلى JVM، ولكن يمكنها اختياريًا تشغيل لغات ديناميكية تم تطويرها على GraalVM مع إطار عمل Truffle. لا يتم تشغيل الملف القابل للتنفيذ على JVM ويستعمل مكونات وقت التشغيل الضرورية مثل جدولة مؤشرات الترابط أو GC من جهاز افتراضي صغير مخصص يسمى Substrate VM. نظرًا لأن الملف الثنائي الأصلي الناتج يتضمن فئات التطبيق وتبعيات JDK والمكتبات بالفعل، فإن وقت بدء التشغيل والتنفيذ يقل إلى حدّ كبير.

GraalPy: تطبيق لغة بايثون 3

GraalVM LLVM Runtime ( Sulong ): تنفيذ مترجم رمز البت LLVM

مترجم GraalVM

في هذا الإطار، مترجم GraalVM، Graal، هو مترجم Java (JIT) حديث. يكمل أو يستبدل المترجمين الموجودين (C1/C2 في HotSpot ). على النقيض من تلك المترجمات الموجودة، تمت كتابة Graal بطريقة معيارية وقابلة للصيانة وقابلة للتوسيع في Java نفسها. تم إصداره بموجب الإصدار 2 من GPL مع استثناء classpath .

إطار تنفيذ لغة Truffle

من جهة ثانية، تم إصدار إطار عمل Truffle والجزء التابع له، GraalVM SDK، بموجب الرخصة العالمية المتساهلة، الإصدار 1.0، لتشجيع استخدام إطار العمل للمشاريع التي لا تريد أن تكون ملزمة بحقوق النشر أو الحقوق الأم الأخرى.

وفي هذا السياق، بالاشتراك مع GraalVM، طوّرت مختبرات أوراكل مترجمًا لغويًا لشجرة نحو مجرد (AST) يسمى "Truffle" والذي سيمكنها من تنفيذ اللغات على GraalVM تم تطبيق الكثير من اللغات في Truffle، بما في ذلك مترجم لغة C الذي يدعي أنه بنفس سرعة لغةGC و Clang .

تضمين اللغات

من جانب آخر، ميزة أخرى لـ GraalVM هي إمكانية تضمين التعليمات البرمجية من لغة الضيف في Java وكتابة تطبيقات "متعددة اللغات". يمكن للمطور أن يدمج JavaScript أو Python أو غيرها من اللغات المدعومة داخل التعليمات البرمجية المصدرية لـ Java، مما يمنحه المزايا المميزة لتلك اللغات. يقوم تطبيق Java المضيف ولغة الضيف بتمرير البيانات ذهابًا وإيابًا في نفس مساحة الذاكرة. هذا ممكن بفضل إطار تنفيذ لغة Truffle Language Framework وواجهة برمجة تطبيقات GraalVM Polyglot. فيما يلي مثال لكيفية استدعاء دالة محددة في بايثون من جافا:try (Context context = Context.create) {

  • Value function = context.eval("python", "lambda x: x + 1");
  • assert function.canExecute;
  • int x = function.execute(41).asInt;

تاريخ

إضافةً إلى ذلك، تعود جذور GraalVM إلى مشروع Maxine Virtual Machine في مختبرات Sun Microsystems (المعروفة الآن باسم Oracle Labs ). كان الهدف من المشروع هو كتابة آلة جافا الافتراضية بلغة جافا نفسها لتجنب مشاكل التطوير بلغة ++C، وخاصة تنظيم الذاكرة اليدوي، والاستفادة من التحسينات الفوقية الدائرية . قام المشروع بتغيير تركيزه إلى المترجم وربطه بوقت تشغيل HotSpot قدر الإمكان. تم بدء تشغيل مترجم GraalVM، Graal، عن طريق التحويل اليدوي للتعليمات البرمجية الخاصة بمترجم عميل HotSpot (المسمى "C1") إلى Java، ليحل محل المترجم Maxine السابق.

ومن ناحية أخرى، تم تضمين Graal في إصدارات JDK المستندة إلى HotSpot مثل OpenJDK من Java SE 9 إلى 15، لتوفير ترجمة تجريبي مسبقًا. الكما مكّن خيار كذلك استخدام Graal كبديل لمترجم الخادم (المسمى "C2"). تمت إزالة الخيار في Java SE 16 للتخلص من الجهد المكرر للحفاظ على إصدار في JDK وإصدار GraalVM المستقل. يتم توفير وظيفة مماثلة لإنشاء ملف قابل للتنفيذ أصلي من تطبيق Java بواسطة أداة الصورة الأصلية لإصدارات GraalVM المستقلة. تقوم الأداة بمعالجة فئات تطبيق Java وبيانات التعريف الأخرى لإنشاء نسخة ثنائية لنظام تشغيل وبنية محددة. ويمكن استخدامها لإنشاء ملف قابل للتنفيذ أصلي أو مكتبة مشتركة أصلية.

GraalWasm: تطبيق WebAssembly

TruffleRuby: تطبيق لغة روبي مع دعم أولي لـ Ruby on Rails

المكونات

وفي هذا السياق، يتم شحن المبرمج GraalVM، Graal، مع مكونات آلة جافا الافتراضية العادية ( OpenJDK ). يتم تضمين مكونات إضافية في GraalVM لتمكين أوضاع التنفيذ الجديدة ( GraalVM Native Image ) أو لغات البرمجة ( LLVM runtime ، GraalVM JavaScript كبديل محتمل لمحرك Nashorn المهمل، و TRegex كمحرك تعبير عادي ).

تبني

من جهة ثانية، Facebook : يستعمل GraalVM لتسريع أعباء عمل Apache Spark مما يقلل من بصمة الذاكرة واستخدام وحدة المعالجة المركزية.

يُستعمل GraalVM في سيناريوهات صناعية مختلفة:

وعلى صعيد آخر، Disney : تستعمل تقنية Native Image لتقليل وقت البدء البارد لبعض خدمات AWS الصغيرة .

تويتر : تسريع بعض الخدمات المصغرة للمنصة.

كذلك، جولدمان ساكس : أعاد البنك الاستثماري الدولي كتابة لغة البرمجة الداخلية الخاصة به Slang عبر إطار عمل Truffle.

دعم الأدوات القائمة على الأجهزة

إضافةً إلى ذلك، من المزايا الرئيسية لنظام GraalVM البيئي دعم الأجهزة الديناميكية الكاملة والمُحددة للغة والتي تم إنشاؤها مباشرة في وقت تشغيل VM. يمكن التقاط أحداث التنفيذ من قبل عملاء واجهة برمجة التطبيقات (API) بنفقات منخفضة للغاية في التعليمات البرمجية المحسّنة بالكامل.

علاوةً على ذلك، يوفر تثبيت GraalVM الأساسي مصحح أخطاء لا يعتمد على اللغة، ومصحح أخطاء في التحليل، وعارض كومة البيانات وغيرها من الأدوات التي تعتمد على الأجهزة وغيرها من دعم الأجهزة الافتراضية. يتضمن GraalVM كذلك تطبيقًا خلفيًا لبروتوكول تصحيح الأخطاء عن بُعد في Chrome Inspector. على الرغم من أنه مصمم في الأصل لتصحيح أخطاء JavaScript، إلا أنه يمكن استخدامه لتصحيح أخطاء جميع لغات GraalVM من المتصفح.

assert x == 42;

إضافةً إلى ذلك، }تزيد دالة بايثون من وحدة القيمة المقدمة ثم تعيدها إلى اللغة المضيفة. من لغة جافا، ولأغراض أمنية، نسأل أولًا ما إذا كان يمكن تنفيذ الدالة المتغيرة عبر استدعاء canExecute ، ثم نستدعي الدالة باستدعاء execute. . يمكنك العثور على المزيد من الأمثلة في الوثائق المرجعية الخاصة بتضمين اللغات .

الأهداف

ومن ناحية أخرى، لتمكين تكامل GraalVM في قاعدة بيانات Oracle وOpenJDK وAndroid/iOS والتضمينات المخصصة المماثلة.

في هذا الإطار، لتحسين أداء اللغات المستندة إلى آلة جافا الافتراضية (JVM) لتتناسب مع اللغات الأصلية.

لتمكين تضمين رمز لغة الضيف في تطبيق مضيف يستند إلى JVM .

ومن ناحية أخرى، لتمكين المزج بين التعليمات البرمجية من أي لغة برمجة في تطبيق واحد، ويطلق عليه "تطبيق متعدد اللغات".

علاوةً على ذلك، لتقليل وقت بدء تشغيل التطبيقات المستندة إلى JVM عن طريق ترجمتها مسبقًا.

الإصدارات

إضافةً إلى ذلك، يتوفر GraalVM كـ Oracle GraalVM بموجب ترخيص الشروط والأحكام المجانية لـ GraalVM (GFTC)، حيث يمكن الوصول إلى Oracle GraalVM Enterprise Edition من خلال قبول "اتفاقية ترخيص OTN Oracle GraalVM Enterprise Edition بما في ذلك ترخيص الإصدارات الأولى من Oracle GraalVM" أو كإصدار مجتمعي مع ترخيص مفتوح المصدر. أعلنت شركة Oracle Corporation عن إطلاق Oracle GraalVM Enterprise Edition في 8 مايو 2019، و Oracle GraalVM في 13 يونيو 2023، حيث تقدم ترخيصًا جديدًا لشروط وأحكام GraalVM المجانية (GFTC). يمكن أن يحل GraalVM محل JDK الافتراضي على منصات Linux و macOS على وحدات المعالجة المركزية x64 و AArch64، وعلى منصة Windows x64. جدول الإصدار موجود في مركز مساعدة Oracle وموقع GraalVM على الويب.

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.