دوشنبه, ۱۷ اردیبهشت, ۱۴۰۳ / 6 May, 2024
مجله ویستا

ایجاد اسمبلی‌ها


ایجاد اسمبلی‌ها
هنگامی که چندین زبان دارید، چگونه با یکدیگر جهت اجرا کار می‌کنند؟
بیشتر زبان‌های برنامه‌نویسی دیگر از فرمت اجرایی قابل حمل (PE) برای فایل‌های اجرایی خود استفاده نمی‌کنند. درمحیط .NET مورد جدیدی وجود دارد: یک روش منطقی برای مالک کلکسیونی از فایل‌هاست که به عنوان اسمبلی‌های ایستا در نظر گرفته می‌شوند که CLR از آن‌ها استفاده می‌کند. اسمبلی‌های ایستا می‌توانند منابع مورد استفاده اسمبلی باشند. ازقبیل فایل‌های تصویری یا فایل‌های متنی که برنامه از آن‌ها استفاده خواهد کرد. کد واقعی که اجرا می‌شود، در اسمبلی با فرمت زبان واسط مایکروسافت (MSIL) می‌باشد. به عبارت دیگر، هر اسمبلی معادل یک جزء VB ۶.۰ COM است. هر اسمبلی سه گزینه دارد که بایستی درهنگام ایجاد آن تنظیم شوند:
۱) بهینه‌سازی بارکننده
۲) نام‌گذاری
۳) محل
بهینه‌سازی بارکننده دارای سه تنظیم می‌باشد، تک حوزه‌ای، چند حوزه‌ای و میزبان چند حوزه‌ای. تنظیم تک حوزه‌ای پیش‌فرض است و در بیشتر موقعیت‌های سمت کلاینت استفاده می‌شود. کد JIT معمولاً درهنگام استفاده از تنظیم تک حوزه‌ای کوچکتر است (درمقایسه با دوتنظیم دیگر) و هیچ تفاوت قابل توجه‌ای بین منابع حافظه وجود ندارد. استثناء هنگامی است که برنامه خاتمه به عنوان بخشی ازیک تنظیم چند حوزه‌ای یا میزبان چند حوزه‌ای به کار می‌رود، که واقعاً مفیدتر است تا سودمندتر (ازقبیل یک راه حل کلاینت/سرور).
تنظیمات چند حوزه‌ای و میزبان چند حوزه‌ای برای مفهوم یکسانی از کاربرد چند حوزه‌ای به کار می‌رود تنها تفاوت بین این دو چگونگی عکس‌العمل CLR در کد است، در چند حوزه‌ای که درکل حوزه یکسان فرض می‌شود. در میزبان چند حوزه‌ای هر میزبان حوزه کد متفاوتی دارد. فرض کنید که یک برنامه‌نویسی دارید که تمام حوزه‌ها دارای نام فایل اسمبلی هستند، اما هریک کد میزبان متفاوتی دارند که نشان می‌دهد هریک چگونه محاوره می‌کنند. شما بهترین کارآیی را با استفاده از روال بهینه‌سازی میزبان چند حوزه‌ای خواهید داشت.
بیشتر منابع را با تنظیم اسمبلی جهت استفادة برنامه‌ها خواهید داشت. منابع کمتری مصرف خواهد شد زیرا نوع (شیء) بار شده و نگاشت می‌شود، بنابراین نوع نباید در هربار مجدداً ایجاد شود. هرچند، نتیجه نهایی کد JIT مقداری افزایش می‌یابد، و دستیابی به آیتم‌های ایستا کندتر می‌گردد، زیرا مرجع ایستا به طور غیرمستقیم ارجاع می‌گردند.
نام اسمبلی می‌تواند توسط چند برنامه بر محدوده و کاربرد تأثیر گذارد. برنامه‌ای که از سمت کلاینت استفاده می‌شود، نام داده شده را درهنگام ایجاد به کار می‌برد، اما به هیچ وجه از تصادم نام جلوگیری نمی‌شود. بنابراین به منظور کمک به جلوگیری از برخوردهای نام که یک اسمبلی در یک سناریوی چند اسمبلی می‌تواند نامی مشترک به اسمبلی بدهید. داشتن نام مشترک بدین معنی است که اسمبلی می‌تواند در کش اسمبلی سراسری گسترش یابد که دراین صورت به عنوان یک مخزن سراسری از اسمبلی‌ها تصور می‌شود.
نام مشترک از نام متنی اسمبلی (نامی که برای آن ایجاد می‌کنید) و یک امضای دیجیتال تشکیل می‌شود. نام‌های مشترک نام‌های منحصر به فردی هستند که وابسته به زوج نام متنی و امضای دیجیتال می‌باشند. این سیستم ، به نوبت باعث جلوگیری از برخورد نام می‌شود و به هر فردی اجازه می‌دهد تا از نام متنی یکسان برای نوشتن در فایل خود استفاده کند، زیرا نام مشترک متفاوت است. هر نام مشترک اطلاعات موردنیازی را فراهم می‌کند که برای پشتیبانی نگارش توسط CLR ضروری هستند. این اطلاعات مشابه برای تأمین بررسی‌های جامعیت به کار می‌رود.
نام مشترک درابتدا در اسمبلی اصلی ایجاد می‌شود، سپس مرجعی به نام اسمبلی اصلی بعنوان نشانه‌ای از نگارش در فوق داده اسمبلی ارجاع شده ذخیره می‌شود و بالاخره از طریق CLR اصلاح می‌گردد. هر اسمبلی درهنگام ایجاد دارای مشخصه‌های زیر می‌باشند.
حاوی کدی است که زمان اجرا آن را اجرا می‌کند که: PE MSIL بدون وجود در فهرست اقلام اجرا نمی‌گردد. به عبارت دیگر، اگر فایل بطور صحیح فرمت نشده باشد، اجرا نخواهد شد.
▪ تنها یک نقطه ورودی: هر اسمبلی نمی‌تواند بیش از یک نقطه شروع برای ایجاد اجرا توسط زمان اجرا داشته باشد. مثلاً نمی‌توانید از WinMain و Main باهم استفاده کنید.
▪ واحدی از اجرای پهلو به پهلو: هر اسمبلی واحد اصلی موردنیاز برای اجرای پهلو به پهلو را فراهم می‌کند.
▪ محدوده نوع: هر نوع که دریک اسمبلی معرفی می‌شود، به عنوان نوع اصلی تشخیص داده می‌شود و نه به عنوان یک نوع منحصر‌به‌فرد که در حافظه مقداردهی شده است.
محدودة امنیتی اسمبلی درخواستهای مجوز را ارزیابی می‌کند.
▪ واحد توسعة اصلی: هر برنامه از اسمبلی‌هایی تشکیل می‌شود که تنها به اسمبلی‌هایی نیاز دارد که از توابع هسته‌ای آن تشکیل شده‌اند. هر اسمبلی دیگری که موردنیاز باشد، می‌تواند طبق تقاضا فراهم گردد که باعث می‌شود تا برنامه‌ها چندین فایل راه‌‌انداز مرتبط با فایل‌های زمان اجرای VB ۶.۰ نداشته باشند.
▪ محدوده برد مرجع: اقلام اصلی در اسمبلی نشان می‌دهند که به منظور تعیین انواع و منابع چه اتفاقی افتاده و یا نیفتاده است. همچنین وابستگی اسمبلی را محاسبه می‌کنند.
▪ محدوده نگارش: کوچکترین واحد قابل نگارش در CLR می‌شود ، تمام انواع و منابعی که دارای نگارش هستند، به عنوان یک واحد درنظر گرفته می‌شوند. اقلام اصلی هر وابستگی نگارشی را بیان می‌کنند.
منبع : جنوبی‌ها