تاریخچه سی‌شارپ (#C) و دات‌نت (NET.)؛ از پروژه مخفی Cool تا غول متن‌باز دنیای نرم‌افزار

تاریخچه سی‌شارپ (#C) و دات‌نت (NET.)

تاریخچه سی‌شارپ (#C) و دات‌نت (NET.)؛ از پروژه مخفی Cool تا غول متن‌باز دنیای نرم‌افزار

اگر اواخر دهه ۹۰ میلادی به یک برنامه‌نویس می‌گفتید که روزی مایکروسافت یکی از سریع‌ترین، محبوب‌ترین و متن‌بازترین (Open-Source) پلتفرم‌های نرم‌افزاری دنیا را روی لینوکس و مک اجرا خواهد کرد، احتمالاً به شما می‌خندید. داستان تولد و تکامل سی‌شارپ (#C) و دات‌نت (NET.)، صرفاً یک تقویم از شماره نسخه‌ها نیست؛ بلکه روایت یکی از بزرگ‌ترین جنگ‌های تجاری تاریخ تکنولوژی، تصمیم‌های جسورانه مهندسی و پوست‌اندازی غولی است که برای بقا، قواعد بازی خودش را از نو نوشت.

۱. جرقه اولیه؛ وقتی جاوا به مایکروسافت «نه» گفت (دهه ۹۰ میلادی)

برای درک چرایی تولد دات‌نت، باید به سال ۱۹۹۵ برگردیم. در آن زمان، برنامه‌نویسی تحت ویندوز بین دو قطب تقسیم شده بود: یا باید با ++C و کتابخانه‌های پیچیده MFC دست‌وپنجه نرم می‌کردید و نگران مدیریت دستی حافظه (Memory Leak) می‌بودید، یا سراغ Visual Basic 6 می‌رفتید که ساخت رابط کاربری را مثل آب خوردن ساده می‌کرد، اما در پروژه‌های بزرگ سازمانی و معماری‌های شیءگرا کم می‌آورد.

درست در همین خلا، شرکت Sun Microsystems زبان جاوا (Java) را با شعار جذاب «یک‌بار بنویس، همه‌جا اجرا کن» معرفی کرد. مایکروسافت که پتانسیل بالای این مدل جدید را دیده بود، تصمیم گرفت نسخه مخصوص به خودش از جاوا را با نام ++Visual J بسازد و قابلیت‌های اختصاصی ویندوز را به آن تزریق کند.

اما این اقدام به مذاق مدیران سان خوش نیامد. آن‌ها معتقد بودند مایکروسافت با متصل کردن جاوا به هسته ویندوز (Win32 API)، شعار «اجرا در همه‌جا» را نابود کرده است. شکایت حقوقی سنگین سان علیه مایکروسافت در سال ۱۹۹۷ در نهایت منجر به توقف توسعه ++Visual J شد. مایکروسافت در لحظه‌ای تاریخی به این نتیجه رسید: «اگر اجازه نداریم جاوا را تغییر دهیم، پلتفرم و زبان خودمان را می‌سازیم؛ آن هم بسیار بهتر!»

۲. آندرس هجلزبرگ و تولد پروژه Cool

مایکروسافت برای ساخت سلاح جدیدش به یک معمار افسانه‌ای نیاز داشت و چه کسی بهتر از آندرس هجلزبرگ (Anders Hejlsberg)؟ مهندس دانمارکی نابغه‌ای که خالق Turbo Pascal و معمار اصلی Delphi در شرکت بورلند بود و در سال ۱۹۹۶ با پیشنهادی وسوسه‌انگیز به ردموند آمده بود.

در سال ۱۹۹۹، تیم هجلزبرگ کار روی زبان جدیدی را با نام رمز Cool (مخفف C-like Object Oriented Language) آغاز کرد. هم‌زمان، تیم‌های دیگر مایکروسافت مشغول طراحی زیرساختی به نام NGWS (نسل بعدی سرویس‌های ویندوز) بودند که بعدها به NET Framework. تغییر نام داد.

چرا نام Cool به #C تغییر کرد؟ به دلایل حقوقی و ثبت علامت تجاری، مایکروسافت نمی‌توانست از واژه عمومی Cool استفاده کند. نام #C (سی‌شارپ) از نت‌نویسی موسیقی الهام گرفته شد؛ جایی که علامت دیز (♯) به معنای نیم‌پرده بالاتر رفتن نت است. از طرفی، نماد # در واقع از چهار علامت مثبت (++++) کنار هم تشکیل شده که به شوخی نشان‌دهنده گام بعدی پس از C++ بود!

در جولای سال ۲۰۰۰ در کنفرانس توسعه‌دهندگان (PDC)، بیل گیتس و آندرس هجلزبرگ رسماً از پلتفرم NET. و زبان #C پرده‌برداری کردند و سرانجام در فوریه ۲۰۰۲، نسخه ۱.۰ دات‌نت فریم‌ورک به همراه Visual Studio .NET منتشر شد. معماری جدید بر پایه CLR (Common Language Runtime) و کد میانی IL بنا شده بود؛ یعنی فرقی نمی‌کرد با #C کد بزنید یا VB.NET، در نهایت هر دو به یک زبان میانی کامپایل می‌شدند و Garbage Collector وظیفه پاکسازی حافظه را به عهده می‌گرفت.

۳. سال‌های نخست دات‌نت فریم‌ورک؛ از انقلاب Generics تا کابوس ViewState

نسخه اول دات‌نت قدم بزرگی بود، اما بی‌نقص نبود. در کنار Windows Forms که توسعه نرم‌افزارهای دسکتاپ را متحول کرد، مایکروسافت ASP.NET WebForms را برای وب ارائه داد. ایده WebForms این بود که برنامه‌نویسان دسکتاپ بدون درگیر شدن با stateless بودن پروتکل HTTP، با کشیدن و رها کردن (Drag & Drop) دکمه‌ها و رویدادهای کلیک، سایت بسازند. هرچند این کار سرعت تولید را بالا برد، اما حجم سنگین ViewState و چرخه حیات پیچیده صفحات، در سال‌های بعد به یکی از چالش‌های بزرگ توسعه‌دهندگان وب تبدیل شد.

نقطه عطف واقعی در نوامبر ۲۰۰۵ با انتشار .NET Framework 2.0 و C# 2.0 رقم خورد. اضافه شدن Generics (جنریک‌ها) در سطح خودِ ماشین مجازی (CLR)، سی‌شارپ را یک سر و گردن بالاتر از جاوا قرار داد (چرا که جاوا جنریک‌ها را صرفاً با تکنیک Type Erasure در کامپایلر پیاده‌سازی کرده بود). دیگر نیازی به استفاده از ArrayList و عملیات پرهزینه Boxing/Unboxing نبود و List<T> به همراه Nullable Types و کلیدواژه yield شیوه کدنویسی را زیرورو کردند.

۴. عصر طلایی نوآوری؛ وقتی #C جلوتر از زمان حرکت کرد (LINQ و Async)

بین سال‌های ۲۰۰۶ تا ۲۰۱۲، تیم طراحی سی‌شارپ ویژگی‌هایی را معرفی کرد که سال‌ها بعد الهام‌بخش سایر زبان‌های برنامه‌نویسی دنیا شدند:

  • سال ۲۰۰۶ و ۲۰۰۷ (.NET 3.0 و 3.5 به همراه C# 3.0): ابتدا تکنولوژی‌های WPF (با زبان نشانه‌گذاری XAML برای رابط‌های کاربری مدرن دسکتاپ) و WCF معرفی شدند. اما بمب اصلی در C# 3.0 ترکید: معرفی LINQ (Language Integrated Query). ترکیب Lambda Expressions، Extension Methods و Anonymous Types باعث شد کار با داده‌ها، آرایه‌ها و دیتابیس‌ها (از طریق Entity Framework) به شکل بی‌سابقه‌ای خوانا و تابعی (Functional) شود.
  • سال ۲۰۱۰ (.NET 4.0 و C# 4.0): معرفی کلیدواژه dynamic و کتابخانه TPL (Task Parallel Library) که زیربنای پردازش‌های چندنخی و ناهمگام مدرن را چید.
  • سال ۲۰۱۲ (.NET 4.5 و C# 5.0): معرفی الگوی async و await. پیش از این، نوشتن کدهای ناهمگام نیازمند Callbackهای تودرتو و پیچیده بود. سی‌شارپ با تبدیل خودکار متدهای async به ماشین حالت (State Machine) در زمان کامپایل، انقلابی به پا کرد که سال‌ها بعد زبان‌هایی مثل JavaScript، Python و Rust عیناً همان الگو را کپی کردند.

۵. پروژه مونو (Mono) و ورود غیرمنتظره سی‌شارپ به دنیای بازی‌سازی

در حالی که مایکروسافت در دهه ۲۰۰۰ تمام تمرکزش را روی ویندوز گذاشته بود، یک مهندس مکزیکی به نام میگل د ایکازا (Miguel de Icaza) در سال ۲۰۰۱ پروژه‌ای متن‌باز به نام Mono را کلید زد تا دات‌نت را روی لینوکس اجرا کند.

همین پروژه مونو دو اتفاق سرنوشت‌ساز را رقم زد: اول اینکه شرکت Unity Technologies برای موتور بازی‌سازی خود به دنبال یک زبان اسکریپت‌نویسی سریع و ساختاریافته بود و به لطف Mono، زبان #C را انتخاب کرد؛ تصمیمی که سی‌شارپ را به زبان اول بازی‌سازی مستقل و موبایل در جهان تبدیل کرد. دوم اینکه تیم مونو بعدها پروژه Xamarin را ساختند تا بتوان با C# برای اندروید و iOS برنامه نوشت.

۶. زلزله ۲۰۱۴؛ تولد .NET Core و پایان انحصار ویندوز

با رسیدن به اوایل دهه ۲۰۱۰، دات‌نت فریم‌ورک با یک بحران جدی روبرو شد. دنیای نرم‌افزار به سمت سرورهای لینوکسی، کانتینرها (Docker) و معماری میکروسرویس حرکت می‌کرد، اما NET Framework. به شدت به هسته ویندوز و IIS گره خورده بود. کتابخانه عظیم System.Web حافظه زیادی مصرف می‌کرد و آپدیت کردن دات‌نت روی یک سرور، می‌توانست تمام برنامه‌های دیگرِ روی آن سرور را تحت تأثیر قرار دهد.

در سال ۲۰۱۴، با روی کار آمدن ساتیا نادلا به عنوان مدیرعامل مایکروسافت، همه چیز تغییر کرد. مایکروسافت در اقدامی شجاعانه اعلام کرد که دات‌نت را از صفر بازنویسی می‌کند، آن را کاملاً متن‌باز (Open-Source) کرده و به صورت Cross-Platform برای ویندوز، لینوکس و macOS منتشر خواهد کرد.

  • کامپایلر جدید سی‌شارپ با نام Roslyn متن‌باز شد.
  • مایکروسافت شرکت Xamarin را خرید و آن را رایگان کرد.
  • در ژوئن ۲۰۱۶، .NET Core 1.0 و ASP.NET Core رسماً منتشر شدند. وب‌سرور فوق‌سریع Kestrel جایگزین ساختارهای قدیمی شد و در بنچمارک‌های جهانی TechEmpower، دات‌نت کور که زمانی به کندی متهم می‌شد، ناگهان بالاتر از Node.js، Java و Python در کنار سریع‌ترین فریم‌ورک‌های وب جهان ایستاد.

۷. از .NET 5 تا عصر مدرن (.NET 10 و .NET 11)؛ سرعت در مقیاس ابری

وجود هم‌زمان NET Framework، .NET Core. و Xamarin/Mono کمی باعث سردرگمی توسعه‌دهندگان شده بود. به همین دلیل در نوامبر ۲۰۲۰، مایکروسافت با انتشار NET 5. همه این شاخه‌ها را زیر یک چتر واحد جمع کرد (نام Core حذف شد و برای جلوگیری از اشتباه گرفتن با .NET Framework 4.x، شماره ۴ را جا انداختند).

از آن زمان، اکوسیستم دات‌نت با برنامه زمانی دقیق (انتشار یک نسخه اصلی در نوامبر هر سال؛ نسخه‌های زوج با پشتیبانی طولانی‌مدت LTS و نسخه‌های فرد با پشتیبانی استاندارد STS) با سرعتی خیره‌کننده جلو می‌رود:

  • دات‌نت ۶ تا ۹ (۲۰۲۱ تا ۲۰۲۴): معرفی Minimal APIs برای نوشتن سرویس‌های وب با کمترین کد ممکن، بلوغ Blazor برای اجرای C# در مرورگر به کمک WebAssembly، کامپایل مستقیم به کد ماشین با Native AOT (بدون نیاز به JIT در زمان اجرا)، معرفی .NET Aspire برای مدیریت سیستم‌های توزیع‌شده ابری، و قابلیت‌های جذابی در C# 10 تا 13 مثل File-scoped namespaces، Required members و Primary Constructors.
  • دات‌نت ۱۰ (LTS) و C# 14 (نوامبر ۲۰۲۵): این نسخه با تمرکز ویژه بر ساده‌سازی کدنویسی و عملکرد معرفی شد. قابلیت جذاب File-Based Apps بالاخره امکان اجرای مستقیم یک فایل .cs بدون نیاز به ساخت فایل‌های پروژه (.csproj و .sln) را برای اسکریپت‌نویسی فراهم کرد. همچنین در C# 14 ویژگی‌های پرطرفداری مثل Extension Members (امکان تعریف Property و متدهای استاتیک به صورت Extension)، کلیدواژه جدید field برای دسترسی مستقیم به فیلد پشتیبان در پراپرتی‌ها، و اپراتورهای بومی LeftJoin و RightJoin در EF Core 10 اضافه شدند.
  • دات‌نت ۱۱ و C# 15 (۲۰۲۶): تمرکز اصلی این نسل بر ایمنی نوع‌ها (Type Safety) و بهینه‌سازی سطح پایین است. اضافه شدن Union Types (با کلیدواژه union) و سلسله‌مراتب بسته (Closed Hierarchies) با کلیدواژه closed، مدل‌سازی دامنه (Domain Modeling) را متحول کرده است. همچنین پیاده‌سازی Runtime Async مستقیماً در دل زمان اجرا (Runtime)، سربار متدهای ناهمگام را به حداقل رسانده و ردگیری خطاها (Stack Traces) را بسیار تمیزتر کرده است.

۸. جدول تایم‌لاین کامل نسخه‌های سی‌شارپ و دات‌نت

برای اینکه یک دید کلی و سریع از روند تکامل این اکوسیستم داشته باشید، مهم‌ترین نقاط عطف تاریخچه C# و .NET را در جدول زیر خلاصه کرده‌ایم:

نسخه C# نسخه پلتفرم (NET.) سال انتشار مهم‌ترین ویژگی‌ها و تغییرات انقلابی
C# 1.0 NET Framework 1.0. ۲۰۰۲ تولد CLR، مدیریت حافظه خودکار (GC)، WinForms و ASP.NET WebForms
C# 2.0 NET Framework 2.0. ۲۰۰۵ معرفی Generics، انواع Nullable، متدهای بی‌نام و کلیدواژه yield
C# 3.0 NET Framework 3.5. ۲۰۰۷ انقلاب LINQ، عبارات Lambda، متدهای Extension، کلیدواژه var، معرفی WPF و WCF
C# 4.0 NET Framework 4.0. ۲۰۱۰ کلیدواژه dynamic، پارامترهای اختیاری و کتابخانه موازی‌سازی TPL
C# 5.0 NET Framework 4.5. ۲۰۱۲ معرفی الگوی انقلابی async و await برای برنامه‌نویسی ناهمگام
C# 6.0 / 7.0 NET Core 1.0 / 2.0. ۲۰۱۵ - ۲۰۱۷ متن‌باز شدن دات‌نت، کامپایلر Roslyn، اجرای Cross-Platform، معرفی Pattern Matching و Tuples
C# 8.0 NET Core 3.0. ۲۰۱۹ Nullable Reference Types (مبارزه با خطای NullReferenceException)، معرفی Blazor و gRPC
C# 9.0 NET 5.0. ۲۰۲۰ یکپارچه‌سازی اکوسیستم (حذف نام Core)، معرفی record برای داده‌های تغییرناپذیر
C# 10 / 11 NET 6 (LTS) / .NET 7. ۲۰۲۱ - ۲۰۲۲ Minimal APIs، Global Usings، کامپایل Native AOT، معرفی NET MAUI. و Generic Math
C# 12 / 13 NET 8 (LTS) / .NET 9. ۲۰۲۳ - ۲۰۲۴ Primary Constructors برای همه کلاس‌ها، Collection Expressions، معرفی NET Aspire. و یکپارچگی هوش مصنوعی
C# 14 NET 10 (LTS). ۲۰۲۵ اپلیکیشن‌های تک‌فایلی (File-based apps)، بلوک‌های Extension، کلیدواژه field و بهینه‌سازی EF Core 10
C# 15 NET 11. ۲۰۲۶ معرفی Union Types (union)، سلسله‌مراتب بسته (closed) و معماری Runtime-Native Async

جمع‌بندی؛ چرا دات‌نت دیگر آن غول خسته قدیمی نیست؟

اگر به مسیر بیش از دو دهه گذشته نگاه کنیم، راز ماندگاری سی‌شارپ و دات‌نت در یک کلمه خلاصه می‌شود: انطباق‌پذیری. زبان‌های بسیاری در دهه ۲۰۰۰ متولد شدند که به دلیل اصرار بر معماری‌های قدیمی از دور خارج شدند. اما سی‌شارپ به لطف رهبری مستمر آندرس هجلزبرگ و مدز تورگرسن (Mads Torgersen)، توانست بهترین مفاهیم برنامه‌نویسی تابعی (Functional) را در دل یک زبان شیءگرای قدرتمند جای دهد، بدون اینکه کدهای قدیمی را بشکند.

امروزه با یک دانش واحد در C#، می‌توانید در ASP.NET Core سرویس‌های ابری فوق‌سریع بنویسید، در Unity بازی بسازید، با WPF و MAUI اپلیکیشن‌های دسکتاپ و موبایل توسعه دهید و با ML.NET و Microsoft.Extensions.AI مدل‌های یادگیری ماشین و هوش مصنوعی را مستقیماً به کدهای سازمانی خود متصل کنید.

۹. سوالات متداول درباره تاریخچه سی‌شارپ و دات‌نت

خالق زبان برنامه‌نویسی سی‌شارپ (#C) چه کسی است؟
معمار اصلی و خالق زبان سی‌شارپ، آندرس هجلزبرگ (Anders Hejlsberg)، مهندس برجسته دانمارکی در شرکت مایکروسافت است که پیش از آن نیز زبان Turbo Pascal و محیط توسعه Delphi را خلق کرده بود (و بعدها TypeScript را نیز طراحی کرد).
تفاوت اصلی .NET Framework با .NET مدرن (دات‌نت کور سابق) چیست؟
.NET Framework نسل قدیمی پلتفرم دات‌نت (نسخه‌های ۱ تا ۴.۸) است که فقط روی سیستم‌عامل ویندوز اجرا می‌شود و به اجزای ویندوز وابسته است. اما .NET مدرن (که در سال ۲۰۱۶ با نام .NET Core شروع شد و از نسخه ۵ به بعد فقط .NET نامیده می‌شود)، کاملاً متن‌باز، ماژولار، بسیار سریع‌تر و Cross-Platform است؛ یعنی روی لینوکس، مک، ویندوز و داکر بدون هیچ محدودیتی اجرا می‌شود.
چرا مایکروسافت بعد از NET Core 3.1. مستقیماً سراغ .NET 5 رفت؟
مایکروسافت نسخه ۴ را به طور عمدی جا انداخت تا توسعه‌دهندگان آن را با نسخه‌های قدیمی NET Framework 4.x. (مثل 4.5 یا 4.8) اشتباه نگیرند. همچنین کلمه Core حذف شد تا نشان دهد از این نسخه به بعد، تنها یک پلتفرم واحد دات‌نت برای تمام پروژه‌ها وجود دارد.
منظور از نسخه‌های LTS و STS در انتشار سالانه دات‌نت چیست؟
مایکروسافت هر سال در ماه نوامبر یک نسخه جدید از دات‌نت منتشر می‌کند. نسخه‌های زوج (مثل NET 8. و NET 10.) از نوع LTS (Long-Term Support) هستند و ۳ سال پشتیبانی رسمی و آپدیت امنیتی دریافت می‌کنند که برای پروژه‌های حساس سازمانی ایده‌آل است. نسخه‌های فرد (مثل NET 9. و NET 11.) از نوع STS (Standard-Term Support) هستند و برای تیم‌هایی مناسب‌اند که می‌خواهند سریع‌تر به جدیدترین ویژگی‌ها دسترسی داشته باشند.
مهدی یدی

مهدی یدی

یک برنامه نویس ☕ ASP.Net Core - MAUI - WPF - Unity - ML.Net فعالیت می کنم.از تولید محتوا لذت میبرم. و دوست دارم محتوای پارسی را بروز نگهدارم 😎

ارسال دیدگاه

کد امنیتی

نظرات کاربران (0)

هنوز هیچ دیدگاهی برای این مقاله ثبت نشده است.

Captcha Active