داتنت چیست و چه نسخههایی دارد؟

احتمالا شما هم در مقطعی از یک کامپیوتر مجهز به سیستمعامل مایکروسافت ویندوز استفاده کردهاید. در این صورت، بهاحتمال زیاد هنگام نصب بعضی از نرمافزارها با پیامی روبهرو شدهاید که اعلام میکند برای اجرای برنامه موردنظر، به Microsoft .NET نیاز دارید؛ عبارتی که داتنت تلفظ میشود. اما داتنت دقیقا چیست؟ آیا واقعا به آن نیاز دارید؟ در این مطلب از مجله دانشکار به پرسشهای شما پاسخ میدهیم.
تاریخچه داتنت
پیش از آنکه به تاریخچه داتنت بپردازیم، بهتر است ابتدا به پرسش اصلی مقاله پاسخ دهیم: داتنت چیست؟
امروزه داتنت بهنوعی یک اصطلاح جامع محسوب میشود که بخشهای مختلفی را در بر میگیرد. یکی از این بخشها محیط اجرای داتنت یا CLR است که وظیفه اجرای برنامههای داتنت را بر عهده دارد. بخش دیگر، فریمورک داتنت است؛ مجموعهای استاندارد از توابع و انواع داده که به توسعهدهندگان اجازه میدهد با منابع و امکانات مختلف سیستم تعامل داشته باشند. از جمله این منابع میتوان به شبکه، پورتها، سیستم فایل، حافظه، سرویسهای سیستمعامل و بسیاری موارد دیگر اشاره کرد.
اگر به کار با فریمورک داتنت علاقه دارید شرکت در بوتکمپ ASP.NET دانشکار را به شما پیشنهاد میدهیم.

نسخه ۱.۰ داتنت
نخستین نسخه رسمی داتنت در آوریل ۲۰۰۲ توسط مایکروسافت منتشر شد. این نسخه امکان توسعه برنامههای سمت سرور با ASP.NET را فراهم کرد و قرار بود جایگزین ASP کلاسیک شود.
ASP کلاسیک یک فریمورک اسکریپتنویسی بود که برای اجرای VBScript، زبانی برگرفته از Visual Basic، استفاده میشد. در مقابل، ASP.NET از اسمبلیهای کامپایلشدهای بهره میبرد که با زبانهایی مانند سیشارپ و Visual Basic .NET نوشته میشدند. البته بعدها پسوند NET. از نام Visual Basic حذف شد؛ تغییری که قرار بود از سردرگمی جلوگیری کند، اما از طرفی خود باعث ابهامهای تازهای شد.
نسخه ۲.۰ داتنت
دومین نسخه اصلی داتنت در فوریه ۲۰۰۶ منتشر شد. از مهمترین تغییرات این نسخه میتوان به پشتیبانی از پردازش ۶۴ بیتی، معرفی .NET Micro Framework، عرضه CLR 2.0 و امکانات دیگر اشاره کرد. یکی از تغییرات مهم در CLR، اضافه شدن قابلیت Generics بود. این قابلیت با حذف تکرارهای غیرضروری، به توسعهدهندگان اجازه میدهد کدهای کوتاهتر، منظمتر و قابلاستفادهتری بنویسند.
نسخه ۳.۰ داتنت
نسخه ۳.۰ داتنت در نوامبر ۲۰۰۶، یعنی همان سال انتشار نسخه ۲.۰، عرضه شد. این نسخه یک مدل برنامهنویسی جدید به نام WPF یا Windows Presentation Foundation را برای توسعه برنامههای دسکتاپ ویندوز معرفی کرد. همچنین WCF یا Windows Communication Foundation بهعنوان بستری برای برقراری ارتباط میان برنامهها و اجرای فراخوانیهای راه دور ارائه شد.
علاوهبر این، فناوریهای WF و CardSpace نیز به داتنت اضافه شدند. WF یا Windows Workflow Foundation فریمورکی برای طراحی و پیادهسازی گردشکارهای مرتبط با منطق کسبوکار بود که امکان استفاده از یک محیط طراحی بصری را نیز فراهم میکرد. CardSpace نیز یک سیستم مدیریت هویت بود که توسعه آن بعدها متوقف شد.
نسخه ۳.۵ داتنت
اگرچه از نسخه ۱.۱ داتنت و تعدادی از بهروزرسانیهای Service Pack عبور کردیم، نسخه ۳.۵ که در نوامبر ۲۰۰۷ منتشر شد، یکی از پرکاربردترین قابلیتهای داتنت تا به امروز را معرفی کرد: LINQ یا Language Integrated Query.
LINQ سازوکاری برای جستوجو، فیلتر و مدیریت مجموعههای داده است. این دادهها میتوانند در حافظه برنامه قرار داشته باشند یا با استفاده از ارائهدهندگان مختلف Query، از منابعی مانند پایگاههای داده SQL دریافت شوند. LINQ تا حد زیادی به قابلیت جدید دیگری به نام درختهای عبارت متکی بود. این قابلیت امکان پیمایش، بررسی و ساخت منطق پرسوجوها را هنگام اجرای برنامه فراهم میکند.

