التمثيل الوسيط
التمثيل الوسيط ( IR ) هو بنية البيانات أو الشفرة التي يستخدمها المترجم أو الآلة الافتراضية داخليًا لتمثيل الشفرة المصدرية . يُصمم التمثيل الوسيط ليكون مُلائمًا للمعالجة اللاحقة، مثل التحسين والترجمة . [ 1 ] يجب أن يكون التمثيل الوسيط "الجيد" دقيقًا - قادرًا على تمثيل الشفرة المصدرية دون فقدان أي معلومات [ 2 ] - ومستقلًا عن أي لغة مصدر أو هدف مُحددة. [ 1 ] قد يتخذ التمثيل الوسيط أحد الأشكال التالية: بنية بيانات في الذاكرة ، أو شفرة خاصة قائمة على الصفوف أو المكدس قابلة للقراءة بواسطة البرنامج. [ 3 ] في الحالة الأخيرة، يُطلق عليه أيضًا اسم اللغة الوسيطة .
يُعدّ استخدام مُترجمات البرامج الحديثة مثالًا نموذجيًا على ذلك. فعلى سبيل المثال، يُحوّل مُفسّر لغة بايثون (CPython) النص الخطي المقروء الذي يُمثّل البرنامج إلى بنية بيانية وسيطة تُتيح تحليل تدفق البرنامج وإعادة ترتيبه قبل التنفيذ. ويُمكّن استخدام تمثيل وسيط كهذا أنظمة مُترجمات مثل مجموعة مُترجمات جنو (GNU Compiler Collection) و LLVM من العمل مع العديد من لغات المصدر المختلفة لتوليد شفرة برمجية للعديد من البنى المستهدفة المختلفة .
لغة متوسطة
اللغة الوسيطة هي لغة آلة مجردة مصممة للمساعدة في تحليل برامج الحاسوب . يأتي المصطلح من استخدامها في المترجمات ، حيث يُترجم الكود المصدري للبرنامج إلى شكل أكثر ملاءمةً لعمليات تحسين الكود قبل استخدامه لتوليد كود الكائن أو كود الآلة للجهاز المستهدف. يختلف تصميم اللغة الوسيطة عادةً عن تصميم لغة الآلة العملية في ثلاثة جوانب أساسية:
- تمثل كل تعليمة عملية أساسية واحدة بالضبط؛ على سبيل المثال، لا توجد أوضاع عنونة "الإزاحة والجمع" الشائعة في المعالجات الدقيقة .
- قد لا تتضمن مجموعة التعليمات معلومات التحكم في التدفق .
- قد يكون عدد سجلات المعالج المتاحة كبيرًا، بل وربما لا محدود.
يُعد رمز العناوين الثلاثة تنسيقًا شائعًا للغات الوسيطة .
يُستخدم هذا المصطلح أيضًا للإشارة إلى اللغات التي تُستخدم كوسيط بين بعض لغات البرمجة عالية المستوى ، والتي لا تُخرج شيفرة الكائن أو شيفرة الآلة مباشرةً، بل تُخرج لغة الوسيط فقط. تُرسل هذه اللغة الوسيطة إلى مُترجم خاص بتلك اللغة، والذي يُخرج بدوره شيفرة الكائن أو شيفرة الآلة النهائية. يُستخدم هذا عادةً لتسهيل عملية التحسين أو لزيادة قابلية النقل باستخدام لغة وسيطة لها مُترجمات للعديد من المعالجات وأنظمة التشغيل ، مثل لغة C. تقع اللغات المستخدمة لهذا الغرض في مستوى تعقيد متوسط بين لغات البرمجة عالية المستوى ولغات البرمجة منخفضة المستوى ، مثل لغات التجميع .
اللغات
على الرغم من أن لغة C لم تُصمم صراحةً كلغة وسيطة، إلا أن طبيعتها كلغة تجريدية للغة التجميع وانتشارها الواسع كلغة نظام فعلية في أنظمة التشغيل الشبيهة بنظام يونكس وغيرها، جعلها لغة وسيطة شائعة الاستخدام. تستخدم لغات مثل Eiffel و Sather و Esterel وبعض لهجات لغة Lisp ( مثل Lush و Gambit ) ولغة Slang المشتقة من Smalltalk في لغة Squeak ، بالإضافة إلى Nim و Cython و SystemTap و Vala وV وغيرها، لغة C كلغة وسيطة. وقد صُممت نسخ مختلفة من لغة C لتوفير ميزاتها كلغة تجميع قابلة للنقل ، بما في ذلك C-- ولغة C الوسيطة .
يمكن اعتبار أي لغة تستهدف آلة افتراضية أو آلة رمزية لغة وسيطة:
- بايت كود جافا
- لغة الوسيط المشتركة من مايكروسوفت هي لغة وسيطة مصممة ليتم مشاركتها من قبل جميع المترجمات الخاصة بإطار عمل .NET ، قبل الترجمة الثابتة أو الديناميكية إلى لغة الآلة.
- بينما تم تصميم معظم اللغات الوسيطة لدعم اللغات ذات الكتابة الثابتة، فإن تمثيل Parrot الوسيط مصمم لدعم اللغات ذات الكتابة الديناميكية - في البداية Perl و Python.
- يتم استخدام TIMI بواسطة المترجمات على منصة IBM i .
- رمز O لـ BCPL
- كود MATLAB المُجمَّع مسبقًا
- رمز مايكروسوفت P
- كود باسكال p
تستخدم مجموعة مترجمات جنو (GCC) عدة لغات وسيطة داخليًا لتبسيط قابلية النقل والترجمة المتقاطعة . ومن بين هذه اللغات
- لغة نقل السجلات التاريخية (RTL)
- لغة الشجرة العامة
- برنامج GIMPLE القائم على SSA . (مستوى أدنى من GENERIC؛ مدخل لمعظم المحسنات؛ يحتوي على تدوين "رمز بايت" مضغوط.)
يدعم GCC إنشاء هذه الـ IRs، كهدف نهائي:
- الطبقة الوسيطة لـ HSA
- تمثيل وسيط LLVM (تم تحويله من GIMPLE في llvm-gcc الذي توقف الآن والذي يستخدم مُحسِّنات LLVM وتوليد التعليمات البرمجية)
يعتمد إطار عمل مُصرّف LLVM على لغة LLVM IR الوسيطة، والتي يُشار إلى تمثيلها الثنائي المُتسلسل المُضغوط باسم "bitcode"، وقد طورتها شركة Apple. [ 4 ] [ 5 ] ومثل GIMPLE Bytecode، يُعدّ LLVM Bitcode مفيدًا في تحسين وقت الربط. ومثل GCC، يستهدف LLVM أيضًا بعض تمثيلات IR المُخصصة للتوزيع المباشر، بما في ذلك PNaCl IR و SPIR من Google . ومن التطورات الأخرى في LLVM استخدام تمثيل وسيط متعدد المستويات ( MLIR ) الذي يُتيح إمكانية توليد التعليمات البرمجية لأهداف غير متجانسة مختلفة، ودمج مُخرجات مُصرّفات مُختلفة. [ 6 ]
تُستخدم لغة ILOC الوسيطة [ 7 ] في دروس تصميم المترجمات كلغة هدف بسيطة. [ 8 ]
آخر
تستخدم أدوات التحليل الثابت غالبًا تمثيلًا وسيطًا. على سبيل المثال، Radare2 عبارة عن مجموعة أدوات لتحليل الملفات الثنائية والهندسة العكسية. وهي تستخدم اللغتين الوسيطتين ESIL [ 9 ] وREIL [ 10 ] لتحليل الملفات الثنائية.
انظر أيضاً
- شجرة بناء الجملة المجردة – تمثيل شجري للبنية النحوية المجردة لشفرة المصدر
- الأشواك
- بايت كود – مجموعة تعليمات مصممة ليتم تشغيلها بواسطة مترجم برمجي
- إعادة كتابة الرسم البياني – إنشاء رسم بياني جديد من رسم بياني موجود
- الترجمة الآلية بين اللغات – نوع من أنواع الترجمة الآلية
- لغة محورية – لغة وسيطة بين لغات مختلفة
- مترجم من المصدر إلى المصدر - مترجم شفرة المصدر الحاسوبية
- جدول الرموز – بنية بيانات يستخدمها مترجم اللغة مثل المترجم أو المفسر
- إعادة صياغة المصطلحات – استبدال مصطلح فرعي في صيغة بمصطلح آخر. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- غير مستعمرة
مراجع
- 1 2 ووكر، ديفيد. "CS320: المترجمات: التمثيل الوسيط" (شرائح المحاضرة) . تم الاطلاع عليه بتاريخ 12 فبراير 2016 .
- ↑ تشاو، فريد (22 نوفمبر 2013). "تحدي قابلية التشغيل البيني بين اللغات" . مجلة ACM Queue . 11 (10) . تم الاطلاع عليه بتاريخ 12 فبراير 2016 .
- ↑ توال، راي. "التمثيلات الوسيطة" . تم الاطلاع عليه بتاريخ 12 فبراير 2016 .
- ↑ "Bitcode (iOS, watchOS)" . Hacker News. 10 يونيو 2015. تم الاطلاع عليه بتاريخ 17 يونيو 2015 .
- ↑ "تنسيق ملف LLVM Bitcode" . llvm.org . تم الاطلاع عليه بتاريخ 17 يونيو 2015 .
- ↑ "MLIR" .
- ↑ "محاكي ILOC" مؤرشف بتاريخ 7 مايو 2009 على موقع Wayback Machine بواسطة دبليو إيه باريت 2007، مع إعادة صياغة لكيث كوبر وليندا توركزون، "هندسة المترجم"، مورغان كوفمان ، 2004. ISBN 1-55860-698-X.
- ↑ "تصميم المترجمات CISC 471" بقلم أولي كريمر
- ↑ مساهمو مشروع Radare2. "ESIL" . مشروع Radare2. مؤرشف من الأصل بتاريخ 18 أغسطس 2015. تم الاطلاع عليه بتاريخ 17 يونيو 2015 .
- ↑ سيباستيان بورست (7 مارس 2010). "لغة REIL - الجزء الأول" . zynamics.com . تم الاطلاع عليه بتاريخ 17 يونيو 2015 .
روابط خارجية
- مجموعة ستانفورد SUIF
- بناء المترجم
- تصنيف لغات البرمجة
