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

ترجمة ثنائية

407 كلمة•0 مشاهدة•🗒️ منذ يوم
باختصار: في الحوسبة، الترجمة الثنائية (أو إعادة التجميع (الثنائية)) هي محاكاة تنفيذ مجموعة تعليمات ما باستخدام مجموعة تعليمات أخرى عبر ترجمة الكود الثنائي من مجموعة التعليمات الأولى إلى الثانية، حيث تتم ترجمة سلاسل التعليمات من مجموعة التعليمات…. تجد هنا «الترجمة الثنائية الستاتيكية»، «الترجمة الثنائية الديناميكية» و«الدوافع».
المحتويات
  1. الترجمة الثنائية الستاتيكية
  2. الترجمة الثنائية الديناميكية
  3. الدوافع

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

ومن ناحية أخرى، هناك نوعين أساسيين للترجمة الثنائية: الترجمة الثنائية الستاتيكية والترجمة الثنائية الديناميكية. يمكن تنفيذ الترجمة عبر عتاد خاص (عبر دارات خاصة في وحدة المعالجة المركزية مثلًا) أو برمجياً (مثل بيئات التنفيذ، المحاكيات).

الترجمة الثنائية الستاتيكية

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

الترجمة الثنائية الديناميكية

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

معجم ثنائي

طالع كذلك

ومن جهة أخرى، تختلف الترجمة الثنائية الديناميكية عن المحاكاة البسيطة حيث تلغى فيها حلقة «اقرأ-فك التشفير-نفذ» الرئيسية في المحاكاة—وهي حلقة خانقة للأداء، وهذا يؤدي في المقابل لإضافة عبئ كبير أثناء الترجمة. لكن هذا العبئ يتوقع تعويضه بشكل تدريجي عند تكرار تنفيذ سلاسل الأكواد نفسها مرات عديدة.

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

الدوافع

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

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

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

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