ترجمة ثنائية: الفرق بين النسختين

[مراجعة غير مفحوصة][مراجعة غير مفحوصة]
تم حذف المحتوى تمت إضافة المحتوى
أنشأت بترجمة الصفحة "Binary translation"
 
لا ملخص تعديل
سطر 1:
في [[الحوسبة]]، '''الترجمة الثنائية''' (أو '''إعادة التجميع (الثنائية)''') هي [[محاكي (حاسوب)|محاكاة]] تنفيذ [[مجموعة التعليمات|مجموعة تعليمات]] ما باستخدام مجموعة تعليمات أخرى عبر ترجمة [[كود|الكود]] الثنائي من مجموعة التعليمات الأولى إلى الثانية، حيث تتم ترجمة سلاسل التعليمات من مجموعة التعليمات المصدر (من اللغة الثنائية المصدرية) إلى مجموعة التعليمات الهدف. في بعض الحالات، مثل [[محاكاة مجموعات التعليمات]]، يمكن أن تكون مجموعة التعليمات الهدف هي نفسها مجموعة التعليمات المصدرية، وذلك لتوفير مزايا تفيد في الاختبار والتنقيح مثل تتبع التعليمات، ونقاط التوقف الشرطية وأيضاً اكتشاف [[مناطق ساخنة|المناطق الساخنة]] (hot spots).
 
هناك نوعين أساسيين للترجمة الثنائية: الترجمة الثنائية الستاتيكية والترجمة الثنائية الديناميكية. يمكن تنفيذ الترجمة عبر عتاد خاص (عبر دارات خاصة في [[وحدة معالجة مركزية|وحدة المعالجة المركزية]] على سبيل المثال) أو برمجياً (مثل بيئات التنفيذ، المحاكيات). 
 
== الدوافع ==
سطر 7:
 
== الترجمة الثنائية الستاتيكية ==
يهدف المترجم الثنائي الستاتيكي إلى تحويل كافة الشفرات الثنائية المخزنة في [[تنفيذي|الملف التنفيذي]] إلى شفرات يمكن تنفيذها على المعمارية الهدف دون الحاجة للمرور بمرحلة تنفيذ الشفرات المصدرية، كما هو الحال في الترجمة الثنائية الديناميكية. يصعب جداً تنفيذ هذه العملية بشكل صحيح، لأن المترجم قد لا يتمكن من اكتشاف جميع الشفرات. مثلاً، قد لا يمكن الوصول إلى بعض أجزاء البرمجية التنفيذية إلا من خلال تفريعات غير مباشرة لا يمكن معرفة قيمها إلا عند تنفيذ البرمجية.
 
== الترجمة الثنائية الديناميكية ==
تعتمد عملية الترجمة الثنائية الديناميكة على التركيز على سلسلة قصيرة من الشفرة—بحجم [[كتلة بسيطة]] واحدة نموذجياً—ثم ترجمتها وتخزين سلسلة التعليمات الناتجة مؤقتاً. لا تتم ترجمة الشفرات إلا عند اكتشافها وعندما تكون ترجمتها ممكنة، وتحور تعليمات التفريع حتى تشير إلى الشفرات المترجمة والمحفوظة سابقاً (memoization).
 
تختلف الترجمة الثنائية الديناميكية عن المحاكاة البسيطة حيث تلغى فيها حلقة «اقرأ-فك التشفير-نفذ» الرئيسية في المحاكاة—وهي حلقة خانقة للأداء، وهذا يؤدي في المقابل لإضافة عبئ كبير أثناء الترجمة. لكن هذا العبئ يتوقع تعويضه بشكل تدريجي عند تكرار تنفيذ سلاسل الأكواد نفسها مرات عديدة.
 
المترجمات الديناميكية المتقدمة أكثر تستخدم عملية إعادة تجميع ديناميكية حيث يتم تقييس الشفرات المترجمة لمعرفة الأجزاء التي يتكرر تنفيذها مرات كثيرة، ثم تخضع هذه الأجزاء لعمليات تحسين أداء قاسية. هذه التقنية تتقاطع مع [[ترجمة في الوقت المناسب|مترجمات JIT،JIT]]، وفي الحقيقة يمكن اعتبار بعض هذه المترجمات (مثل تقنية [[هوت-سبوت]] من شركة [[صن ميكروسيستمز|صن]]) كمترجمات ديناميكية من مجموعة تعليمات ظاهرية (تعليمات [[بايت-كود]]) إلى مجموعة تعليمات حقيقية.
 
[[تصنيف:برمجيات محاكاة افتراضية]]