1-2-1 کامپایل کردن کد .NET
کامپایلرهای مطیع CLR کدی تولید میکنند که کد هدف زمان اجرا بوده و برای یک cpu خاص پیشنهاد شده است . این کد به نام cll است . IL یا MSIL یک زبان از نوع اسمبلی است که در یک فایل DLL یا EXE بسته بندی میشود . توجه کنید که اسمبلی ها فایل هایی با استاندارد اجرایی نیستند . لازم است یک کامپایلر زمان اجرا به نام JIT و IL به یک کد ماشین خاص تبدیل کند . ( زمانیکه برنامه واقعا اجرا میشود ) . چون CLR مسئول مدیریت این IL است ، این کد میانی یکی از کلیدهای رویارویی با اهداف اسمی چارچوب .NET از نظر سازگاری زبان است .
هدف دیگر .NET قابلیت حمل platform است . که با محلی کردن ( localizing ) ایجاد کد ماشین در کامپایلر JIT فراهم میشود . بدین معنی که IL تولید شده روی یک Platform میتواند روی Platform دیگری که چارچوب خاص خودش و یک کامپایلر JIT با کد ماشین خاص خودش را دارد ، اجرا شود .
کامپایلرهایی که کد هدف آنها CLR است ، برای هر ماژول علاوه بر تولید IL ، باید فراداده¬ای ( metadata ) را نیز صادر کنند . در فراداده¬ها مجموعه¬ای از جداول قرار مي گيرند تا هر ماژول ، كد خود – توصيف (Self descriptive ) داشته باشد . در جداول علاوه بر توصيف كامل كد، اطلاعاتي درباره اسمبلي ها نيز وجود دارد . اين اطلاعات شامل موارد د يگر نيز هستند: چه نوع داد ه هايي در دسترس هستند ؟
نام هر نوع داده، اعضاي نوع داده، دامنه يا ميدان د يد نوع داده و ويژگي هاي هر نوع داده ديگر . فراداده هاي ديگري كه
كاربردهاي زيادي دارند:
*مهمترین کابرد آن بوسیله کامپایلر JIT است که اطلاعات همه نوع داده¬های مورد نیاز برای کامپایل کردن را مستقیما از فراکد جمع آوری میکند . این اطلاعات را برای بررسی کد که به کار میبرد تا مطمئن شود برنامه عملیات را به درستی انجام میدهد . برای مثال JIT از طریقه مقایسه¬ی پارامترهای متد ، فراخوانی صحیح را مطمئن میسازد .
*فراداده¬ها در پروسه جمع آوری زباله استفاده میشوند . جمع کننده زباله ، برای شناسایی فیلدها و ارجاعات آنها از فراداده¬ها استفده میکند و میتواند تعیین کند حافظه¬ی چه اشیایی میتوانند آزاد شوند یا نه .
*.NET یک مجموعه از کلاس¬ها برای خواندن فراداده¬های یک برنامه فراهم میکند این توانایی به نام انعکاس(Reflection)شناخته میشود که یک ویژگی قدرتمند است و اجازه میدهد یک برنامه در زمان اجرا ، کد را مورد جستجو قرار دهد و بر اساس اطلاعات یافته شده تصمیم گیری کند . میتوان صفات سفارشی را به فراداده اضافه کرد .
IL و فراداده¬ برای فراهم ساختن ارتباط بین زبانی بسیار مهم هستند . اما دنیای واقعی به همه کامپایلرهای .NET که یک مجموعه¬ی مشترک از انواع داده¬ای و توصیف زبان را پشتیبانی میکنند ، منوط است . برای مثال دو زبان در IL سازگار نیستند . اگر یک عدد صحیح علامت دار 32 بیتی را پشتیبانی کند و دیگری آن را پشتیبانی نکند . آنها ممکن است گرامر متقاوتی را داشته باشند اما باید روی انواع داده¬ای پایه که پشتیبانی میکنند توافق داشته باشند .
همانطور که قبلا بحث شده CLI یک توصیف رسمی به نام CTS تعریف میکند که بخش مکمل CLR است . آن شرح میدهد که چگونه انواع داده¬ای تعریف میشوند و چگونه باید رفتار کنند تا بوسیله CLR پشتیبانی شوند .