# لغة وسيطة (حوسبة)

في علم الحاسوب، تعتبر اللغة الوسيطة (بالإنكليزية: Intermediate language) لغة الآلة المجردة وهدف تصميمها هو المساعدة في تحليل البرامج الحاسوبية. يأتي المصطلح أصلا من استخدامه في المصرّفات، حيث تصرّف شيفرة المصدر الخاصة ببرنامج ما إلى شكل مناسب أكثر لتحويلات تحسين الشيفرة قبل أن يتم استخدامها لتوليد كائنات أو شيفرة مخصصة لآلة معينة. التمثيل الوسيط هي بنية بيانات أو شيفرة يستخدم داخلياً بواسطة محول برمجي أو آلة افتراضية لتمثيل الشيفرة المصدرية كود مصدري. تم تصميم التمثيل الوسيط لتكون مواتياً لمزيد من المعالجة مثل التحسين والترجمة. التمثيل الوسيط الجيد يجب ان يكون دقيق وقادر على تمثيل الشيفرة المصدرية دون فقدان المعلومات - ومستقلة عن أي مصدر أو اللغة المستهدفة. التمثيل الوسيط قد ياخذ واحداَ من عدة اشكال: في ذاكرة بنية بيانات، أو صف خاص (بالإنجليزية: تعديد) أو مكدس (بنية بيانات) (بالإنجليزية:Stack) يعتمد على الشيفرة ويمكن قراءته بواسطة البرنامج. وفي الحالة الاخيرة يطلق عليه ايضاً اللغة الوسيطة. يوجد مثال متعارف عليه في معظم المحولات البرمجية الحديثة حيث ان النص الخطي البشري القابل للقراءة يمثل برنامج يتحول إلى بنية رسومات (بالإنجليزية: 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). (بالإنجليزية: مجموعة مترجمات جنو) يستخدم عدة لغات وسيطة داخلياً لتبسيط التنقل والتجميع.

## مراجع

* ↑ "CISC 471 Compiler Design" by Uli Kremer نسخة محفوظة 20 يوليو 2011 على موقع واي باك مشين.
* ↑ The radare2 contributors. "ESIL". radare2 project. مؤرشف من الأصل في 2016-08-26. اطلع عليه بتاريخ 2015-06-17. {{استشهاد ويب}}: |مؤلف= باسم عام (مساعدة)صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ↑ "Bitcode (iOS, watchOS)". Hacker News. 10 يونيو 2015. مؤرشف من الأصل في 2019-05-18. اطلع عليه بتاريخ 2015-06-17.
* ↑ Walker، David. "CS320: Compilers: Intermediate Representation" (PDF). مؤرشف من الأصل (Lecture slides) في 2018-07-12. اطلع عليه بتاريخ 2016-02-12.
* ↑ Chow، Fred (22 نوفمبر 2013). "The Challenge of Cross-language Interoperability". ACM Queue. ج. 11 ع. 10. مؤرشف من الأصل في 2019-05-17. اطلع عليه بتاريخ 2016-02-12.
* ↑ Toal، Ray. "Intermediate Representations". مؤرشف من الأصل في 2019-05-19. اطلع عليه بتاريخ 2016-02-12.
* بوابة علم الحاسوب
* بوابة تقانة المعلومات