# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل > آموزش: ساخت سیستم عامل با C#‎‎

## navidnkh

سلام دوستان 
شاید شما هم مثل من خیلی دوست داشته باشین یک سیستم عامل بسازید ، درسته که مفهوم سیستم عامل یک مبحث بزرگ و پیچیدس ولی خب قرار نیست که ما از همین الان اونم تک نفری بتونیم سیستم عاملی در حد ویندوز یا حتی لینوکس که سال ها روش کار شده بنویسیم . پس اگر از الان اینطور فکری رو دارین ، قاب کنین بزنید به دیوار آینده دهنتون ، اینو میگم چون کار نشد نداره و به عقیده من اگر یک بشر بتونه کاری انجام بده یک دیگه هم میتونه ولی باید تلاش کنه و زحمت بکشه
برای شروع سیستم عامل نویسی در همین انجمن  بحث ها وتایپیک های زیادی وجود داره که امیدوارم که اونارو بخونید و اون طرح کلی رو تو ذهنتون مجسم کنید

از اینا بگذریم  :لبخند: 
برای نوشتن سیستم عامل راه های زیادی هست که چند تاشو نام میبرم
1-راه اول نوشتنه سیستم عامل از ب بسم الله تا آخرش که البته کاره سختی هست ، همنطور که میدونید برای این کار زبان های متفاوتی هست مثل C , C++‎‎‎ , assembly
یه لینک خوب:
http://www.brokenthorn.com/Resources/OSDev1.html
این سایت زبانش خارجی است و قدم به قدم سیستم عامل نویسی رو  با Assembly  و C و C++‎‎‎  آموزش میده (البته تا یه حدی) از اونجا به بعدش به عهده ی خودتونه ولی میتونین سوالاتتونو تو فروم ش مطرح کنین ، توصیه میکنم اگر انگلیسیتون خوبه حتما حتما بخونید 
 اما اونایی که انگیلیسیشون یه کمی ضعف داره میتونید از این سایت

که توسط Joker عزیز تا اندازه ایش ترجمه شده استفاده کنین

2- راه دوم اینه که برین رو سیستم هایی که قبلا نوشته شده اند(و البته open Source اند) کار کنین مثل :

Linux  که انواع مختلفی داره که خارج از بحثمونه و زیاد در موردش بحث شده
Minix  که توضیحاته زیادی در موردش هست و از همه بهتر کتابش هست
React Os  که یه سیستم عامل هست که بر مبنای NT  یا همون Windows نوشته شده {
به شخصه روی این سیستم عامل زیاد وقت گذاشتم ولی خطا های بیشماری داره تنها مزیتش اینه که میتونه برنامه های ویندوزی رو اجرا کنه (یا همون فایلای exe) و اینکه شباهته زیادی به ویندوز xp و 95 داره
زبان سایتش انگلیسی هست ولی بعضی قسمت هاش خیلی افتضاح نوشته شده  چون در اصل کسایی که نوشتن آلمانی هستن یک کامپایلر داره که صدی 99% خطا میده شناس باهات یار باشه درست کامپایل کنه اونم تو xp بهتر کامپایل میشه 
نتیجه گیری:
اگر خیلی بیکاری و حوصله داری برو دنبالش چون برای درست کردنش حداقل باید 1 سال بشینی ببینی چی نوشتن تازه اون موقع خطا یابی کنی
ولی برای تست خوبه واسه یک کاره دیگه هم خوبه که من ازش استفاده میکنم اونم اینه که اگر برنامه نویسه ویندوزی و میخوای برنامه هات بقول معروف بوت باشند وتحت یک سیستم عامل مجزا بدون ویندوز اجرا بشن با این کار کن که عالیه واسه این کار (سوال در مورد این موضوع بود در خدمتیم  :چشمک:  شاید یه تایپیک در موردش زدم ولی بدبختانه امسال کنکور دارم و شبانه روز درس میخونم و بیکاریامو میام اینجا )
}