نسخه ۴ داتنت
مایکروسافت نسخه ۴ داتنت را در مارس ۲۰۱۰ منتشر کرد. همراه این نسخه، CLR نیز مستقیم از نسخه ۲ به نسخه ۴ ارتقا پیدا کرد؛ چون همه میدانند که افراد مستقر در ردموند بهترین مهارت را در شمارهگذاری نسخهها دارند.
از قابلیتهای مهم این نسخه میتوان به Dynamic Binding اشاره کرد؛ قابلیتی جدید در CLR که در کدهای واقعی و محیطهای عملیاتی چندان رایج نیست، اما امکان تعیین و مدیریت نوع یک متغیر را هنگام اجرای برنامه فراهم میکند. طرفداران جدی سیستم نوعدهی قوی و ایستا، توصیه میکنند از این قابلیت استفاده نکنید؛ مگر اینکه دلیل بسیار موجهی برای آن داشته باشید. قابلیت تازه دیگر، Task Parallel Library بود که با ارائه یک API ساده، مدل جدیدی از برنامهنویسی همزمان و غیرهمزمان را در اختیار توسعهدهندگان داتنت قرار میداد. این قابلیت در زمان معرفی جذاب بود، اما بعدها با ظهور قابلیت دیگری، میزان جذابیت آن چندین برابر شد؛ قابلیتی به نام داتنت ۴.۵.
نسخه ۴.۵ داتنت
نسخه ۴.۵ داتنت در اکتبر ۲۰۱۲ منتشر شد و قابلیتهای جذابی را به همراه آورد. یکی از مهمترین آنها، عرضه C# 5 و اضافه شدن کلمات کلیدی async و await بود که استفاده از وظایف غیرهمزمان معرفیشده در نسخه قبلی را بسیار سادهتر کرد. این نسخه شامل بهبودهای کلی در عملکرد هم بود.
در این مقطع مشخص شد که کار کردن با کدهای کامپایلر قدیمی دشوارتر شده است؛ زیرا در مقایسه با نسخههای قبلی که چهار یا پنج قابلیت جدید به زبان اضافه میکردند، این بار تنها دو ویژگی جدید به سیشارپ راه یافت. این وضعیت قرار بود با انتشار نسخه بزرگ بعدی داتنت تغییر کند.
نسخههای ۴.۵.۱ و ۴.۵.۲ داتنت
در سال ۲۰۱۴، دو بهروزرسانی جزئی برای داتنت منتشر شد که امکانات بهتری را برای اشکالزدایی در اختیار توسعهدهندگان قرار دادند. این نسخهها همچنین پشتیبانی از نمایشگرهای با تراکم پیکسلی بالا یا High DPI را در WPF و Windows Forms بهبود بخشیدند.
داتنت ۲۰۱۵ چیست؟
در مستندات رسمی، از این نسخه با عنوان .NET 2015 یاد شده است. داتنت ۲۰۱۵ از دو بخش .NET Framework 4.6 و .NET Core 1.0 تشکیل میشد. داتنت کور، نسخهای جدید از داتنت بود که توسط مایکروسافت توسعه یافت و قابلیت اجرا روی ویندوز، لینوکس و مک را داشت. ایده اصلی آن، ایجاد فریمورکی بود که از نصب و اجرای همزمان چند نسخه در کنار یکدیگر و همچنین استقرار همراه با برنامه پشتیبانی کند.
این رویکرد انعطافپذیری بیشتری ایجاد میکرد و امکان انتشار بهروزرسانیهای مکرر را فراهم میساخت. دیگر لازم نبود نسخه داتنت نصبشده روی کل سیستم را بهروزرسانی کنید و امیدوار باشید که هیچچیز از کار نیفتد. در عوض، میتوانستید یک برنامه را با یک نسخه مشخص توسعه دهید و برنامهای دیگر را با نسخهای جدیدتر بسازید تا از قابلیتها و بهبودهای تازه استفاده کند، بدون اینکه میان آنها تداخلی به وجود آید.
یکی دیگر از فناوریهای جدید این دوره RyuJIT بود؛ یک کامپایلر JIT جدید که بهطور کامل از معماری ۶۴ بیتی پشتیبانی میکرد. در زمینه کامپایلرها، Roslyn نیز بهعنوان پلتفرم جدید کامپایلر داتنت بهصورت رسمی منتشر شد. Roslyn مجموعهای از APIها را ارائه میکرد که امکان توسعه ابزارهایی با نام Roslyn Analyzer را فراهم میساخت. این ابزارها بستههایی هستند که میتوانند تحلیل ایستای کد را فراتر از قابلیتهای پیشفرض داتنت انجام دهند.
یکی از نمونههای این تحلیلگرهای سفارشی، CLR Heap Allocation Analyzer است. این ابزار پیشنهادهایی ارائه میدهد که به کاهش تعداد تخصیصهای حافظه، بهویژه تخصیصهای ضمنی در کد، کمک میکنند. تمام اجزای مرتبط با .NET Core رایگان و متنباز بودند.
داتنت امروز چیست؟
اگر به اوایل سال ۲۰۱۹ برگردیم، با .NET Framework 4.7.2 و .NET Core 2.2 روبهرو هستیم؛ درحالیکه نسخه 3.0 نیز بهصورت پیشنمایش عمومی در دسترس قرار گرفته بود.
در این مدت، فناوریهای Windows Forms، Windows Presentation Foundation (WPF) و XAML متنباز شدند؛ هرچند متأسفانه دو مورد اول همچنان چندپلتفرمی نیستند.
امروزه این امکان وجود دارد که برنامههای .NET را با استفاده از Mono و WebAssembly مستقیماً در مرورگر اجرا کنید. همچنین، تا زمانی که یک بسته NuGet از APIهای تعریفشده در .NET Standard استفاده کند (یعنی به قابلیتهای اختصاصی یک پلتفرم وابسته نباشد و تنها از هسته مشترک .NET بهره ببرد)، میتوان بیشتر بستههای NuGet را، صرفنظر از فریمورک هدف آنها، در برنامه خود به کار گرفت.
از سوی دیگر، C# 7.3 (و نسخه ۸ که در آن زمان در مرحله پیشنمایش بود) با معرفی قابلیتها و نگارش جدید، تجربه توسعه را بهبود بخشید. علاوه بر این، توسعهدهندگان میتوانند با استفاده از APIهای Span برای دسترسی مستقیم به حافظه و Pipelines برای انجام عملیات ورودی/خروجی (I/O) با سرعت بالا، برنامههایی با عملکرد بسیار بهینه بنویسند. .NET از نخستین نسخههای خود تاکنون مسیر طولانی و پرفرازونشیبی را طی کرده است و به نظر میرسد این مسیر همچنان با قدرت ادامه خواهد داشت.
مونو، کور، استاندارد یا فریمورک؟
شاید از خودتان بپرسید:« این همه اسم مخفف چیست؟» حق دارید. این نامها در نگاه اول ممکن است کمی گیجکننده به نظر برسند، اما هرکدام نقش مشخصی در اکوسیستم و رودمپ داتنت دارند. در ادامه، بهطور خلاصه با اجزای اصلی دنیای .NET آشنا میشویم.
.NET Framework
نسخه اصلی و اولیه، یعنی Microsoft .NET Framework، مجموعهای از کتابخانهها و ابزارها است که میتوانید از آن برای ایجاد و اجرای یک برنامه استفاده کنید. این فریمورک روی Windows اجرا میشود، Framework Class Library مخصوص به خود را دارد و برای اجرای واقعی کدها از CLR استفاده میکند. اجزای آن نیز بهترتیب امکان توسعه برنامههای تحت وب (سمت سرور) و دسکتاپ را با استفاده از ASP.NET و WPF/WinForms فراهم میکنند.

