اگر با سیشارپ کار میکنید، احتمالاً میدانید که این زبان فراتر از یک ابزار ساده برنامهنویسی است. سیشارپ نتیجه سالها آزمایش هوشمندانه در مایکروسافت است که نه تنها فریمورک داتنت را متحول کرد، بلکه کل صنعت نرمافزار را تحت تأثیر قرار داد. در این مقاله، به بررسی کلیدیترین لحظات تاریخی سیشارپ میپردازیم تا بفهمیم چگونه این زبان از یک ایده نوظهور به یک نوآور واقعی تبدیل شد.
تولد سیشارپ و فریمورک داتنت (۲۰۰۲)
داستان سیشارپ از سال ۲۰۰۲ شروع میشود، زمانی که نسخه ۱.۰ این زبان همراه با فریمورک داتنت ۱.۰ منتشر شد. معمار اصلی پروژه، اندرس هجلسبرگ بود – کسی که پیش از این، زبانهای معروفی مثل توربو پاسکال و دلفی را طراحی کرده بود. هدف مایکروسافت از ایجاد سیشارپ، ساخت زبانی مدرن، امن و ساده بود که نسبت به سیپلاسپلاس آسانتر باشد، اما با چشمانداز منحصربهفرد خودشان.
این زبان از همان ابتدا بر ایمنی تمرکز داشت، مثلاً با مدیریت خودکار حافظه (garbage collection) که خطر خطاهای رایج در سیپلاسپلاس را کاهش میداد. سیشارپ قرار بود پلی بین دنیای ویندوز و توسعه چندسکویی باشد، و این پایهای شد برای نوآوریهای بعدی.
پروژه تحقیقاتی سیاُمگا (Cω) در اوایل دهه ۲۰۰۰
در اوایل دهه ۲۰۰۰، مایکروسافت پروژه تحقیقاتی به نام سیاُمگا (Cω) را راهاندازی کرد. این پروژه تجاری نبود، بلکه آزمایشی از سوی بخش تحقیقاتی مایکروسافت بود که ایدههایی از #Polyphonic C (برای مدیریت همروندی چندنخی) و Xen (برای دسترسی به دادهها) را ترکیب میکرد. همروندی (concurrency) به معنای اجرای همزمان چندین وظیفه است، که در برنامهنویسی مدرن بسیار مهم است.
هرچند سیاُمگا هیچگاه به یک زبان اصلی تبدیل نشد، اما نوآوریهای آن مستقیماً الهامبخش ویژگیهای کلیدی در نسخههای بعدی سیشارپ شد. مثلاً، ایدههای مربوط به دسترسی یکپارچه به دادهها، پایهای برای توسعه LINQ (Language Integrated Query) شد – قابلیتی که بعداً بررسی میکنیم.
ورود LINQ و ایدههای برنامهنویسی تابعی (۲۰۰۷)
در سال ۲۰۰۷، با انتشار سیشارپ ۳.۰، زبان گامی بزرگ به سمت برنامهنویسی تابعی برداشت. اریک مایر، یکی از کلیدیترین افراد، مفاهیمی از زبانهای تابعی مثل هاسکل و ML را وارد سیشارپ کرد. این تغییرات، زبان را expressiveتر (بیانگرتر) کرد و به توسعهدهندگان اجازه داد کدهای تمیزتر و قدرتمندتری بنویسند.
ویژگیهای اصلی اضافهشده عبارت بودند از:
- LINQ: ابزاری برای پرسوجوهای یکپارچه از دادهها، با سینتکسهایی مثل from/where/select. این ویژگی کار با مجموعهها، دیتابیسها و حتی XML را ساده میکند.
- عبارات لامبدا (Lambda expressions): توابع ناشناس کوتاه که کد را مختصر میکنند، مثلاً برای فیلتر کردن لیستها.
- متدهای گسترشدهنده (Extension methods): اجازه میدهد متدهای جدیدی به کلاسهای موجود اضافه کنید بدون تغییر کد اصلی.
- کلمه کلیدی var: برای اظهار متغیرها بدون مشخص کردن نوع صریح، که کد را خواناتر میکند (البته نوع در زمان کامپایل مشخص میشود).
- انواع ناشناس (Anonymous types): برای ایجاد اشیاء موقتی بدون تعریف کلاس.
- درختهای عبارت (Expression trees): ساختارهایی که کد را به صورت درختی نشان میدهند و برای ابزارهایی مثل Entity Framework (فریمورک مدیریت دیتابیس) حیاتی هستند.
این ویژگیها، سیشارپ را از یک زبان شیءگرا به سمت ترکیبی از شیءگرایی و تابعی برد و کار با دادهها را انقلابی کرد.
تأثیر افشارپ و ورود async/await (۲۰۱۲)
در سال ۲۰۱۲، سیشارپ ۵.۰ ویژگی async/await را معرفی کرد – الگویی برای برنامهنویسی ناهمگام (asynchronous) که عملیات زمانبر مثل درخواستهای شبکه را بدون مسدود کردن نخ اصلی مدیریت میکند. این ایده از زبان افشارپ اقتباس شد، که از سال ۲۰۰۶ ویژگی مشابهی به نام “async workflows” داشت.
دان سیم، خالق افشارپ، تأکید کرده که برنامهنویسی ناهمگام یکپارچه ابتدا در افشارپ پیادهسازی شد و سپس به سیشارپ اقتباس گردید. این تغییر، سیشارپ را از مدلهای قدیمیتر asynchronous programming (مثل callbacks) رها کرد و توسعه اپلیکیشنهای responsive را آسانتر کرد.
تأثیر سیشارپ بر زبانهای دیگر (۲۰۱۵–۲۰۲۱)
سیشارپ نه تنها خودش تکامل یافت، بلکه الگوهایی را معرفی کرد که زبانهای دیگر را تحت تأثیر قرار داد. مثلاً:
الگوی async/await در برنامهنویسی ناهمگام:
- پایتون ۳.۵ (۲۰۱۵)
- جاوااسکریپت ES۲۰۱۷ (۲۰۱۷)
- کوتلین ۱.۳ (۲۰۱۸)
- راست ۱.۳۹ (۲۰۱۹)
- سویفت ۵.۵ (۲۰۲۱)
ایدههای تابعی الهامگرفته از LINQ:
- API Streams در جاوا ۸ (۲۰۱۴)
علاوه بر این، افراد کلیدی مثل گاوین بیرمن، سدریک فورنت، نیک بنتون (در سیاُمگا)، اریک مایر (در LINQ)، تاد پروبستینگ (در تکرارکنندهها)، اندرو کندی و کلودیو روسو (در ژنریکها) نقش مهمی در نوآوریهای دهه ۲۰۰۰ داشتند. تاریخچه این تأثیرات در مقاله “
#The Early History of F” به طور غیرمستقیم پوشش داده شده است.
نتیجهگیری
سیشارپ فقط دنبالکننده روندها نبود؛ بلکه آنها را ایجاد کرد. از تولدش در ۲۰۰۲ تا تأثیر بر زبانهای مدرن، این زبان نحوه فکر کردن توسعهدهندگان به همروندی، دادهها و طراحی زبان را تغییر داد.