تجميع مسبق

في علوم الحاسوب، فإن الترجمة المسبقة ( ترجمة AOT ) هي عملية ترجمة لغة برمجة (غالباً) عالية المستوى إلى لغة (غالباً) منخفضة المستوى قبل تنفيذ البرنامج، عادةً في وقت الإنشاء، لتقليل كمية العمل المطلوب تنفيذه في وقت التشغيل .

يرتبط هذا المصطلح عادةً بعملية ترجمة لغة برمجة عالية المستوى مثل C أو C++ ، أو تمثيل وسيط مثل بايت كود جافا أو لغة الوسيط المشتركة (CIL)، إلى كود الآلة الأصلي بحيث يمكن تنفيذ الملف الثنائي الناتج بشكل أصلي، تمامًا مثل أي مترجم أصلي قياسي. وعند استخدامه في هذا السياق، يُنظر إليه غالبًا على أنه نقيض الترجمة الفورية (JIT).

بشكل عام، لا تقتصر لغات الهدف في ترجمة AOT بالضرورة على لغة الآلة الأصلية ، بل تُحدد بشكل تعسفي إلى حد ما. تستخدم بعض الأبحاث الأكاديمية هذا المصطلح للدلالة على عملية ترجمة بايت كود جافا إلى لغة C [ 1 ] أو توقيت تنفيذ مسار التحسين. [ 2 ] ويستخدم مشروع أكاديمي [ 3 ] هذا المصطلح للدلالة على عملية الترجمة المسبقة لجافا سكريبت إلى تمثيل وسيط مُحسَّن يعتمد على الآلة لمحرك V8 (محرك جافا سكريبت) [ 4 ] وإلى بايت كود مستقل عن الآلة لـ JavaScriptCore . [ 5 ] وتستخدم بعض تطبيقات اللغات الصناعية (مثل Clojure [ 6 ] ومحرك Hermes JavaScript [ 7 ] ) هذا المصطلح للدلالة على عملية الترجمة المسبقة للغة المصدر إلى بايت كود خاص بالآلة الافتراضية. ويستخدم Angular (إطار عمل الويب) هذا المصطلح للدلالة على تحويل قالب HTML و TypeScript إلى جافا سكريبت . [ 8 ]

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

تقليل الحمل الزائد لوقت التشغيل

تستخدم بعض لغات البرمجة التي تعتمد على بيئة تشغيل مُدارة للبرمجيات ، والتي يمكن ترجمتها إلى تمثيل وسيط، تقنية الترجمة الفورية (JIT). تقوم هذه التقنية بترجمة الكود الوسيط إلى كود الآلة لتشغيله مباشرةً أثناء تنفيذ الكود الوسيط، مما قد يُبطئ أداء التطبيق. أما الترجمة المسبقة (Application-off-time) فتُغني عن هذه الخطوة، إذ تتم قبل التنفيذ بدلاً من أثناءه.

لا يُمكن ترجمة اللغات ذات الأنواع الديناميكية إلى لغة الآلة الأصلية أو إلى بايت كود الآلة الافتراضية الثابتة إلا في حالات محدودة. فعلى سبيل المثال، يستطيع مُترجم HiPE AOT للغة إرلانج القيام بذلك بفضل تقنيات إعادة بناء الأنواع الثابتة المتقدمة وتخمين الأنواع.

في معظم الحالات التي يتم فيها تجميع البرامج والمكتبات بالكامل باستخدام AOT، من الممكن إزالة جزء من بيئة التشغيل ، وبالتالي توفير مساحة القرص والذاكرة وعمر البطارية وأوقات بدء التشغيل (لا توجد مرحلة تهيئة JIT)، وما إلى ذلك. لهذا السبب، يمكن أن يكون ذلك مفيدًا في الأجهزة المدمجة أو المحمولة.

المفاضلات في الأداء