.NET Core
.NET Core، برادر کوچکتر .NET Framework، تقریبا همان قابلیتها را ارائه میدهد، با این تفاوت که علاوهبر ویندوز، روی سیستم مک و لینوکس هم اجرا میشود. این فریمورک همچنین از معماری ARM پشتیبانی میکند و به همین دلیل گزینهای مناسب برای توسعه برنامههای اینترنت اشیا (IoT) به شمار میرود؛ بهویژه در نسخه 3.0 که APIهایی برای کار با پایههای GPIO ارائه میدهد.
کتابخانه کلاس پایه در .NET Core با نام CoreFX شناخته میشود و محیط اجرای آن CoreCLR است. با استفاده از .NET Core میتوانید برنامههای دسکتاپ ویندوز (از نسخه 3.0 به بعد با WPF یا WinForms، هرچند این دو همچنان چندسکویی نیستند)، برنامههای تحت وب (سمت سرور) با استفاده از ASP.NET Core و همچنین، با در نظر گرفتن پروژههای توسعهیافته توسط جامعه متنباز، برنامههای دسکتاپ چندسکویی با استفاده از AvaloniaUI ایجاد کنید.
.NET Core یک فریمورک است که با سرعت زیادی توسعه پیدا میکند و از استقرار همزمان چند نسخه (Side-by-Side Deployment) پشتیبانی میکند؛ بنابراین در صورت نیاز میتوانید چند نسخه مختلف از آن را روی یک سیستم اجرا کنید. همچنین این امکان را فراهم میکند که خود فریمورک را همراه با برنامه بستهبندی (Bundle) کنید؛ در نتیجه، دیگر نیازی به نصب هیچ وابستگی یا پیشنیازی روی سیستم مقصد نخواهد بود.
Mono و Xamarin
Mono تقریبا همان کاری را انجام میدهد که .NET Core و .NET Framework انجام میدهند، با این تفاوت که تمرکز اصلی آن بر قابلیت حمل (Portability) و اجرای برنامهها روی پلتفرمهای مختلف است.
Mono در ابتدا بهعنوان یک پیادهسازی از .NET برای اجرای برنامهها روی لینوکس توسعه داده شد، اما بهمرور زمان محبوبیت زیادی پیدا کرد. امروزه میتوانید با استفاده از Xamarin، برنامههای موبایل چندسکویی توسعه دهید و همچنین با کمک MonoGame بازی بسازید.
قابلیت حمل Mono در توسعه بازیها بیش از هر جای دیگری خود را نشان میدهد؛ بهطوریکه میتوانید بازی مبتنی بر Mono را روی سیستمعاملها و پلتفرمهای مختلفی از جمله Windows، مک، لینوکسPlayStation 4، PlayStation Vita، Xbox One، Xbox 360، اندروید و iOS اجرا کنید.
.NET Standard
این یکی دیگر از مفاهیم دنیای .NET است که معمولاً افراد را گیج میکند، در حالی که در واقع مفهوم بسیار سادهای دارد.
.NET Standard چیزی جز یک قرارداد (Contract) نیست که مجموعهای از APIها را تعریف میکند. اگر یک پلتفرم یا فریمورک بخواهد با نسخه مشخصی از .NET Standard سازگار (Compliant) باشد، باید تمام APIهای تعریفشده در آن نسخه را پیادهسازی کند.
برای مثال، اگر یک Class Library را بر پایه .NET Standard 1.4 ایجاد کنید، این کتابخانه تضمین میکند که روی هر فریمورکی که از .NET Standard 1.4 یا نسخههای بالاتر آن پشتیبانی میکند، اجرا خواهد شد؛ فرقی نمیکند آن فریمورک Mono، .NET Core، .NET Framework، UWP یا هر پلتفرم دیگری باشد. دلیل این موضوع این است که تمام APIهایی که ممکن است در کتابخانه خود استفاده کرده باشید، طبق قرارداد .NET Standard در آن فریمورک وجود دارند.
ممکن است بپرسید: «مگر قبلا چیزی شبیه به این نداشتیم؟ یعنی Portable Class Library (PCL)؟»
پاسخ بله است، اما PCL بر اساس سازوکار متفاوتی عمل میکرد. مجموعه APIهای قابل استفاده در Portable Class Library برابر با اشتراک (Intersection) APIهای تمام پلتفرمهای هدف بود، نه یک قرارداد نسخهبندیشده. علاوه بر این، PCLها به پلتفرمهای مایکروسافت وابستگی زیادی داشتند، در حالی که .NET Standard مستقل از پلتفرم (Platform-agnostic) است و به سیستمعامل یا فریمورک خاصی محدود نمیشود.