3- و راه سوم که تلفیق از  راه 1 و 2 هست (البته فقط این 3 راه نیستند)
که ما میخوایم در این مورد صحبت کنیم
همه شما میدونید اگر نمیدونید الان میفهمید که ، C#‎‎‎.net  معمولا تحت ویندوز قابل اجراست پس چه جوری باهاش سیستم عامل بنویسیم  :متفکر: 

ادامه تایپیک رو بعدا مینویسم چون الان ساعت 4 صبح و من دارم از خواب میمیرم البته اگر دوست دارین ادامه بدم نظر بدین که دل گرم باشم و وقت بزارم اگر چیزی از قلم حا انداختم یا اشتباهی هم هست حتما بگین

----------


## navidnkh

سلامی دوباره  :بوس: 
در قسمت قبل این موضوع مطرح شد که چگونه با C#‎‎‎ سیستم عامل بنویسم و همون طور که گفتم C#‎‎‎.net زبانی هست که معمولا تحت ویندوز قابل اجراست پس چجوری با اون سیستم عامل بنویسیم ؟
به کمک Cosmos که تلفظ میشه کازموز  ، موز نه!!!!!   مٌوز   :لبخند گشاده!: 
تو این بخش از سایت برنامه نویس چند تایپیک در مورد این موضوع هست اما در هیچکدوم توضیحه کاملی وجود نداره ولی من سعی میکنم تا جایی که یاد دارمو برای شما دوستان به اشتراک بزارم
خوب ، سیستمی که میخوایم روش سیستم عامل بنویسیم یه سیستم تقریبا آماده شده هست یعنی قسمت هایی از هسته اون قبلا نوشته شده و نیازی نداره ما درگیر این موضوع بشیم اما اگر دلتون خواست به راحتی متونین کداشو تغییر بدین 
یه نکته مهم رو بگم اونم اینکه توجه داشته باشید که درسته اینجا میشه با C#‎‎‎.net یا Vb.netسیستم عامل نوشت ولی اینو مد نظر داشته باشین که نمیتونین Windows Forms بنویسین باید کنسول بنویسین به زبون ساده تر اینجا خبری از Button یا Form یا Lable اینا نیست ، چون اونا طبق ویندوز کار میکنن که اینجا 
اصلا ویندوزی وجود نداره 
اولین کاری که باید انجام بدین داشتن یه ویندوز 7 به بالاست 
دوم داشتن ویژال استدیو 2010 هست البته سرویس پک 1
 Service Pack 1
SDK Service Pack 1
سوم داشتن .NET Framework v3.5
Service Pack 1
چهارم آپدیت 4.0.3 for Microsoft .NET Framework 4
Runtime Update
Design-Time Update for Visual Studio 2010 SP1
پنجم داشتن Sql Server Express 2012  هست
برای 64 بیتی ها
برای 32 بیتی ها
ششم نصب نرم افزار Inno Quick Start Pack
و داشتن نرم افزار Vmware ماشالله ایرانی ها که همشون کرکشو دارن ولی واسه کسایی که نمیخوان نسخه WorkStation رو نصب کنن میتونن از این لینک نسخه رایگان و کم حجم شو دانلود کنن VMware Player (اگر Vmware WorkStation رو دارین پیش فرض Player هم نصب هست)

حالا باید سورس Cosmos رو دانلود کنین (البته میتونید سورسو دانلود نکنین اگر نمیخواین کدهای اصلی شو تغییر بدین)
فایل ZIP

اگر مرحله بالا رو دانلود نکردین باید برین این سایت و روی اون دکمه بنفش بزرگ کنار که نوشته دانلود کلیک بفرمائید COSMOS
بعد از دانلود اگر ویژال استدیو باز هست ببندین و برنامه رو نصب کنین بهتره مسیر پیشفرضشو قبول کنید 

میدونم تا اینجا شاید خسته شده باشید یا پدر اینترنتتون در اومده باشه ولی اگر هر کاری رو دوست داشته باشین برای رسیدن بهش باید تلاش کرد وسختی کشید

