افتح القائمة الرئيسية

في علم الحاسوب، تعتبر اللغة الوسيطة (بالإنكليزية: Intermediate language) لغة الآلة المجردة و هدف تصميمها هو المساعدة في تحليل البرامج الحاسوبية.[1][2][3] يأتي المصطلح أصلا من استخدامه في المصرّفات، حيث تصرّف شيفرة المصدر الخاصة ببرنامج ما إلى شكل مناسب أكثر لتحويلات تحسين الشيفرة قبل أن يتم استخدامها لتوليد كائنات أو شيفرة مخصصة لآلة معينة. التمثيل الوسيط هي بنية بيانات او شيفرة يستخدم داخلياً بواسطة محول برمجي او آلة افتراضية لتمثيل الشيفرة المصدرية كود مصدري. تم تصميم التمثيل الوسيط لتكون مواتياً لمزيد من المعالجه مثل التحسين و الترجمة.[4] التمثيل الوسيط الجيد يجب ان يكون دقيق و قادر على تمثيل الشيفرة المصدرية دون فقدان المعلومات - ومستقلة عن اي مصدر او اللغة المستهدفة.[5] التمثيل الوسيط قد ياخذ واحداَ من عدة اشكال: في ذاكرة بنية بيانات ,او صف خاص (بالإنجليزية: تعديد) او مكدس (بنية بيانات) (بالإنجليزية:Stack) يعتمد على الشيفرة ويمكن قراءته بواسطة البرنامج.[6] وفي الحالة الاخيرة يطلق عليه ايضاً اللغة الوسيطة. يوجد مثال متعارف عليه في معظم المحولات البرمجية الحديثة حيث ان النص الخطي البشري القابل للقراءة يمثل برنامج يتحول إلى بنية رسومات (بالإنجليزية: Graph) وسيطة تسمح بتحليل التدفق (بالإنجليزية:Data-flow analysis) و إعادة ترتيب قبل إنشاء سلسلة فعلية من تعليمات وحدة المعالجة المركزية. يستخدم التمثيل الوسيط مثل هذا و يسمح لانظمة المحول البرمجي مثل :مجموعة مترجمات جنو and LLVM ليتم اسخدامها من العديد من اللغات المصدرية المختلفة لتوليد الشيفرة للعديد من مجموعة التعليمات المتسهدفة المختلفة.

اللغة الوسيطةعدل

اللغة الوسيطة هي لغة آلة مجردة (بالإنجليزية:Abstract machine) مصممه للمساعدة في تحليل برامج الحاسب الالي . المصطلح ياتي من الاستخدام في محول برمجي حيث ان مصدر الشيفرة للبرنامج يتحول إلى نموذج أكثر تناسب لتحولات تحسين الشيفرة قبل ان تستخدم لتوليد ملف (بالإنجليزية:Object file) او شيفرة الآلة لإجل الآلة المستهدفة. تصميم اللغة الوسيطة يختلف تماماً عن لغة الآلة بثلاث طرق جوهرية: كل تعليمة تمثل عملية جوهرية واحده مثل : (بالإنجليزية:shift-add) لا توجد اساليب معالجة في المعالج دقيق. معلومات تدفق السيطرة (بالإنجليزية:تدفق السيطرة ) قد لا تشمل في مجموعة التعليمات . عدد سجلات المعالجات (بالإنجليزية:سجل المعالج) المتاحه قد تكون كبيره وحتى لا محدوده. التنسيق الشائع للغة الوسيطة شيفرة الثلاث العناوين (بالإنجليزية:Three-address code). المصطلح ايضاً يستخدم للاشارة إلى اللغات المستخدمة كـ وسيطة في بعض لغات البرمجه عالية المستوى التي لا تخرج ملف (بالإنجليزية:Object file) او شيفرة الآلة بنفسها (بالإنجليزية:machine code) ولكن تخرج لغات وسيطة فقط. هذه اللغة الوسيطة تقدم إلى المحول البرمجي هذه اللغة التي تخرج ملف (بالإنجليزية:Object file) او شيفرة الآلة (بالإنجليزية:machine code) جاهزة. عادةً ينفذ لتسهيل عملية التحسن او لزيادة قابلية النقل باستخدام لغة وسيطة تحتوي على محول برمجي للعديد من المعالجات و انظمة التشغيل مثل سي (لغة برمجة) (بالإنجليزية:سي) المستخدمة في التعقيد بين لغة البرمجة عالية المستوى و لغة البرمجة منخفضة المستوى مثل لغة تجميع (بالإنجليزية:لغة تجميع) .

