حسین منصوری
حسین منصوری
خواندن ۶ دقیقه·۵ سال پیش

نقشه راه توسعه NET. تا سال 2023

در ماه می سال جاری میلادی مایکروسافت نقشه‌ی توسعه NET. رو تا سال 2023 منتشر کرد و این نقشه نه فقط مربوط به NET Core. بلکه همه‌ی خانواده‌ی NET. هست. این بروزرسانی علاوه بر ویندوز خانواده‌ی بزرگی از بسترهای متنوع و متفاوتی مثل لینوکس، سیستم‌عامل مک، IOS، اندروید، سیستم‌عامل‌های تلویزیون، سیستم‌عامل ساعت اپل، Web Assembly، ابزارهای متنوع IoT، و کلی بستر متفاوت دیگه رو شامل میشه. بیایید با هم نقشه‌ی راه مایکروسافت رو برای توسعه‌ی NET. بررسی کنیم.

.NET 5 Architecture
.NET 5 Architecture

از ابتدای راه NET Core. تا حالا بیشتر از 50 هزارتا API به این فریمورک افزوده شده. توی نسخه آخر NET. Core 3 علاوه بر بهبود ویژگی‌های مختلف فریمورک امکان نوشتن برنامه Desktop هم به NET Core. اضافه شده تا gap بین NET Core. و NET Framework. کمتر بشه.

.NET 5 = .NET Core vNext

علاوه بر ویندوز که از شماره‌ی 8 به شماره ی 10 رسید و همچنین شرکت اپل هم شماره‌ی 9 رو توی نام‌گذاری گوشیهاش فراموش کرد، مایکروسافت هم نام‌گذاری NET Core 4. رو قلم انداخته و نسخه‌ی بعدی رو با نام NET 5. عرضه میکنه. دلیل این نام‌گذاری هم اینه که با خانواده‌ی NET Framework 4.x. تفاوت نام‌گذاری داشته باشه و باهاش اشتباه گرفته نشه. همچنین کلمه‌ی Core هم از NET Core. حذف میشه و ما از این به بعد تنها از کلمه NET. برای نام بردن از این فریمورک استفاده می‌کنیم. زمان عرضه‌ی این نسخه هم نوامبر 2020 در نظر گرفته شده و اولین Preview این نسخه هم در نیمه‌ی اول سال آینده‌ی میلادی عرضه میشه.

زمانبندی ارائه نسخه‌های آینده دات نت
زمانبندی ارائه نسخه‌های آینده دات نت

اهداف اصلی این بروزرسانی NET. شامل موارد زیر است:

  • تولید یک نسخه‌ی واحد از فریمورک و runtime دات نت که همه جا قابل اجرا باشه و رفتارش در زمان اجرا و تجربه‌ی برنامه‌نویسی یکسانی داشته باشه.
  • توسعه قابلیت‌ها .NET با استفاده از گرفتن بهترین قابلیتهای NET Core.، دات نت فریمورک، Xamarin، و پروژه‌ی Mono.
  • ساخت یک محصول با تنها یک code base که توسعه دهنده‌ها (اعم از توسعه دهنده‌های خود مایکروسافت و توسعه‌های آزاد) بتونند توسعه‌اش بدن و تمام سناریوها رو به صورت یکپارچه پیش ببرند.

بهبود عملکرد در زمان اجرا

از همون ابتدای دات نت امکان Cross Platform کردن اون وجود داشت. اولین و مهمترین پروژه چندسکویی دات نت فریمورک هم با نام Mono شناخته میشد. تاریخ اولین Release این پروژه مربوط به چهارده سال پیش میشه! در نهایت هم توسط خود مایکروسافت بهبود پیدا کرد و به عنوان بخشی از زامارین برای تولید اپ‌های اندروید و IOS استفاده میشه. اما یکی از دلایلی که سالهای زیادی مونو مهجور موند این بود که برنامه‌نویسهای دیگه‌ای به جز برنامه‌نویس‌های اصلی دات نت مشغول Portکردن کدهای دات نت به بسترهای مختلف بودند و همیشه اگر کسی نیاز داشت که از تمام امکانات دات نت فریمورک استفاده کنه محدود به استفاده ازش در محیط ویندوز بود.

همون طور که مطلع هستید با اومدن NET Core. این موضوع تغییر پیدا کرد. NET Core. برای اجرای دستوراتش از CoreCLR استفاده میکنه. با استفاده از CoreCLR برنامه‌نویسان دات نت فریمورک تونستند که کدهاشون رو علاوه بر ویندوز روی بسترهای دیگه مثل لینوکس و سیستم‌عامل مک هم اجرا کنند.

در ادامه توسعه‌ی دات نت مایکروسافت قصد که ویژگی‌های خوب Mono و CoreCLR رو با هم ترکیب کنه و این امکان رو برای برنامه‌نویس‌های فراهم کنه که بنا مقتضیات کارشون امکان کامپایل متفاوت برای کدهاشون رو داشته باشند. هر کدوم از نوع کامپایل کردن کدها ویژگیهای مختلفی دارند و اهداف متفاوتی رو دنبال میککند. در ادامه این دو نوع کامپایل کردن رو با هم بررسی و مقایسه میکنیم.

بهره‌وری و توان عملیاتی بالاتر

