طراحي نرم افزار ، برون سپاری نرم افزار، انجام نرم افزارهای سفارشی ،ارائه راهكارهاي توليد محتواي تحت وب , انجام پروژه در زمينه هاي تجارت الكترونيك و فناوري اطلاعات , طراحی وبسایت ، طراحی پرتال سازمان ،انجام مطالعات بازار، تهيه طرح هاي توجيهي و مطالعات امكان سنجي ،ارائه مشاوره در زمينه هاي سيستم هاي مديريت زنجيره ي تامين و مديريت كيفيت
English | فارسی
صفحه اصلی معرفی شرکت محصولات وخدمات اخبار تماس با ما
چرا زبان برنامه نویسی C هنوز محبوبیت داره؟

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

زبان برنامه نویسی C در سال 1972 توسط یکی از خدایان برنامه نویسی, دنیس ریچی, در آزمایشگاه های بل ساخته شد. سال 2010 میلادی کنار گوشمونه. اگه یه جمع و تفریق ساده انجام بدیم متوجه میشیم که 38 سال از ورود زبان برنامه نویسی C به دنیای کامپیوتر میگذره. لعنتی 38 ساااااللللللللللللللللل! اینجا این سوال پیش میاد که این کوفتی چرا هنوز داره استفاده میشه؟ حتی خونه ایی که 38 سال پیش ساخته شده ممکنه دیگه قابل زندگی نباشه. برای توضیح این مساله اول باید بررسی کنیم و ببینیم دنیای کامپیوتر در اون سال ها چه جوری بود.

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

معماری کامپیوتر

پردازش اطلاعات توی کامپیوتر توسط CPU انجام میشه. همونطور که می دونید کامپوتر فقط 0 و 1 رو میفهمه. یعنی حتی این بازی Call of Duty که شما داری بازی میکنی در پایین ترین لایه باید تبدیل به کدهای 0 و 1 بشه تا بتونه قابل فهم برای CPU باشه. جالب اینکه به صورت اصولی تر کامپیوتر حتی همون 0 و 1 رو هم نمیفهمه یعنی 0 و 1 از جنس ولتاژ برق هستن و فقط اصطلاحا بهشون میگین صفر و یک. این ولتاژ ها و سیگنال ها هم توسط تعداد زیادی از مدارات و گیت های مختلف که توی مادربورد و بقیه اجزای کامپیوتر شما قرار داره تولید و مدیریت میشن. از اینجا به بعد میریم تو حیطه ی سخت افزار پس بحث رو بیشتر ادامه نمیدیم…

زبان ماشین

زبان ماشین تنها زبانیه که میتونه مستقیما با CPU در ارتباط باشه. کد زبان ماشین طرح واره ایی از 0 و1 هاست. سازندگان مختلف پردازنده, به صورت سخت افزاری دستور العمل های مختلفی رو توی هر کدوم از پردازنده هاشون قرار دادن که توسط سیگنال های 0 و 1 کنترل میشن. هر کدوم این سازندگان به تناسب اینکه پردازنده ایی که ساختن, چه قابلیت هایی داره, طرح واره ایی از 0 و 1 هایی رو که می تونیم با کمک اونا با CPU صحبت کنیم رو در اختیار برنامه نویس ها قرار میدن. پس پردارنده های مختلف هر کدوم کد زبان ماشین مختص به خودشون رو دارن. مثلا کد زیر در پردازنده های خانواده ی x86/IA-32 عدد 97 رو در ثبات AL قرار میده (حالا لازم نیست بدونین ثبات چیه…)

10110000  01100001

تعجب نکردید؟ حالا این تازه یه کار ساده بود. جالب اینکه که اگه همین کار رو می خواستیم روی یه CPU دیگه و از یه معماری دیگه اجرا کنیم باید یه کد دیگه به جای این مینوشتیم. به تناسب اینکه CPU شما چند بیتی باشه (مثلا 32 بیتی باشه یا 64 بیتی) میتونید این دستور رو ساده تر کنید. مثلا اگه CPU شما 16 بیتی باشه میتونید دستور بالا رو به جای اینکه در مبنای دو وارد کنید(همون 0 و 1) در مبنای 16 وارد کنید:

B0  61

خب این دومی رو میشه راحت تر به خاطر سپرد. اما اصولا مغز انسان حروف رو بهتر از اعداد یادش میمونه. پس زبان اسمبلی وارد میدون شد.

زبان اسمبلی

زبان “سمبولیک” یا “اسمبلی” در واقع فرق خاصی با زبان ماشین نداره. توی زبان اسمبلی برای هر الگوی 0 و 1 که در زبان ماشین وجود داره, به صورت سمبولیک یه اسم در نظر گرفته شده تا به جای اینکه بخوایم با اعداد کار کنیم, بتونیم از اسمِ حرفی اون ها استفاده کنید. مثلا کد اسمبلی زیر معادل دستور زبان ماشینی هست که بالاتر مثال زدیم:

MOV AL, 61H

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