اگر فایل zip دانلود کردین ابتدا در یک پوشه Extract کنید بعد یک فایل install.bat داره که باید اجراش کنید اگر تمام مراحل بالا رو درست انجام داده باشین شروع میکنه به نصب آخرش که نصب تموم شه  خودش پیشفرض ویژال استدیو رو باز میکنه براتون در منوی Solution Explorer داخل پوشه Demos یک پوشه به نام Guess وجود داره که داخل اون یک فایل C#‎‎ به نام Guessos هست در اصل این کد هسته ای هست که میخواین بنویسین

حالا اگر فایل نصبی رو نصب کردین کافیه ویژال استدیو رو باز کنین و روی New Project کلیک کنید و بعدش از منوی سمت چپ گزینه Cosmos رو انتخاب کنید حالا بسته به زبانی که دوست داری یکی از گزینه های Vb.net یا  C#‎‎.net رو انتخاب کنید (یه اسمم واسه پروژتون بزارید)
حالا اگر دست به هیچی نزنید و دکمه Run یا F5 رو فشار بدین 
بعد از مدتی Vmware Player باز میشه و اولین سیستم عامله شما به نمایش گذاشته میشه البته این سیستم عامل فعلا فقط میتونه یک متن از کاربر بگیره و اونو دوباره نمایش بده

تبریک میگم سیستم عامل مزخرفی داریم  :تشویق:   :گیج:  اما در قسمت بعد یاد میدم که اینو چه جوری باحالش کنیم  فعلا  :چشمک:

----------


## yassersajjadi

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

----------


## Abbas Naghdi

و اما سلام 

منم یه تایپیک زدم برای ساخت آنتی ویروس (داخل امضای من هستش)

یه چیزی میگم ... <<< با C#‎ >>>
بچه ها شماها هالتون خوبه ... با C++‎ هم به سختی میشه همچین چیزی نوشت (C و Assambly میخواد)
C#‎ زبانیه که خودش وابسته به سیستم عامل ویندوز و فرامورک .net هست ...
جدا از این ها خودشو یه برنامه باید کامپایل و اجرا کنه ... حالا چطوری میخواد برنامه ای رو اجرا کنه ...
اینا همه یه جا ... سیستم عاملی که با C#‎ باشه 100 سال طول میکشه تا بالا بیاد + تا الان کجا دیدیت یه برنامه ی درست حسابی با C#‎ باشه که شما میخوایین باهاش سیستم عامل بسازید
به نظر من با (HTML) سیستم عامل بنویسید خیل بهتره ...  :لبخند گشاده!: 
یه دلیل بیارید که بشه با C#‎ سیستم عامل نوشت .. یا یه نمونه بیارید ... من خودم تا آخرشو هستم ...  
و در آخر ... کار نشد نداره ... اما در این مورد نشد داره ... مثلا من خودم که دارم آنتی ویروس مینویسم ... خیلی مشکلات از همین اول راه برام پیش اومده اما همه قابل حل هستن ... اما این یکی نه ... !

----------


## m.j_banitaba

تمامی این مباحث هم درست و هم غلط است و این بر می گردد به این نکته که هدف از نوشتن سیستم عامل چیست ؟
اگر هدف از نوشتن سیستم عامل کنترل یک ماشین حقیقی مثل intel core i3  باشه این ماشین تنها دستورات باینری مخصوص به خودشو می شناسه لذا ابتدا باید مفسر cli در حافظه بار گذاری شده باشد سپس سیستم عامل با لا بیاید که خود این کار یعنی نوشتن سیستم عامل ؟!؟
اگر هدف از نوشتن سیستم عامل مقایسه الگوریتم های مدیریت حافظه و مدیریت منابع با هم باشد در هر محیط برنامه نویسی این الگوریتم ها قابل پیاده سازی هستند.  :متفکر:

----------


## navidnkh