زبانهای برنامهنویسی داتنت
IL زبان مشترک پلتفرم .NET است، اما هیچ برنامهنویس عاقلی کدهای یک پروژه واقعی را مستقیم با IL نمینویسد. بهجای آن، مجموعه متنوعی از زبانهای برنامهنویسی سطح بالا برای توسعه در .NET وجود دارد که در ادامه با مهمترین آنها آشنا میشویم.
زبان C
سیشارپ یک زبان برنامهنویسی همهمنظوره، شیءگرا، دارای نوعدهی قوی و نوعدهی ایستا است که از جنریکها و همچنین برخی مفاهیم برنامهنویسی تابعی هم پشتیبانی میکند. این زبان به خانواده زبانهای مشابه سی تعلق دارد و در طراحی آن از چندین زبان مدرن دیگر، از جمله F#، پایتون و جاوا الهام گرفته شده است.
زبان F
افشارپ یک زبان برنامهنویسی است که برنامهنویسی تابعی را در اولویت قرار میدهد، اما در عین حال از برنامهنویسی شیءگرا هم پشتیبانی میکند. این زبان نوعدهی قوی، نوعدهی ایستا، استنتاج نوع دقیق و نگارشی مختصر، قدرتمند و خوانا دارد.
در طراحی افشارپ از زبانهایی مانند سیشارپ، Haskell، Scala و پایتون الهام گرفته شده است. اگرچه محبوبیت آن به اندازه سیشارپ نیست، اما جایگاه ویژهای در محاسبات علمی پیدا کرده است و جالب اینکه در توسعه وب نیز، با استفاده از Fable، بهعنوان یکی از جایگزینهای جاوااسکریپت مورد استفاده قرار میگیرد.
VB.NET
Visual Basic .NET (VB.NET) از نظر پارادایمهای برنامهنویسی شباهت زیادی به سیشارپ دارد، اما خلاف آن بر پایه زبان Visual Basic طراحی شده است، نه زبان سی؛ به همین دلیل، تفاوت اصلی این دو زبان در سینتکس آنهاست و بهراحتی میتوان آنها را از روی ساختار کد تشخیص داد.
تا چندی پیش، VB.NET تقریباً تمام قابلیتهای سیشارپ را داشت، اما با سرعت بالای توسعه سیشارپ، این زبان بهتدریج از آن عقب ماند. علاوهبر این، VB.NET بهطور کامل توسط .NET Core پشتیبانی نمیشود؛ موضوعی که این تصور را ایجاد میکند که دوران اوج این زبان تا حد زیادی به پایان رسیده است.
با وجود این، VB.NET همچنان انتخاب محبوب بسیاری از توسعهدهندگان است، چرا که فلسفه اصلی Visual Basic، یعنی زبانی باشد که هر کسی بتواند آن را یاد بگیرد و از آن استفاده کند، هنوز هم پابرجاست. البته به نظر میرسد این زبان روزبهروز کمتر مورد توجه قرار میگیرد و باید دید آینده آن به چه سمتی خواهد رفت.
منبع: boldare.com