بعد ها زبان های مناسب تری هم مثل Fortran یا Cobol به وجود اومدن ولی هیچ کدوم نتونستن نقش اسمبلی رو کمرنگ کنن چون فلسفه ی متفاوتی داشتن. فلسفه ی اسمبلی این بود که جایگزین زبان ماشین بشه. یعنی سرعت بالایی داشته باشه و دست برنامه نویس در کارهای سیستمی کاملا باز باشه. در واقع توی اون زمان اغلب برنامه نویس ها یه همچین زبانی رو می خواستن. منظورم اینه که اون موقع کسی تو خوابش هم نمی دید که یه موقعی یه برنامه مثل فتوشاپ ساخته بشه. اون موقع دوره ایی بود که برنامه نویس ها فکر و ذکرشون ساختن سیستم عامل ها و کامپایلر ها شده بود.

و اما C چجوری قاطی بازی بزرگان شد…

– در اواسط دهه ی 50 میلادی, یک زبان فوق الآده از پایه ساخته شد به اسم ALGOL که حتی امروز هم رد پاش رو توی بعضی از زبان های برنامه نویسی میبینید مخصوصا Pascal و C.

– اوایل دهه ی 60 میلادی یه زبان دیگه ایی از روی این زبان ساخته شد به اسم CPL

– در اواسط دهه ی 60 میلادی این زبان توسط Martin Richards ساده سازی شد و زبان BCPL به وجود اومد.

– در اواخر دهه ی 60 میلادی Ken Thompson همین زبان BCPL رو ساده تر کرد و زبان برنامه نویسی B رو به وجود آورد. Ken Thompson به همراه  Brian Kernighan و Dennis Ritchie از پدیدآورندگان اولیه سیستم یونیکس هستن. جدید ترین کار Ken Thompson کمک به طراحی زبان برنامه نویسی جدید گوگل یعنی Go هستش.

– در اوایل دهه ی 70 هم Dennis Ritchie یه سری قابلیت به زبان B اضافه کرد, یه سری هم ازش کم کرد, در آخر هم یه مقداری تغییرات دیگه توش صورت داد و اینطوری شد که زبان برنامه نویسی معروف C به دنیا اومد.

فلسفه ی C این بود که ساده باشه, کوچیک باشه, سریع باشه, و بتونه به جای زبان اسمبلی برای کارهای سیستمی جایگزین بشه. در پایان کار زبانی به وجود اومد که برای برنامه نویس های اون زمان, اینقدر خوب بود که تیم Dennis Ritchie و رفقاش تصمیم گرفتن از همون ابتدای کار, سیستم عامل یونیکس رو که توی ورژن های اولیه با اسمبلی نوشته بودن رو با C بازنویسی کنن.

اون موقع این یه حرکت انقلا بی بود. کی جرات کرده بود که یه سیستم عامل رو با چیزی به غیر از زبان اسمبلی بنویسه؟

این زبان تازه وارد مگه چه خصوصیاتی داشت که تونست برای اولین بار جایگزین اسمبلی بشه؟

Dennis Ritchie و رفقاش دیونه شده بودن که یه سیستم عامل رو با C نوشتن؟ اونم چه سیستم عاملی, یونیکس!

اما واقعیت خیلی ساده, خیلی روان, و شاید هم تلخ بود :     C واقعا به همین اندازه خوب بود!

 

C از لحاظ تکنیکی اونقدر سطح پایین بود که فقط یک پله تا اسمبلی فاصله داشت. و از لحاظ راحتی در کدنویسی هم اونقدر راحت بود که تو زمان خودش همه ی زبان های برنامه نویسی رو چندین پله عقب انداخته بود.از همه مهمتر, C چیزی داشت که خیلی ها اونموقع دنبالش بودن: برنامه های نوشته شده با C مستقل از پلتفرم بودن. برای کسایی که با زبان ماشین و اسمبلی برنامه نویسی میکردن, شنیدن این قضیه باعث میشد که دهنشون واسه چند ثانیه باز بمونه!

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

حالا همه ی این مسایل یه طرف, خود سیستم عامل یونیکس یه طرف دیگه. چون یونیکس داشت نقش “پیام بازرگانی” رو برای زبان C بازی میکرد. یونیکس همه جا بود. یونیکس کارآمد بود. یونیکس سریع بود. و  سیستم عامل های مختلفی هم بر مبنای اون ساخته میشدن و هر چی این سیستم قارچ گونه پیشرفت میکرد C هم به تناسب اون جلوتر میرفت.

در واقع شاید بشه صنعت نرم افزارهای کامپیوتری رو به دو محدوده ی زمانی “قبل از C” و “بعد از C” دسته بندی کرد!

 

از شانس خوب C, دوران طلایی این زبان مصادف شد با دوران طلایی وارد شدن تکنولوژی به زندگی روزمره ی مردم. میشه گفت C خوش شانس ترین زبانیه که تا الآن ساخته شده. از اواسط دهه ی 80 تا اواسط دهه ی 90 به طور غیر قابل انتظاری کامپیوتر ها به خونه ها راه پیدا کردن. این مساله باعث که نیاز به داشتن برنامه های مختلف زیاد تر بشه. سازمان ها و برنامه نویس ها باید خودشون رو با این روند ناگهانی مطابقت می دادن. برای همین شروع به کار شدن. هر روز شرکت های مختلف نرم افزاری جدید تاسیس میشد…. احتمالا خودتون حدس زدید که چی می خوام بگم. زبان برنامه نویسی محبوب برنامه نویس های اون زمان چی بود؟ خوب معلومه C

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