سلام دوستان ، تبریک سال نو و همچنین چهارشنبه سوزی
خوشحالم که چند نفر نظر و انتقاد دادن
اما یکم منم صحبت کنم راجب بحث هایی که شده
من یک استادی دارم که میگه رو زبانی که برنامه نویسی میکنید غیرت داشته باشید ، آقا عباس گل شما از C#‎ بدت میاد چرا نظرتو به دیگران القا میکنی و ازش بد میگی
C#‎ توسعه یافته C++‎ و C هست ، از طرفی مشکل ما اینه که از زمانی که مایکروسافت روی C#‎ مانور داده همه ما اونو با C#‎.NET اشتباه میگیریم والا C#‎ خالی که مثل C++‎ هست 
ولی این C#‎.net هست که اومده توابعی از پیش ساخته رو در بر گرفته این یک.
برای اینکه میگین تا حالا چه برنامه خوبی با C#‎ نوشته شده ، نیازی نیست راه دوری بریم اگر شماVisual Studio 2012 رو نصب کنی همراهش یک نرم افزار نصب میکنه به نام
Microsoft Visual Belend این نرم افزار با تکنولوژی WPF و با زبان C#‎ نوشته شده کارشم واسه گرافیستاس بیشتر البته گرافیک نرم افزاری و وب برای تکنولوژی Silver Light و خوده WPF
فوق العاده قدرت منده و محیطی مثل Adobe Flash داره البته واسه ساختن گرافیک برنامه های مترو استایل(مخصوص ویندوز 8) هم هست
و خیلی نرم افزار های دیگه که خواستی دونه دونه نام ببرم
اما من قصد جسارت نداشتم ولی قصد من از زدن این تایپیک ساخت سیستم عامل نبوده و نیست ، میخواستم کسایی که بوت نویسی رو دوست دارن یه کمکی کرده باشم 
اما به درد خود شما هم میخوره مگه شما نمیگی داری آنتی ویروس مینویسی ، دوست نداری یه آنتی ویروس قدرت مند داشته باشی آیا این راه کمکت نمیکنه که با این روش بتونی تمام حافظه رم 
تمام پردازش های CPU رو در اختیارت بگیری و فایل ها رو اسکن کنی مثل خیلی از ویروس یاب هایی دیگه که بوتش هم هست
و در مورد صحبت های دوست خوبمون آقای m.j_banitaba هم حرفی ندارم بزنم چون کاملا متین و درست فرمودند ومن قصد نوشتن سیستم عاملو در صحبت هام گفتم 
امید وارم که حرفام قانع کننده باشه و کسی از دوستان مخصوصا آقا عباس عزیز از حرفهام ناراحت نشده باشند
اگر واقعا موضوع جذاب و جالبی نیست خوب تا همین جاش بسته چون اگر کسی علاقه مند باشه داخل اینترنت زیاد در موردش بحث شده فقط کافیه یه کم انگلیسی به خرج بدین مخصوصا داخل یوتیوب که فراونه
فقط همینو میدونم که خارجی ها ریختن سر این سیستم عامل و همش دارن شخصیش میکنن و چیز های جدیدی باهاش تولید میکنن که من با دیدن اونا واقعا تعجب کردم واسه همین این تایپیکو زدم که ما عقب نمونیم از اونا

----------


## pswin.pooya

سلام
توی مرحله اول باید بگن که خیلی خوشحالم که فعالیتهای مرتبط با سیستم عامل داره زیاد میشه. امیدوارم که دوستان علاقه مند به همین شکل ادامه بدن.





> اگر هدف از نوشتن سیستم عامل کنترل یک ماشین حقیقی مثل intel core i3  باشه  این ماشین تنها دستورات باینری مخصوص به خودشو می شناسه لذا ابتدا باید  مفسر cli در حافظه بار گذاری شده باشد سپس سیستم عامل با لا بیاید که خود  این کار یعنی نوشتن سیستم عامل ؟!؟


در مورد این مطلب باید اضافه کنم که همیشه سازگاری داخل خانواده های معروفی مثل ARM و یا x86 حفظ شده. یعنی ممکنه core i3 یکسری از دستورات منحصر به فرد خودش رو داشته باشه اما دستورات قبلی خانواده رو هم پشتیبانی میکنه. و همین موضوع در مورد خانواده ARM هم صادق هست. ( معمولا دستورات یکسان موندن)




