MSIL چیست؟ – آشنایی با زبان میانی مایکروسافت

MSIL چیست؟ – آشنایی با زبان میانی مایکروسافت

زبان میانی مایکروسافت یا MSIL (Microsoft Intermediate Language) زبان برنامه‌نویسی سطح میانه‌ای است و برای اجرای کدهای NET. در محیط‌های مختلف مورد استفاده قرار می‌گیرد و تمام ویژگی‌های نرم‌افزاری NET Framework. از آن استفاده می‌کنند. در این مقاله از سری مقالات آموزشی پی استور به بررسی نحوه تولید و اجرای MSIL و اینکه MSIL چیست؟ همراه با بررسی برخی دستورات آن، می پردازیم.

مقدمه

در دنیای برنامه‌نویسی، اجرای کدهای نرم‌افزاری بر روی پلتفرم‌های مختلف یکی از موضوعات مهم است. به منظور رفع این مشکل و افزایش قابلیت حمل‌پذیری نرم‌افزارها، مایکروسافت در NET. فریم‌ورک از مفهوم زبان میانی (Intermediate Language) استفاده کرده است. MSIL، که توسط کامپایلرهای خاص زبان به‌طور خودکار از کد منبع تولید می‌شود، بستری برای اجرای برنامه‌های دات‌نت به‌طور مستقل از پلتفرم فراهم می‌آورد. در این فرآیند، کامپایلر JIT (Just In Time) مسئول تبدیل MSIL به کد ماشین خاص سیستم هدف است.

MSIL چیست؟

زبان میانی مایکروسافت «Microsoft Intermediate Language» به‌اختصار «MSIL» که به‌عنوان زبان میانی مشترک «Common Intermediate Language» یعنی «CIL» شناخته می‌شود، مجموعه‌ای از دستورات است که مستقل از پلتفرم هستند و توسط کامپایلر مخصوص زبان از کد منبع تولید می‌شوند. MSIL به دلیل مستقل بودن از پلتفرم می‌تواند روی هر محیطی که از زیرساخت CLI پشتیبانی می‌کند، مانند زمان اجرای NET. ویندوز، اجرا شود.

MSIL توسط کامپایلر JIT (تفسیر همزمان) به کد ماشین خاص محیط کامپیوتر تبدیل می‌شود. این فرآیند قبل از اجرای MSIL انجام می‌گیرد. علاوه بر این، تبدیل MSIL به کد ماشین بر اساس نیاز صورت می‌گیرد؛ به این معنا که کامپایلر JIT تنها بخش‌های موردنیاز از MSIL را کامپایل می‌کند، نه کل آن.

فرآیند اجرای کد در CLR

فرآیند اجرا که شامل ایجاد MSIL و تبدیل MSIL به کد ماشین توسط کامپایلر JIT می‌باشد، به شرح زیر است:

زبان میانی مایکروسافت
فرآیند اجرای کد در زمان اجرای زبان مشترک CLR
  • کد منبع توسط کامپایلر مخصوص زبان در زمان کامپایل CLR به MSIL تبدیل می‌شود. همچنین، همراه با MSIL، متاداده نیز در زمان کامپایل تولید می‌شود. متاداده شامل اطلاعاتی مانند تعریف و امضای انواع در کد، اطلاعات مربوط به زمان اجرا و موارد دیگر است.
  • با مونتاژ کردن MSIL، یک اسمبلی زیرساخت زبان مشترک (CLI) ایجاد می‌شود. این اسمبلی اساساً یک کتابخانه کد کامپایل‌شده است که برای امنیت، استقرار، نسخه‌بندی و غیره استفاده می‌شود و به دو نوع تقسیم می‌شود: اسمبلی پردازشی (EXE)، اسمبلی کتابخانه‌ای (DLL)
  • کامپایلر JIT سپس زبان میانی مایکروسافت (MSIL) را به کد ماشین خاص محیط رایانه‌ای که در آن اجرا می‌شود، تبدیل می‌کند. MSIL به صورت موردنیاز به کد ماشین تبدیل می‌شود؛ به این معنا که کامپایلر JIT تنها بخش‌های موردنیاز MSIL را کامپایل می‌کند، نه کل آن.
  • کد ماشین تولیدشده با استفاده از کامپایلر JIT سپس توسط پردازنده کامپیوتر اجرا می‌شود.

