Linker: ابزار جدید مایکروسافت برای فشرده‌سازی اپلیکیشن‌های Net.

Linker: ابزار جدید مایکروسافت برای فشرده‌سازی اپلیکیشن‌های Net.

ابزار جدید مایکروسافت تحت عنوان Net IL Linker. که در حال حاضر مراحل آزمایشی را می‌گذراند، با حذف لایبرری‌ها و وابستگی‌های زائد، فضای اشغال شده توسط اپلیکیشن‌های دات‌نت را کاهش می‌دهد.

ابزاری که کاربران Net. مدت‌ها انتظارش را می‌کشیدند و تاکنون از آن محروم بودند، سرانجام از راه رسید؛ مایکروسافت با همکاری گروه Mono، لینکری ارائه کرده‌اند که کار آن در اصل پالایش کردن اپلیکیشن‌های دات‌نت است. به این ترتیب، تنها آن بخش‌هایی از لایبرری‌ها در کالبد برنامه‌های دات‌نت باقی می‌مانند که واقعاً حین اجرای برنامه به کار می‌روند.

قابلیت مذکور که IL Linker نام دارد، برای نیل به هدف خود، اپلیکیشن‌های دات‌نت را تحلیل کرده و لایبرری‌هایی که هرگز توسط اپلیکیشن فراخوانی نشده‌اند را شناسایی می‌کند.

مایکروسافت هنگام معرفی این پروژه در گیت‌هاب، استفاده از آی‌ال لینکر را روشی مؤثر برای تحلیل کدهای مرده (Dead Code) در اپلیکیشن‌ها قلمداد کرد. در دنیای برنامه‌نویسی، کد مرده بخشی از سورس‌کد برنامه است که گرچه اجرا می‌شود، اما نتیجهٔ آن در هیچ‌یک از دیگر مراحل رایانش مورد استفاده قرار نمی‌گیرد و به همین جهت جز هدر دادن زمان و حافظه، حاصل دیگری ندارد! در عین حال، حذف این کدها دقت زیادی می‌طلبد زیرا زدودن بی‌مهابای آن‌ها ممکن است به بروز باگ در برنامه بیانجامد.

هدف مایکروسافت این است که در بلندمدت، آی‌ال لینکر را به لینکر اصلی اکوسیستم دات‌نت تبدیل کند و در حال حاضر آنچه ارائه شده، نسخهٔ پیش‌نمایش آی‌ال لینکر است که تنها طیف محدودی از اپلیکیشن‌های دات‌نت را پشتیبانی می‌کند. به‌عبارت دقیق‌تر، فعلاً فقط اپلیکیشن‌های به‌اصطلاح Self-contained و آن‌هایی که از Net Core. بهره می‌برند با آی‌ال لینکر سازگار هستند.

میزان کاهش حجم اپلیکیشن‌ها در نتیجهٔ استفاده از آی‌ال لینکر در شرایط مختلف، بسیار متفاوت است اما طبق گفتهٔ مایکروسافت، استفاده از آن در موارد جزئی می‌تواند حجم اپلیکیشن را تا 50٪ کاهش دهد.

پالایش یا به عبارتی هرس کردن اپلیکیشن‌های دات‌نت به علت ویژگی‌های دینامیک این پلتفرم، از دیرباز کار دشواری بود اما آی‌ال لینکر جستجو در سورس‌کد اپلیکیشن را از هر نوع Assembly یا Dependency آغاز می‌کند که صریحاً در اپلیکیشن قید شده است و سپس هر چیزی را که بلااستفاده یا بیهوده تشخیص دهد، نشانه‌گذاری می‌کند (یادآوری می‌شود منظور از دات‌نت اسمبلی، قطعه کدی است که از پیش کامپایل شده است و می‌تواند برای اهداف مختلفی همچون راه‌اندازی، امنیت و ... به کار ‌رود. وابستگی نیز به میزان وابستگی یک ماژول از برنامه به دیگر ماژول‌ها اشاره دارد).

در حال حاضر، الگوریتم‌هایی که برای شناسایی و حذف کدهای زائد به کار می‌روند عملکرد بسیار محتاطانه‌ای دارند، اما آی‌ال لینکر می‌تواند کدهایی را که حین اجرا به‌صورت دینامیک ایمپورت می‌شوند، نشانه‌گذاری کرده و در نتیجه حذف نماید.

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

بخشی از عملکرد آی‌ال لینکر وام‌دار پروژهٔ قدیمی‌تری موسوم به Cecil است که دولوپرهای دات‌نت از سال 2004 برای بررسی و تصحیح اپلیکیشن‌ها و لایبرری‌های دات‌نت از آن استفاده می‌کردند. تفاوت عمدهٔ بین IL Linker و Cecil در این است که Cecil در اصل برای بررسی و تصحیح دستی توسط خود دولوپر طراحی شده است و کوچک‌سازی اپلیکیشن، تنها یکی از اهداف آن است اما آی‌ال لینکر را به‌طور خاص برای کاهش حجم اپلیکیشن‌های دات‌نت ساخته‌اند.

منبع


علی حسینی