> اگر هدف از نوشتن سیستم عامل مقایسه الگوریتم های مدیریت حافظه و مدیریت  منابع با هم باشد در هر محیط برنامه نویسی این الگوریتم ها قابل پیاده سازی  هستند.


برای شبیه سازی و یا مقایسه این الگوریتم ها ( یا حداقل اکثر اونها ) نیازی به نوشتن سیستم عامل نیست. 




> بچه ها شماها هالتون خوبه ... با C++‎‎ هم به سختی میشه همچین چیزی نوشت (C و Assambly میخواد)
> اینا همه یه جا ... سیستم عاملی که با C#‎‎ باشه 100 سال طول میکشه تا بالا  بیاد + تا الان کجا دیدیت یه برنامه ی درست حسابی با C#‎‎ باشه که شما  میخوایین باهاش سیستم عامل بسازید


من از یه جنبه هایی با این دوستمون موافق هستم. نوشتن سیستم عامل لازمه دونستن کلیه جزپیات مرتبط با زبان برنامه نویسی، سخت افزار و ... هست. زمانی شما از یه زبان مثل C#‎ دارین استفاده می کنید باید بدونید که دقیقا سورس برنامه چه شکلی به کد ماشین تبدیل میشه، چه شکلی توابع و متدها فراخوانی میشه، پارامترها ارسال میشن و ... . به همین دلیل ترجیح اکثر برنامه نویسهای دنیا زبان C هست. چون درک ساختار و ارتباطات زبان C یه مراتب از بقیه موارد نظیر C++‎ و یا C#‎ آسونتر هست.

حالا اینکه یه عده دارن با C#‎ سیستم عامل می نویسن ( سیستم عاملی که CLI داره و اون هم با Cو اسمبلی نوشته شده) بماند تا حالا هیچ پروژه موفق و یا حداقل کاملی در این زمینه نداشتیم. و احتمال داشتنش هم خیلی کمه. بهتره وقتتون رو بیخودی نکشید و یه کار رو اصولی شروع کنید. تقریبا امروزه ابزارهای نوشتن سیستم عامل و زبانهای طراحی یه قالب استاندارد پیدا کرده. فقط کافیه داخل ویکی osdev یه نگاه بکنید. متوجه می شید که حداقل ۹۰ درصد از C و لینوکس برای توسعه سیستم عاملشون استفاده کردند. اون ۱۰ درصد هم یا دنبال نوع آوری بودند و یا اینکه واقعا به زبانها و ابزارهایی که استفاده کردند تسلط کافی دارند.

----------


## aryakvn

> سلام دوستان ، تبریک سال نو و همچنین چهارشنبه سوزی
> خوشحالم که چند نفر نظر و انتقاد دادن
> اما یکم منم صحبت کنم راجب بحث هایی که شده
> من یک استادی دارم که میگه رو زبانی که برنامه نویسی میکنید غیرت داشته باشید ، آقا عباس گل شما از C#‎‎‎ بدت میاد چرا نظرتو به دیگران القا میکنی و ازش بد میگی
> C#‎‎‎ توسعه یافته C++‎‎‎ و C هست ، از طرفی مشکل ما اینه که از زمانی که مایکروسافت روی C#‎‎‎ مانور داده همه ما اونو با C#‎‎‎.NET اشتباه میگیریم والا C#‎‎‎ خالی که مثل C++‎‎‎ هست 
> ولی این C#‎‎‎.net هست که اومده توابعی از پیش ساخته رو در بر گرفته این یک.
> برای اینکه میگین تا حالا چه برنامه خوبی با C#‎‎‎ نوشته شده ، نیازی نیست راه دوری بریم اگر شماVisual Studio 2012 رو نصب کنی همراهش یک نرم افزار نصب میکنه به نام
> Microsoft Visual Belend این نرم افزار با تکنولوژی WPF و با زبان C#‎‎‎ نوشته شده کارشم واسه گرافیستاس بیشتر البته گرافیک نرم افزاری و وب برای تکنولوژی Silver Light و خوده WPF
> فوق العاده قدرت منده و محیطی مثل Adobe Flash داره البته واسه ساختن گرافیک برنامه های مترو استایل(مخصوص ویندوز 8) هم هست
> ...


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
فک نکم قرار لود بگی چه جوری باحالش کنم !!!!!!!!!!!!!!!!!!!!!! :لبخند گشاده!:

----------


## aryakvn

آقا یه سوال ... اگه من بخوام یه سیستم عامل با بیس لینوکس بسازم چجوریه ؟!‌ چون با C#‎ یکی ساختم ولی .. !‌ چون که تعداد کد ها زیاد می شد هنگ می کرد و نمی شد گرافیکیش کرد و کامند لاین بود ... . 
ممنون می شم راهنمایی کنین !

----------


## drsina

احتمالا یه کنسول ابلیکیشن ساختی فکر کردی سیستم عامل شده !!!
با سی شار‍ب نمیشه سیستم عامل ساخت به هیچ وجه ایناهم که میگم با سی شارب دات نت نمیشه ساخت با سی شارب میشه ساخت یه چیزی با یه چیز دیگه اشتباه گرفتن.
قبلا یه بنده خدایی یه بروژه مثه cosmos داده بود که اونم نمیشد بش گفت سیستم عامل (چرت و برت بود)
سی شارب وابسته به دات نت فریمورک یا مونو هست یعنی یه سری دی ال ال دارن با الگو های just in time به زبان ماشین تبدیلش میکنن ( یا dependencies) یعنی با استفاده از یه زبان کمکی دیگه مثه سی بلاس بلاس تازه قابل فهم میشه برا ماشین که تحت ویندوز یا لینوکس بیاده سازی شدن ... بعدشم یه سوال مهم :‌چرا چرخی را که قبلا ساخته اند دوباره اختراع کنیم ؟!

----------


## danyalbursin

سلام به همگی . دوستان همه شما یه بخشایی از حرفاتون درست بود هم یه بخشایی غلط !  اولا نگید سی شارپ کنده ! اگه کند بود که باهاش Xamarin , visual Studio , Unity  , .... نمی نوشتند !  بعدشم خوده شماها که یه جور صحبت میکنید که انگار مایکروسافت با شما پدر کشتگی داره همتون بلا شک با همین ویندوز مایکروسافت و دارید استفاده میکنید !  و از همه مهم تر !  شاید بشه با سی شارپ از bass نوشت سیستم عامل ولی کسی اینکارو نمیکنه به خاطر اینکه تو سیستم عامل اگه بخوای از bass  بنویسی حتی  با C++‎ هم شما نمیتونید از هیچ کدوم  توابع هاس استفاده کنید و باید خودتون همشو بنویسید ! یه نکته دیگه ! من خودم یه آموزش کامل مرحله به مرحله تا انتها در باره ساخت Virtual Operating System  دیدم که خیلی حرفه ای نوشته شد از  Bass و کارایی قابل ملاحظه ای هم داشت !!!

----------


## pswin.pooya

> سلام به همگی . دوستان همه شما یه بخشایی از حرفاتون درست بود هم یه  بخشایی غلط !  اولا نگید سی شارپ کنده ! اگه کند بود که باهاش Xamarin ,  visual Studio , Unity  , .... نمی نوشتند !  بعدشم خوده شماها که یه جور  صحبت میکنید که انگار مایکروسافت با شما پدر کشتگی داره همتون بلا شک با  همین ویندوز مایکروسافت و دارید استفاده میکنید !  و از همه مهم تر !  شاید  بشه با سی شارپ از bass نوشت سیستم عامل ولی کسی اینکارو نمیکنه به خاطر  اینکه تو سیستم عامل اگه بخوای از bass  بنویسی حتی  با C++‎‎‎‎‎‎‎‎ هم شما  نمیتونید از هیچ کدوم  توابع هاس استفاده کنید و باید خودتون همشو بنویسید !  یه نکته دیگه ! من خودم یه آموزش کامل مرحله به مرحله تا انتها در باره  ساخت Virtual Operating System  دیدم که خیلی حرفه ای نوشته شد از  Bass و  کارایی قابل ملاحظه ای هم داشت !!!


