تحليل الأسماء المستعارة

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

تُصنَّف تقنيات تحليل الأسماء المستعارة عادةً حسب حساسيتها لتدفق البيانات وحساسيتها للسياق. وقد تُحدِّد هذه التقنيات المعلومات التي قد تكون ذات أسماء مستعارة أو معلومات يجب أن تكون كذلك. ويُستخدم مصطلح تحليل الأسماء المستعارة غالبًا كمرادف لتحليل النقاط المرجعية ، وهو حالة خاصة.

تهدف برامج تحليل الأسماء المستعارة إلى إنشاء وحساب معلومات مفيدة لفهم ظاهرة الأسماء المستعارة في البرامج.

ملخص

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

p.foo = 1 ; q.foo = 2 ; i = p.foo + 3 ;

هناك ثلاث حالات محتملة للأسماء المستعارة هنا:

  1. لا يمكن للمتغيرين p و q أن يتشابها (أي أنهما لا يشيران أبدًا إلى نفس موقع الذاكرة).
  2. يجب أن يكون للمتغيرين p و q اسم مستعار (أي أنهما يشيران دائمًا إلى نفس موقع الذاكرة).
  3. لا يمكن تحديد ما إذا كان p و q اسمين مستعارين أم لا بشكل قاطع في وقت الترجمة.

إذا لم يكن بالإمكان استخدام اسم بديل لـ p و q، i = p.foo + 3;فيمكن تغيير إلى i = 4. أما إذا كان لا بد من استخدام اسم بديل لـ p و q، i = p.foo + 3;فيمكن تغيير إلى i = 5لأن p.foo + 3. q.foo + 3في كلتا الحالتين، يمكننا إجراء تحسينات بناءً على معرفة الاسم البديل (بافتراض عدم وجود خيط آخر يقوم بتحديث نفس المواقع بالتداخل مع الخيط الحالي، أو أن نموذج ذاكرة اللغة يسمح بعدم ظهور هذه التحديثات مباشرةً للخيط الحالي في حال عدم وجود بنيات تزامن صريحة ). من ناحية أخرى، إذا لم يكن معروفًا ما إذا كان p و q يستخدمان اسمًا بديلًا أم لا، فلن يكون بالإمكان إجراء أي تحسينات، وسيتعين تنفيذ كامل الكود للحصول على النتيجة. يُقال إن مرجعين للذاكرة لهما علاقة اسم بديل محتمل إذا كان استخدامهما للاسم البديل غير معروف.

إجراء تحليل الأسماء المستعارة

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

تحليل الأسماء المستعارة بناءً على النوع

إذا كانت اللغة المُترجمة آمنة من حيث النوع ، وكان مدقق أنواع المُترجم صحيحًا، وكانت اللغة تفتقر إلى القدرة على إنشاء مؤشرات تُشير إلى متغيرات محلية (مثل ML أو Haskell أو Java )، فإنه يُمكن إجراء بعض التحسينات المفيدة. [ 1 ] هناك العديد من الحالات التي نعلم فيها أن موقعين في الذاكرة يجب أن يكونا في فئتين مختلفتين من الأسماء المستعارة:

  1. لا يمكن أن يكون متغيران من أنواع مختلفة في نفس فئة الاسم المستعار لأنها خاصية للغات ذات الأنواع القوية والخالية من مراجع الذاكرة (أي لا يمكن تغيير المراجع إلى مواقع الذاكرة مباشرة) حيث لا يمكن لمتغيرين من أنواع مختلفة أن يشتركا في نفس موقع الذاكرة في وقت واحد.
  2. لا يمكن أن تكون عمليات تخصيص الذاكرة المحلية لإطار المكدس الحالي ضمن نفس فئة الاسم المستعار لأي عملية تخصيص سابقة من إطار مكدس آخر. وذلك لأن عمليات تخصيص الذاكرة الجديدة يجب أن تكون منفصلة تمامًا عن جميع عمليات تخصيص الذاكرة الأخرى.
  3. لكل حقل من حقول كل نوع من أنواع السجلات فئة اسم مستعار خاصة به، وذلك لأن نظام تصنيف البيانات عادةً ما يسمح فقط بأسماء مستعارة للسجلات من نفس النوع. وبما أن جميع سجلات النوع الواحد تُخزَّن بتنسيق متطابق في الذاكرة، فلا يمكن للحقل أن يُشير إلا إلى نفسه.
  4. وبالمثل، فإن كل مصفوفة من نوع معين لها فئة اسم مستعار خاصة بها.

عند إجراء تحليل الأسماء المستعارة للتعليمات البرمجية، يجب تصنيف كل عملية تحميل وتخزين في الذاكرة بفئتها. عندئذٍ نحصل على الخاصية المفيدة، مع الأخذ في الاعتبار مواقع الذاكرة.أأنا{\displaystyle A_{i}}وبج{\displaystyle B_{j}}معأنا،ج{\displaystyle i,j}فئات الأسماء المستعارة، ذلك إذاأنا=ج{\displaystyle i=j}ثمأأنا{\displaystyle A_{i}}قد يكون الاسم المستعاربج{\displaystyle B_{j}}وإذاأناج{\displaystyle i\neq j}عندها لن تتداخل مواقع الذاكرة.

تحليل الأسماء المستعارة القائم على التدفق

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

انظر أيضاً

مراجع

  1. ديوان، عامر؛ ماكينلي، كاثرين س.؛ موس، ج. إليوت ب. (1998). "تحليل الأسماء المستعارة القائم على النوع" . وقائع مؤتمر ACM SIGPLAN 1998 حول تصميم لغات البرمجة وتنفيذها - PLDI '98 . مونتريال، كيبيك، كندا: مطبعة ACM. الصفحات 106-117 . doi : 10.1145/277650.277670 . ISBN  978-0-89791-987-6. S2CID 5155574 . 
  • أبيل، أندرو و. (1998). تنفيذ المترجمات الحديثة في لغة ML . كامبريدج، المملكة المتحدة: مطبعة جامعة كامبريدج. ISBN 0-521-60764-7.