تستطيع مُجمِّعات AOT إجراء تحسينات مُعقَّدة ومُتقدِّمة على الشيفرة ، والتي تُعتبر في مُعظم حالات JIT مُكلفة للغاية. في المقابل، لا تستطيع AOT عادةً إجراء بعض التحسينات المُتاحة في JIT، مثل التحسين المُوجَّه بملف تعريف وقت التشغيل (PGO)، ونشر الثوابت الزائفة ، أو تضمين الدوال الافتراضية غير المُباشرة . يجب أن تُجمِّع AOT وفقًا لبنية مُستهدفة، بينما يُمكن لـ JIT تجميع الشيفرة لتحقيق أقصى استفادة من وحدة المعالجة المركزية الفعلية التي تعمل عليها، حتى بعد سنوات من إصدار البرنامج.

علاوة على ذلك، يمكن لمترجمات JIT تحسين الكود الرائج بشكل استباقي من خلال وضع افتراضات عليه. ويمكن إلغاء تحسين الكود المُولّد إذا ثبت خطأ أحد هذه الافتراضات لاحقًا. تُبطئ هذه العملية أداء البرنامج قيد التشغيل إلى حين إعادة تحسين الكود باستخدام التحسين التكيفي . لا يستطيع مترجم AOT وضع مثل هذه الافتراضات، ويحتاج إلى استنتاج أكبر قدر ممكن من المعلومات أثناء الترجمة. ويضطر إلى استخدام كود أقل تخصصًا لأنه لا يستطيع معرفة أنواع البيانات التي ستمر عبر دالة معينة. يمكن التخفيف من هذه المشاكل من خلال التحسينات الموجهة بالملف التعريفي. ولكن حتى في هذه الحالة، لا يمكن تكييف الكود المُولّد ديناميكيًا مع ملف تعريف وقت التشغيل المتغير كما يفعل مترجم JIT.

المفاضلات المتعلقة بالتخزين

انظر أيضاً

مراجع

  1. جونغ، دونغ هيون؛ بارك، جونغ كوك؛ باي، سونغ هوان؛ لي، جاي موك؛ مون، سو موك (22 أكتوبر 2006). "معالجة الاستثناءات بكفاءة في مترجم جافا من بايت كود إلى سي بتقنية الترجمة المسبقة للأنظمة المدمجة" . وقائع المؤتمر الدولي السادس لجمعية آلات الحوسبة ومعهد مهندسي الكهرباء والإلكترونيات حول البرمجيات المدمجة - EMSOFT '06 . سيول، كوريا: جمعية آلات الحوسبة. الصفحات 188-194 . doi : 10.1145/1176887.1176915 . ISBN  978-1-59593-542-7. S2CID 15591457 . 
  2. تشامبرز، كريغ (14 يناير 2002). "التجميع المرحلي" . وقائع ورشة عمل ACM SIGPLAN لعام 2002 حول التقييم الجزئي ومعالجة البرامج القائمة على الدلالات . PEPM '02. بورتلاند، أوريغون: رابطة آلات الحوسبة. الصفحات 1-8 . doi : 10.1145/503032.503045 . ISBN  978-1-58113-455-1. S2CID 18546907 . 
  3. زويكوف، ر.؛ شاريجين، إ. (2017-01-01). "الترجمة المسبقة لبرامج جافا سكريبت" . البرمجة وبرمجيات الحاسوب . 43 (1): 51-59 . doi : 10.1134/S036176881701008X . ISSN 1608-3261 . S2CID 2338849 .  
  4. ispras/v8-aotc ، معهد إيفانيكوف لبرمجة الأنظمة التابع للأكاديمية الروسية للعلوم، 30 يناير 2021 ، تاريخ الاطلاع 17 مارس 2021
  5. ispras/webkit-aotc ، معهد إيفانيكوف لبرمجة الأنظمة التابع للأكاديمية الروسية للعلوم، 30 يناير 2021 ، تاريخ الاطلاع 17 مارس 2021
  6. "كلوجر - التجميع المسبق وإنشاء الفئات" . clojure.org . تم الاطلاع عليه بتاريخ 17-03-2021 .
  7. "هيرميس: محرك جافا سكريبت جديد مفتوح المصدر مُحسَّن لتطبيقات الجوال" . هندسة فيسبوك . ١٢ يوليو ٢٠١٩. تاريخ الاسترجاع: ١٧ مارس ٢٠٢١ .
  8. "Angular" . angular.io . تم ​​الاطلاع عليه بتاريخ 17-03-2021 .