یونیتی رو با C++‎‎‎‎‎‎‎ نوشتن. فقط کد سی شارپ اجرا می کنه:
https://en.wikipedia.org/wiki/Unity_(game_engine)

ویندوز هم با سی پلاس پلاس نوشته شده:
https://en.wikipedia.org/wiki/Microsoft_Windows

کلا اگر سی شارپ خیلی زبون خوبی بود مایکروسافت ازش استفاده می کرد و این در شرایطی هست که تمام بسته های مهم مایکروسافت با سی پلاس پلاس نوشته شدن. حالا بگذریم از مایکروسافت. تمام برنامه های معروف که شما استفاده می کنید هم با سی پلاس پلاس نوشته شدن. من الان درایو سی خودم 250 گیگ هست که پر از برنامه هست و درایو دی هم همینطور و توی این همه برنامه حتی یک برنامه هم ندارم که با سی شارپ نوشته شده. یه زمانی می گفتن که سی شارپ اول راه هست و بعدا تمام برنامه ها باهاش نوشته می شه. اما حالا که نزدیک 16 سال هست از به وجود آمدنش گذشته هنوز هم یه شرکت بزرگ اقدام به نوشتن برنامه باهاش نکرده.

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

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

البته به روز بودن هم محدود به امکانات نیست. از نظر ساختار خود زبان هم سی شارپ به روز نیست و مرتبا داره سعی می کنه از زبانهایی مثل سی پلاس پلاس تقلید کنه. مثلا یکی از مواردی که سال 2011 در سی پلاس پلاس استاندارد شد و سالها قبلش تحت استاندارد C++‎‎‎‎‎‎‎0x می شناختنش move constructor ها هست که داخل سی شارپ اصلا وجود نداره و کلی از این مثالها می شه زد.

مورد دیگه انعطاف زبان برنامه نویسی هست. سی شارپ تقریبا هیچ انعطافی از خودش نشون نمی ده اما این در مورد سی پلاس پلاس صادق نیست. مثال بارز اونها ماکرو ها هست که به کمک اونها می شه کد زمان کامپایل رو تغییر داد و حتی مراحل بیشتری برای کامپایل اضافه کرد که بارز ترین نمونه اون کیوتی هست که qmake رو شما باید قبل از کامپایل کد صدا بزنید.

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


یه مورد دیگه Base نه  bass.  کلمه bass در انگلیسی بیشتر برای صدای بم استفاده می شه البته یه معنی دیگه اش برای یه نوع ماهی هم هست (ولی تلفظش فرق می کنه. اگر بگی بیس، می شه صدای بم ولی اگر بگی بس، می شه همون ماهی) و توی انگلیسی هم معمولا نوشتن برنامه از پایه رو base نمی گن و از کلمه scratch بهتر هست بگیم عبارت from scratch استفاده می کنن و خود کلمه به تنهایی معنی خراش و یا خراشیده شدن می ده (البته بازم توی اکثر موارد):

developing an OS *from scratch*

----------


## pswin.pooya

در مورد ویژوال استادیو:

اگر محیط ویژوال استادیو رو می گید که با ترکیب سی پلاس پلاس و سی شارپ نوشته شده. نسخه 2010 با wpf نوشته شد که حسابی گند زد مایکروسافت و خیلی ها شاکی شده. و بعد از اونم کلا ویژوال استادیو به کندی معروف شد. می تونید یه مقایسه سرعت توی ide های مختلف داشته باشید. مثلا برنامه نویسی داخل محیط Qt Creator به مراتب سریعتر و راحتر هست و البته بگذریم که کلی IDE هم مثل Monodevelope و Sharpdevelope و ... هم نوشته شد و بشترین هدف جبران همین کندی ها بود. یه سرچ ساده نشون می ده که خیلی ها شاکی هستن.

https://en.wikipedia.org/wiki/Micros...al_Studio#2013

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

----------