– سیستم های مبتنی بر یونیکس زیاد تر شدن.

– برنامه کاربردی مختلف با C نوشته شدن.

– کامپایلر های زیادی با این زبان نوشته شدن.

– تولد ++C بر عکس چیزی همه فکر میکردن تبدیل شد به بزرگترین عامل محبوبیت C

– لینوکس وارد میدون شد و همه می دونن که با C نوشته شده.

– زبان های داینامیک و اسکریپتی مثل قارچ رشد کردن و تقریبا همشون با C نوشته شده بودن.

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

تقریبا هر جهت گیری ایی که در دنیای کامپیوتر صورت گرفت ردپای C اون گوشه موشه ها دیده میشه.

بزارید برای ویژگی های اصلی C براتون مثال هایی بزنم تا ذهنتون باز تر بشه.

سرعت:

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

قدرت:

همین که C تونست اسمبلی رو از دور خارج کنه بس نیست؟ همین که بدونید یونیکس و لینوکس با C نوسته شدن کافی نیست؟ براتون جالب نیست که بدونید خیلی از سازندگان کامپایلر در حال حاظر حتی خود زبان C و حتی ++C رو با C توسعه میدن؟ می دونستید پرل و پی اچ پی و پایتون و ده ها زبان دیگه با C نوشته شده؟

کوچک بودن:

توی تلوزیون, توی ماشین, توی گوشی ایی که تو جیبتونه, و توی خیلی چیزهای دیگه (برداشت بد نکنید منظورم دستگاه های الکترونیکی هستش) برنامه هایی وجود دارن که با C نوشته شدن. چون C فوق الآده کوچیکه. دلیلش هم اینه که وقتی C به وجود اومد داشتن یک رم 20 مگابایتی جزو افسانه هایی بود که بعضی ها قبل خواب برای بچه هاشون تعریف میکردن پس مجبور بودن C رو تا حد ممکن کوچیک طراحی کنن.

ممکنه این سوال واستون پیش بیاد که چرا ++C نتونست C رو کنار بزنه. این قضیه دلایل خیلی واضحی داره:

– ++C اصلا قصد کنار زدن C رو نداشت. در واقع می خواست C رو بهتر کنه که خوب مسلما باعث میشه کاربرای بیشتری بهش رو بیارن.

– هر برنامه ایی که شما در C مینویسید با ++C کامپایل میشه. در واقع کد C کد قابل قبولی برای ++C هستش چون ++C زبان C رو به عنوان زیر مجموعه ی خودش پیاده سازی کرده.

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

– زبان ++C قابلیت هایی رو به C اضافه کرده. مثلا اضافه شدن شی گرایی یا namespace ها. شما ممکنه توی همه ی برنامه ها  به این ویژگی های جدید نیازی نداشته باشید. کسی که نمی خواد از این ویژگی ها استفاده کنه مگه خنگه که بخواد با ++C کد بنویسه؟ مثله بچه آدم میره با خود C کد میزنه. فقط کسایی که واقعا نیاز به این قابلیت های جدید دارن ترجیح میدن با ++C کد بنویسن.

– اضافه کردن این قابلیت ها برای ++C بدون خرج نبوده. مثلا برنامه نویسی شی گرا به علت سیستمی که داره مسلما منابع سخت افزاری بیشتری از یه برنامه ی ساده ی تابعی لازم داره. برنامه نویس های ++C کاملا متوجه هستن که در قبال استفاده کردن از قابلیت های جدید باید جور این مسایل رو هم بکشن.

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

در آخر هم اینکه خِیر سَرَم امیدوارم این مقاله تا حدودی شما رو متوجه کرده باشه که چرا هنوز هم C جزو محبوب ترین زبان های برنامه نویسی هستش. جالب اینه که هر روز که میگذره بر خلاف چیزی که توقع داریم ابزارهای این زبان داره بیشتر میشه. نمونش میتونه +GTK باشه که باعث شده C توی برنامه نویسی GUI هم جزو زبان هایی باشه که حرف اول رو میزنه.


طراحي نرم افزار ، برون سپاری نرم افزار، انجام نرم افزارهای سفارشی ،ارائه راهكارهاي توليد محتواي تحت وب , انجام پروژه در زمينه هاي تجارت الكترونيك و فناوري اطلاعات , طراحی وبسایت ، طراحی پرتال سازمان ،انجام مطالعات بازار، تهيه طرح هاي توجيهي و مطالعات امكان سنجي ،ارائه مشاوره در زمينه هاي سيستم هاي مديريت زنجيره ي تامين و مديريت كيفيت | چرا زبان برنامه نویسی C هنوز محبوبیت داره؟ | تعداد بازدید 769
3-7-1389