مفاهیم CLR, IL, JIT در کامپایل C# و امنیت دسترسی کد
شما کد می نویسید تا روی فریم ورک دات نت اجرا بشه. شما میتونید از هر زبانی مثل C# یا ویژوال بییسیک استفاده کنید. مهم نیست به چه زبانی کد بنویسید. در نهایت کد به مقداری باینری تبدیل می شود که توسط همه سیستم های دات نت محور به روش یکسان اجرا می شن.
کامپایل کد و زبان میانی
بعد از نوشتن کد، بایستی آن را کامپایل کنید تا اجرا شود. فرآیند کامپایل کردن در واقع کدی که نوشتید رو به باینری هایی تبدیل می کند که فقط توسط ماشین فهمیده می شوند. مهم نیست شما کد رو به زبان C# نوشته باشید یا Visual Basic ، برای کد شما باینری های مشابهی ایجاد می شود تا روی پلتفورم دات نت محور اجرا شود. باینری هایی که به این روش ایجاد شده اند (IL) Intermediate Language یا زبان میانی یا Microsoft Intermediate Language (MSIL) یا زبان میانی مشترک Common Intermediate Language (CIL) گفته می شود.
باینری ها سپس روی سیستمی که در حال اجرای فریم ورک دات نت است اجرا میشوند تا برنامه واقعی را اجرا کنند.
Common Language Runtime (CLR)
اجرا کننده زبان مشترک یا CLR یک ماشین مجازی است که توسط فریم ورک .net کنترل می شود. CLR برای اجرای باینتری ایجاد شده از کامپایل کد استفاده می شود.
CLR زبان میانی را می گیرد و آن را به دستوراتی تبدیل می کند که توسط CPU فهمیده می شوند.
Just In Time (JIT) Compilation
Just In Time یا JIT Compilation فرآیند دریافت باینتری های زبان میانی و تبدیل آنها به دستوراتی است که توسط ماشین فهمیده می شوند.
CLR به عنوان میانجی بین زبان میانی و دستورات سطح ماشین عمل می کند.
علاوه بر این، CLR مسئوول عملیات دیگری هم هست:
- مدیریت حافظه
- Garbage Collection
- مدیریت استثنا
- Type Safety
- مدیریت Thread
امنیت دسترسی کد یا Code Access Sucurity (CAS)
علاوه بر مواردی که تا به حال گفتیم، CLR مفهومی به نام CAS را نیز ارائه می کند یعنی برنامه ای که توسط CLR اجرا می شود فقط باید دسترسی های محدودی در حیطه خودش داشته باشد. به عبارت دیگر، برنامه ای که روی CLR اجرا می شود نباید دسترسی داشته باشد که داده برنامه های دیگری که روی همان سیستم در حال اجرا هستند را تغییر دهد. این کار باعث میشود اجرای برنامه امن تر شود.
منبع: medium.com