التجميع الديناميكي
الترجمة الديناميكية هي عملية تستخدمها بعض لغات البرمجة لتحسين الأداء أثناء تنفيذ البرنامج. على الرغم من أن هذه التقنية نشأت في لغة سمول توك [ 1 ] ، فإن أشهر لغة تستخدمها هي جافا . بما أن رمز الآلة الناتج عن المترجم الديناميكي يُبنى ويُحسّن أثناء تشغيل البرنامج، فإن استخدام الترجمة الديناميكية يُتيح تحسينات في الكفاءة غير متاحة للبرامج المُترجمة بشكل ثابت (أي تلك المُترجمة بواسطة ما يُسمى "المترجم الدفعي"، كما هو موضح أدناه) إلا من خلال تكرار الكود أو البرمجة الوصفية .
في بيئات التشغيل التي تستخدم الترجمة الديناميكية، عادةً ما تعمل البرامج ببطء في الدقائق الأولى، ثم بعد ذلك، يتم إنجاز معظم عمليات الترجمة وإعادة الترجمة، فتصبح البرامج سريعة. ونظرًا لهذا التأخير الأولي في الأداء، تُعدّ الترجمة الديناميكية غير مرغوب فيها في بعض الحالات. في معظم تطبيقات الترجمة الديناميكية، تُؤجَّل بعض التحسينات التي يُمكن إجراؤها في وقت الترجمة الأولي إلى وقت الترجمة اللاحق أثناء التشغيل ، مما يُسبب المزيد من التباطؤ غير الضروري. تُعدّ الترجمة الفورية (JIT-in-time) أحد أشكال الترجمة الديناميكية.
التجميع التدريجي
هناك تقنية وثيقة الصلة وهي الترجمة التزايدية . يتم استخدام مترجم تزايدي في POP-2 و POP-11 و Forth وبعض إصدارات Lisp ، مثل Maclisp وإصدار واحد على الأقل من ML ( Poplog ML).
يتطلب هذا أن يكون مُترجم لغة البرمجة جزءًا من نظام التشغيل. ونتيجةً لذلك، يُمكن قراءة شفرة المصدر في أي وقت، من الطرفية، أو من ملف، أو ربما من بنية بيانات يُنشئها البرنامج قيد التشغيل، وترجمتها إلى كتلة أو دالة بلغة الآلة (والتي قد تحل محل دالة سابقة تحمل الاسم نفسه)، لتكون متاحةً فورًا للاستخدام من قِبل البرنامج. ونظرًا لضرورة سرعة الترجمة أثناء التطوير والاختبار التفاعليين، فمن المرجح ألا تكون الشفرة المُترجمة مُحسَّنةً بنفس قدر الشفرة التي يُنتجها "مُترجم الدفعات" القياسي، الذي يقرأ شفرة المصدر ويُنتج ملفات كائنية يُمكن ربطها وتشغيلها لاحقًا. ومع ذلك، عادةً ما يعمل البرنامج المُترجم تدريجيًا بشكل أسرع بكثير من النسخة المُفسَّرة من البرنامج نفسه. وبالتالي، تُوفر الترجمة التدريجية مزيجًا من مزايا اللغات المُفسَّرة والمُترجمة. ولتسهيل قابلية النقل، يُفضَّل عمومًا أن يعمل المُترجم التدريجي على مرحلتين، وهما: أولًا الترجمة إلى لغة وسيطة مستقلة عن المنصة، ثم الترجمة منها إلى لغة الآلة الخاصة بالجهاز المُضيف. في هذه الحالة، لا يتطلب النقل سوى تغيير مُصرّف "الخلفية". على عكس التجميع الديناميكي، كما هو مُعرّف أعلاه، لا يتضمن التجميع التزايدي أي تحسينات إضافية بعد تشغيل البرنامج لأول مرة.
انظر أيضاً
مراجع
- ↑ بيتر ل. دويتش وآلان شيفمان. "التنفيذ الفعال لنظام سمول توك-80"، الندوة السنوية الحادية عشرة حول مبادئ لغات البرمجة، يناير 1984، الصفحات 297-302
روابط خارجية
- مشروع التجميع الديناميكي لجامعة واشنطن
- محاكاة البنية المعمارية من خلال التجميع الديناميكي
- SCIRun
- مقال بعنوان " التجميع الديناميكي، والانعكاس، والتطبيقات القابلة للتخصيص " بقلم ديفيد ب. سكوفيلد وإريك بيرغمان-تيريل
- مقال بعنوان " XML عالي الأداء: تجميع تعبيرات XPath الديناميكية " بقلم دانيال كازولينو
- Matthew R. Arnold , Stephen Fink , David P. Grove , Michael Hind , and Peter F. Sweeney , A Survey of Adaptive Optimization in Virtual Machines , Proceedings of the IEEE, 92(2), February 2005, Pages 449-466.
- بناء المترجم