از ابتدای شروع دانت نت کدهایی که توسعه میدادیم به یک زبان میانی (Intermediate Language (IL) code) تبدیل میشدند. بعد نوبت به کامپایلر زمان اجرا Just In Time Compiler یا JIT میرسد در موقع اجرای نرم‌افزار که کد زبانی میانی رو به کد ماشین تبدیل کنه. این کامپایلرها همچنین با توجه به CPU و سخت‌افزار سیستم بهینه‌سازی‌های مورد نظر رو توی خروجی کدها اعمال میکنند تا اونها بالاترین بهره‌وری رو هنگام اجرا داشته باشند. به طور خلاصه در هنگام شروع اجرای نرم‌افزار ما یک هزینه اضافی برای تولید کدهای ماشین توسط کامپایلر زمان اجرا رو متقبل میشیم اما بعد از تبدیل اولیه، ما کدی رو داریم که با توجه به ماشینی مورد استفاده‌مون بهینه شده و بالاترین کارایی ممکن رو داره. این ویژگی موجب میشه که کدهای برای اجرای طولانی مدت روی ابر یا روی سرورهای بهینه و کارا باشند. یکی از دلایل کارایی بالای ASP.NET Core هم استفاده از کامپایلر زمان اجرا هست. در آینده‌ی دانت هم این کامپایلر نقش مهمی رو توی بالا بردن عملکرد سیستم ایفا میکنه.

JIT Compiler
JIT Compiler

راه اندازی سریع، رد پای کم و استفاده کمتر از حافظه

توی پاراگراف قبلی از مزایای کامپایلرهای زمان اجرا صحبت کردیم. در آینده دات نت هم این کامپایلر نقش مهمی رو ایفا میکنه. اما در اکو سیستم دات نت دو استثناء هم وجود داره که در اون ها به جای استفاده از JIT از (AOT (ahead-of-time یا کامپایل مقدماتی یا جلوتر از زمان استفاده شده. این دو استثناء شامل خروجی پروژه‌ی مونو برای IOS و همچنین پروژه Blazor هست.

پروژه Mono توی چند سال اخیر بر روی موبایل و کنسول‌های بازی متمرکز بوده. به خاطر همین موضوع تیم توسعه‌ی Mono برای حفظ کارایی و داشتن عملکرد مناسب کار تبدیل کدها رو به زبان ماشین با استفاده از کامپایلر AOT انجام میده. در این نوع کامپایل کردن تمامی کدها در همون ابتدای کار به زبان ماشین ترجمه میشن. به همین دلیل در اجرای اولیه کد این کدهای سریع‌تر اجرا میشن و کاربر هزینه تبدیل این کدها رو به زبان ماشین در ابتدای اجرا کار پرداخت نمیکنه.

کامپایلر AOT پروژه Mono مبتنی کامپایلر LLVM هست. شاید در مورد این کامپایلر کم شنیده باشید اما چند سال اخیر و آینده دنیای برنامه رو تا دهه‌ی آینده احتمالا کامپایلرهای مبتنی بر LLVM شکل خواهند داد. به طور مثال کامپایلر زبان Swift شرکت اپل هم مبتنی بر LLVM توسعه داده شده. توی این مطلب قرار نیست در مورد این کامپایلر صحبت کنیم اما خوب بود که بدونیم قدرت کامپایلر پروژه‌ی Mono از کجا نشات گرفته.

در توسعه‌ی دات نت به دو صورت از کامپایلرهای AOT استفاده میشه:

  • برنامه به صورت کامل و صد درصد با این کامپایلر کامپایل بشه.
  • برخی از اجزای ثابت پروژه با AOT کامپایل بشه و مابقی بخش‌های پروژه که چندان با این کامپایلر سازگار نیست مثل Generic ها از کامپایلر JIT استتفاده بشه.

در حال حاضر از کامپایلر AOT برای پروژه‌های IOS و کنسولهای بازی در دات نت استفاده میشه اما برای آینده هر جا به سرعت بالاتر و سربار کمتر زمان اولین اجرا نیاز باشه، قرار هست که امکان استفاده از AOT فراهم بشه.

AOT Compiler
AOT Compiler

در نهایت

هر دو نوع کامپایل در دات نت مزایا و معایب خاص خودشون رو دارند و این طوری که یک نوع کامپایل برتری کاملی بر نوع کامپایل دیگه داشته بانشد. تیم توسعه دات نت در حال نزدیک کردن این دو نوع کامپایل کردن به هم هست. به خاطر همین موضوع کارهای زیر رو انجام دادند.

  • الان میشه از MonoVM به عنوان یکی از کتابخونه‌های CoreFx استفاده کرد
  • تمام تست‌های CoreFx الان بر روی MonoVM اجرا میشه
  • امکان اجرای کدهای ASP.NET Core بر روی MonoVM فراهم شده
  • امکان توسعه Mono بر روی Mac مبتنی بر CoreCLR فراهم شده

در نهایت پروژه‌ی NET 5. یک گام مهم در آینده دات نت هست و چراغ راهی برای توسعه‌های سال‌های آینده این فریمورک محبوبه.

منبع با دخل و تصرف +






netnet5معماری‌دات‌نت
طراح، تحلیل‌گر، برنامه‌نویس بک اند و مدیر دیتابیس. علاقمند به فیلم و سریال، اهل پادکست و سفر، طرفدار زندگی و عاشق گفتگو :)
شاید از این پست‌ها خوشتان بیاید