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

غراال في إم
الشعار
معلومات عامة
نوع
المحول البرمجي الديناميكي ل Java ووقت التشغيل
نظام التشغيل
المنصة
النموذج المصدري
المطورون
موقع الويب
معلومات تقنية
لغة البرمجة
الإصدار الأخير
GraalVM for JDK 21 (23.1.0)
المستودع
الرخصة

إصدار المجتمع: GPLv2؛[2][3]

أوراكل غراال في إم: "GFTC". مؤرشف من الأصل في 2023-08-10.

تشمل الفروق الرئيسية بين GraalVM وJDK الأساسي ما يلي:

  • مترجم Graal ، مترجم في الوقت المناسب (JIT) .
  • GraalVM Native Image هي تقنية لترجمة تطبيقات Java مسبقًا.
  • إطار تنفيذ لغة Truffle و GraalVM SDK، وهو إطار عمل يستند إلى Java ومجموعة من واجهات برمجة التطبيقات لتطوير أوقات تشغيل لغة عالية الأداء.
  • GraalVM Polyglot API ، واجهة برمجة تطبيقات لتضمين كود لغة الضيف في تطبيق مضيف يستند إلى Java.
  • JavaScript Runtime، وقت تشغيل JavaScript متوافق مع ECMAScript 2023، بالإضافة إلى Node.js.
  • LLVM Runtime هو وقت تشغيل لتنفيذ اللغات التي يمكن تحويلها إلى كود بت LLVM.

الأهداف

عدل
  • لتحسين أداء اللغات المستندة إلى آلة جافا الافتراضية (JVM) لتتناسب مع اللغات الأصلية. [6] [7]
  • لتقليل وقت بدء تشغيل التطبيقات المستندة إلى JVM عن طريق ترجمتها مسبقًا.
  • لتمكين تكامل GraalVM في قاعدة بيانات Oracle وOpenJDK وAndroid/iOS والتضمينات المخصصة المماثلة.
  • لتمكين تضمين رمز لغة الضيف في تطبيق مضيف يستند إلى JVM .
  • لتمكين المزج بين التعليمات البرمجية من أي لغة برمجة في تطبيق واحد، ويطلق عليه "تطبيق متعدد اللغات". [6] [8]

تاريخ

عدل

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

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

الإصدارات

عدل

يتوفر 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 على الويب.

المكونات

عدل

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

مترجم GraalVM

عدل

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

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

عدل

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

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

يتم دعم GraalVM Native Image رسميًا من قبل Fn وGluon وHelidon و Micronaut وPicocli و Quarkus و Vert.x و Spring Boot Java. [12] [13]

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

في إصدارات Java SE من 9 إلى 15، يقوم الأمر jaotc بإنشاء ملف قابل للتنفيذ. [18] تتيح علامة -XX:+EnableJVMCIProduct التجريبية استخدام برنامج التحويل البرمجي Graal JIT. [19] تتوفر هذه الوظيفة منذ في مكون الصورة الأصلية لإصدارات GraalVM المستقلة. [20]

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

عدل

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

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

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

عدل

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

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

تضمين اللغات

عدل

ميزة أخرى لـ GraalVM هي إمكانية تضمين التعليمات البرمجية من لغة الضيف في Java وكتابة تطبيقات "متعددة اللغات". [8] يمكن للمطور أن يدمج JavaScript أو Python أو غيرها من اللغات المدعومة داخل التعليمات البرمجية المصدرية لـ Java، مما يمنحه المزايا المميزة لتلك اللغات. يقوم تطبيق Java المضيف ولغة الضيف بتمرير البيانات ذهابًا وإيابًا في نفس مساحة الذاكرة. هذا ممكن بفضل إطار تنفيذ لغة Truffle Language Framework[21] وواجهة برمجة تطبيقات 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();
    assert x == 42;
}

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

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

عدل

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

يمكن تنفيذ دعم لغات إضافية من قبل مستخدمي GraalVM. بعض تطبيقات لغات الطرف الثالث البارزة هي grCuda، [35] SOMns، [36] TruffleSqueak، [37] [38] وYona. [39]

تبني