مثال:
MSIL توسط کامپایلر مخصوص زبان از کد منبع زیر تولید می‌شود. برای درک بهتر MSIL، کد منبع ساده‌ای از سی‌شارپ «#C» با کلاسی به نام Demo که عبارت “ProgramStore” را چاپ می‌کند، به شرح زیر آورده شده است:

using System; 

public class Demo { 
 public static void Main() 
 { 
  Console.WriteLine("ProgramStore"); 
 } 
} 

زبان میانی مایکروسافت (MSIL) که توسط کامپایلر #C برای کد ارائه‌شده در بالا تولید می‌شود، به شرح زیر است:

// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Demo
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main() cil managed
  {
    // 
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "ProgramStore"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Demo::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // 
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Demo::.ctor

} // end of class Demo


// =============================================================

در MSIL فوق، اپ‌کدها دستورات یک یا دو بایتی هستند. تعریف‌های کلاس پایه که همه کلاس‌های دیگر از آن‌ها ارث‌بری می‌کنند، در فایل mscorlib.dll قرار دارند.

در متد ()Main، دستور ldstr رشته ProgramStore را در پشته بارگذاری می‌کند. سپس تابع استاتیک System.Console.Writeline فراخوانی می‌شود و رشته از پشته حذف می‌شود. در نهایت، دستور ret پایان فراخوانی تابع را مشخص می‌کند.

دستور ()ctor نشان‌دهنده سازنده پیش‌فرض بدون پارامتر برای کلاس Demo است. این سازنده به‌طور خودکار توسط کامپایلر برای کلاس غیراستاتیک Demo ایجاد می‌شود. دستور call سازنده شیء پایه را فراخوانی می‌کند و دستور ret پایان فراخوانی تابع را نشان می‌دهد.

نتیجه‌گیری

زبان میانی مایکروسافت (MSIL) نقشی کلیدی در فرآیند اجرای برنامه‌های دات‌نت دارد، زیرا امکان اجرای کدها را به‌صورت مستقل از پلتفرم فراهم می‌کند. این زبان توسط کامپایلرهای مخصوص زبان از کد منبع تولید شده و سپس با استفاده از کامپایلر JIT به کد ماشین خاص سیستم هدف تبدیل می‌شود. این فرآیند موجب بهینه‌سازی عملکرد و قابلیت اجرا در محیط‌های مختلف می‌شود.


سوالات متداول


MSIL چیست و چه نقشی در دات‌نت دارد؟

MSIL یک زبان میانی است که کدهای نوشته‌شده در زبان‌های برنامه‌نویسی پشتیبانی‌شده توسط چارچوب دات‌نت (مانند #C یا VB.NET) به آن کامپایل می‌شوند. این زبان مستقل از پلتفرم است و به‌صورت بایت‌کد اجرا می‌شود. در زمان اجرا، MSIL توسط CLR (Common Language Runtime) به کد ماشین تبدیل می‌شود و این فرآیند باعث می‌شود برنامه‌ها روی سیستم‌های مختلف قابل اجرا باشند.

تفاوت MSIL با زبان‌های برنامه‌نویسی سطح بالا چیست؟

زبان‌های برنامه‌نویسی سطح بالا (مانند #C) برای توسعه‌دهندگان خواناتر و قابل درک‌تر هستند، درحالی‌که MSIL زبانی میانی و سطح پایین‌تر است که برای اجرا توسط ماشین مجازی دات‌نت طراحی شده است. برنامه‌نویسان مستقیماً با MSIL کدنویسی نمی‌کنند، اما می‌توانند آن را با ابزارهایی مانند ILDASM مشاهده و بررسی کنند.

آیا می‌توان مستقیماً به زبان MSIL برنامه‌نویسی کرد؟

بله، اما این کار معمولاً انجام نمی‌شود، زیرا MSIL بیشتر برای اهداف آموزشی، دیباگ یا بهینه‌سازی‌های خاص استفاده می‌شود. ابزارهایی مانند ILASM (IL Assembler) امکان نوشتن و اجرای کد MSIL را فراهم می‌کنند، اما کار با آن به تخصص بیشتری نسبت به زبان‌های سطح بالا نیاز دارد.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 7 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
.c-sharpcorner geeksforgeeks مجله پی استور it-visions

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 دیدگاه دربارهٔ «MSIL چیست؟ – آشنایی با زبان میانی مایکروسافت»



برچسب‌ها:
سی شارپ


پیمایش به بالا