اللغاتعدل

هو ليس مصمم صريحاً كلغة وسيطة , طبيعة سي (لغة برمجة)(بالإنجليزية:سي) كتجريد التجميع و تواجدها في كل مكان كواقع بلغة النظام في شبيه يونكس (بالإنجليزية:Unix-like) و انظمة التشغيل الاخرى جعلتها شائعة في اللغة الوسيطة: إيفل (لغة برمجة) (بالإنجليزية:Eiffel (programming language)) , (بالإنجليزية:Sather) , (بالإنجليزية:Esterel) , بعض لغات ليسب (بالإنجليزية:Lisp (programming language)) ( (بالإنجليزية:Gambit (scheme implementation)) , (بالإنجليزية:(Lush (programming language)) , هاسكل (لغة برمجة) (بالإنجليزية:Haskell (programming language)) ( (بالإنجليزية:Glasgow Haskell Compiler) ) , (بالإنجليزية:Squeak) , (بالإنجليزية:Cython) , (بالإنجليزية:Seed7) , (بالإنجليزية:SystemTap) , (بالإنجليزية:Vala (programming language)) والاخرين جعلوا سي (لغة برمجة)(بالإنجليزية:سي) كلغة وسيطة. صممت المتغيرات في سي (لغة برمجة)(بالإنجليزية:سي) لتوفير مميزات كلغة تجميع محموله تتضمن (بالإنجليزية:C--) و سي (لغة برمجة)(بالإنجليزية:سي) اللغة الوسيطة. اي لغة تستهدف آلة افتراضية (بالإنجليزية:آلة افتراضية) او (بالإنجليزية:p-code machine) تستطيع ان تعتبر لغة وسيطة: (بالإنجليزية:Java bytecode) اللغة الوسيطة العامة لمايكروسوفت هي اللغة الوسيطة المصممه لنشر جميع المحولات البرمجية لـ (دوت نت فريموورك) قبل التجميع ثابت أو ديناميكي إلى لغة الآلة. في حين اغلب لغات الوسيطة مصممه لدعم اللغات التي كتبت بشكل ثابت , وهذا (بالإنجليزية:Parrot intermediate representation) مصمم لدعم اللغات التي كتبت متحركة - في البداية (بيرل , بايثون)(لغات برمجه). (بالإنجليزية:TIMI) هو عالي المستوى يستهدف النظام الاساسي لـ (بالإنجليزية:IBM System i). (بالإنجليزية:O-code) للغة البرمجة الأساسية المختلطة (بالإنجليزية:BCPL) ماتلاب (بالإنجليزية:ماتلاب) شيفرة مقتبسة سابقاً. (بالإنجليزية:Microsoft P-Code). (بالإنجليزية:مجموعة مترجمات جنو) يستخدم عدة لغات وسيطة داخلياً لتبسيط التنقل والتجميع.

مراجععدل

  1. ^ "CISC 471 Compiler Design"by Uli Kremer نسخة محفوظة 20 يوليو 2011 على موقع واي باك مشين.
  2. ^ The radare2 contributors. "ESIL". radare2 project. مؤرشف من الأصل في 26 أغسطس 2016. اطلع عليه بتاريخ 17 يونيو 2015. 
  3. ^ "Bitcode (iOS, watchOS)". Hacker News. 10 June 2015. مؤرشف من الأصل في 18 مايو 2019. اطلع عليه بتاريخ 17 يونيو 2015. 
  4. ^ Walker، David. "CS320: Compilers: Intermediate Representation" (PDF). مؤرشف من الأصل (Lecture slides) في 12 يوليو 2018. اطلع عليه بتاريخ 12 فبراير 2016. 
  5. ^ Chow، Fred (2013-11-22). "The Challenge of Cross-language Interoperability". ACM Queue. 11 (10). اطلع عليه بتاريخ 12 فبراير 2016. 
  6. ^ Toal، Ray. "Intermediate Representations". مؤرشف من الأصل في 19 مايو 2019. اطلع عليه بتاريخ 12 فبراير 2016.