عدل

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

  • Disney : [40] تستخدم تقنية Native Image لتقليل وقت البدء البارد لبعض خدمات AWS الصغيرة .
  • Facebook : [41] يستخدم GraalVM لتسريع أعباء عمل Apache Spark مما يقلل من بصمة الذاكرة واستخدام وحدة المعالجة المركزية.
  • تويتر : [42] تسريع بعض الخدمات المصغرة للمنصة.
  • جولدمان ساكس : [43] أعاد البنك الاستثماري الدولي كتابة لغة البرمجة الداخلية الخاصة به Slang عبر إطار عمل Truffle.

المراجع

عدل
  1. ^ "Downloads". مؤرشف من الأصل في 2024-09-03.
  2. ^ "GraalVM FAQ". مؤرشف من الأصل في 2020-04-13. اطلع عليه بتاريخ 2018-04-25.
  3. ^ "graal/README.md". غيت هاب. مؤرشف من الأصل في 2022-11-27. اطلع عليه بتاريخ 2018-04-25.
  4. ^ "GraalVM for JDK 21". اطلع عليه بتاريخ 2024-06-21.
  5. ^ "For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition". أوراكل. مؤرشف من الأصل في 2022-12-07. اطلع عليه بتاريخ 2022-01-21.
  6. ^ ا ب "Why GraalVM". مؤرشف من الأصل في 2019-04-09. اطلع عليه بتاريخ 2018-04-25.
  7. ^ "Graal : Un compilateur dynamique pour Java". lemondeinformatique.fr. 13 فبراير 2012. مؤرشف من الأصل في 2013-08-23. اطلع عليه بتاريخ 2013-08-23.
  8. ^ ا ب "Reference Manual for Polyglot Applications". مؤرشف من الأصل في 2020-10-23. اطلع عليه بتاريخ 2018-04-25.
  9. ^ ""Meta-Circularity is Near", GraalVM, Truffle--airhacks.fm podcast : Adam Bien's Weblog". مؤرشف من الأصل في 2020-05-29.
  10. ^ "OpenJDK: Graal". مؤرشف من الأصل في 2024-08-22.
  11. ^ "Native Images". www.graalvm.org. مؤرشف من الأصل في 2018-04-20.
  12. ^ "GraalVM Open Source Ecosystem". أوراكل. مؤرشف من الأصل في 2024-08-13. اطلع عليه بتاريخ 2019-09-11.
  13. ^ "Spring Native Image documentation". سبرينغ. مؤرشف من الأصل في 2021-10-31. اطلع عليه بتاريخ 2021-10-26.
  14. ^ "Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9". InfoQ.com. 1 أكتوبر 2016. مؤرشف من الأصل في 2019-09-24. اطلع عليه بتاريخ 2016-10-06. AOT brings about a new tool called 'jaotc' which uses Graal as the backend (to generate code)
  15. ^ Vladimir Kozlov (14 سبتمبر 2016). "JDK-8166089: Ahead-of-Time Compilation". أوراكل. مؤرشف من الأصل في 2016-09-29. اطلع عليه بتاريخ 2016-10-06. Compile an application's Java classes to native code prior to launching the virtual machine.
  16. ^ Vladimir Kozlov (13 أكتوبر 2016). "JEP 295: Ahead-of-Time Compilation". أوراكل. مؤرشف من الأصل في 2024-08-27. اطلع عليه بتاريخ 2016-10-13. Compile Java classes to native code prior to launching the virtual machine.
  17. ^ Vladimir Kozlov (20 أكتوبر 2017). "JEP 317: Experimental Java-Based JIT Compiler". أوراكل. مؤرشف من الأصل في 2024-08-29. اطلع عليه بتاريخ 2018-01-21. JEP 317: Experimental Java-Based JIT Compiler
  18. ^ "OpenJDK: Graal". openjdk.java.net. مؤرشف من الأصل في 2024-07-01.
  19. ^ "[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode". bugs.openjdk.java.net. مؤرشف من الأصل في 2022-11-27.
  20. ^ "GraalVM: Reference Manual: Native Image". graalvm.org. مؤرشف من الأصل في 2024-08-25.
  21. ^ ا ب "Truffle: A Self-Optimizing Runtime System" (PDF). أوراكل. مؤرشف من الأصل (PDF) في 2024-04-16. اطلع عليه بتاريخ 2013-08-23.
  22. ^ "Truffle served in a Holy Graal: Graal and Truffle for polyglot language interpretation on the JVM". 5 ديسمبر 2017. مؤرشف من الأصل في 2024-02-06. اطلع عليه بتاريخ 2018-04-25.
  23. ^ "Truffle: Languages and Material". Gist (بالإنجليزية). Archived from the original on 2024-07-01.
  24. ^ Van De Vanter، Michael؛ Seaton، Chris؛ Haupt، Michael؛ Humer، Christian؛ Würthinger، Thomas (9 مارس 2018). "Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools". The Art, Science, and Engineering of Programming. ج. 2 ع. 3, Article 14: 30. arXiv:1803.10201. DOI:10.22152/programming-journal.org/2018/2/14. S2CID:4382172.
  25. ^ "Getting started with Instruments in GraalVM". www.graalvm.org. مؤرشف من الأصل في 2023-09-22. اطلع عليه بتاريخ 2019-04-08. Truffle instruments can track very fine-grained VM-level runtime events to profile, inspect, and analyze the runtime behavior of applications running on GraalVM.
  26. ^ "GraalVM Debugging and Monitoring Tools". www.graalvm.org. مؤرشف من الأصل في 2019-04-25. اطلع عليه بتاريخ 2019-04-08. GraalVM provides a set of tools for developers, integrators, and IT administrators to debug and monitor GraalVM and deployed applications.
  27. ^ "Chrome DevTools". developers.google.com. مؤرشف من الأصل في 2017-08-11. اطلع عليه بتاريخ 2019-04-08. Chrome DevTools is a set of web developer tools built directly into the Google Chrome browser. DevTools can help you edit pages on-the-fly and diagnose problems quickly, which ultimately helps you build better websites, faster.
  28. ^ GraalVM JavaScript github repository نسخة محفوظة 2024-07-01 على موقع واي باك مشين.
  29. ^ GraalPython github repository نسخة محفوظة 2019-06-11 at Archive.is
  30. ^ GraalVM LLVM Runtime github repository نسخة محفوظة 2024-08-25 على موقع واي باك مشين.
  31. ^ "GraalWasm github repository". غيت هاب. مؤرشف من الأصل في 2024-09-05.
  32. ^ Prokopec, Aleksandar (2 Dec 2019). "Announcing GraalWasm — a WebAssembly engine in GraalVM". Medium (بالإنجليزية). Archived from the original on 2023-04-19. Retrieved 2020-01-15.
  33. ^ TruffleRuby github repository نسخة محفوظة 2019-01-11 at Archive.is
  34. ^ GraalVM FastR github repository نسخة محفوظة 2024-05-15 على موقع واي باك مشين.
  35. ^ grCuda GitHub repository نسخة محفوظة 2019-09-27 at Archive.is
  36. ^ SOMns GitHub repository نسخة محفوظة 2024-07-01 على موقع واي باك مشين.
  37. ^ TruffleSqueak GitHub repository نسخة محفوظة 2024-03-27 على موقع واي باك مشين.
  38. ^ Niephaus، Fabio؛ Felgentreff، Tim؛ Hirschfeld، Robert (2019). "GraalSqueak: Toward a Smalltalk-based Tooling Platform for Polyglot Programming". Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes - MPLR 2019. ACM Digital Library. ص. 14–26. DOI:10.1145/3357390.3361024. ISBN:9781450369770. S2CID:204728643. اطلع عليه بتاريخ 2020-11-08.
  39. ^ Yona Language نسخة محفوظة 2023-03-02 at Archive.is
  40. ^ "Improving Developer Productivity at Disney with Serverless and Open Source | AWS Open Source Blog". aws.amazon.com (بالإنجليزية الأمريكية). 9 Nov 2022. Archived from the original on 2024-08-25. Retrieved 2023-07-05.
  41. ^ "GraalVM at Facebook" (بالإنجليزية). 10 Jul 2021. Archived from the original on 2024-08-25.
  42. ^ "How Oracle GraalVM Supercharged Twitter's Microservices Platform" (PDF) (بالإنجليزية). Archived from the original (PDF) on 2024-08-25.
  43. ^ "One VM to Rule Them All? Lessons Learned with GraalVM | Curry On London! 2019". www.curry-on.org (بالإنجليزية). Archived from the original on 2023-09-23. Retrieved 2023-07-05.