سلام برو بچ چطورید خوبید؟😍 من بازم برگشتم با قسمت سوم از فصل 0 دوره آموزش سی پلاس پلاس از سایت learncpp.com همونطور که قبلا گفتم این فصل برای تمامی برنامه نویس ها و کسایی که میخوان برنامه نویس بشن توصیه میشه چون اطلاعات خیلی خوبی رو از کامپایلر ، مفسر ، پایه های حوزه برنامه نویسی و کامپیوتر و .... رو درون خودش جای داده ، اما خب نوبتی هم باشه نوبت بحث و گفتگو در مورد C و ++C هست 😍👍 بزنید بریم :
قبل از ++C یه C بود!
زبان C در سال 1972 توسط دنیس ریچی در آزمایشگاه تلفن بل (اسم آزمایشگاست!) در درجه اول به عنوان یک زبان سیستمی (برای ساخت سیستم عامل ها) ساخته و توسعه داده شد . هدف اولیه ریچی از ساخت C این بود که یک زبان مینیمالیستیک باشه که اول از همه به راحتی کامپایل بشه ،دوم : بتونیم باهاش به صورت مستقیم و موثر به مموری دسترسی داشته باشیم ، سوم : بعد از کامپایل، کدِ موثر و کارایی (بدرد بخور اینجوری بخونید این کلمه رو : کاراااااایی) رو تولید کنه و همینطور برای اجرا، خود کفا باشه و نیازی به برنامه های دیگه نداشته باشه . C به عنوان یک زبان سطح بالا طوری طراحی شده بود که به برنامه نویس ها، سطح بالایی از کنترل رو هدیه بده ، این در حالی بود که به استقلال پلتفرم ها (کل سخت افزار و سیستم عامل رو با هم یه پلتفرم میگیم) احترام میگذاشت (منظورش اینه که نیاز نبود دیگه برای هر پلتفرمی از دوباره سعی کنیم که کد رو بنویسیم).
C بلاخره در سال 1973 اونقدر کارامد و منعطف بود، که ریچی و تامپسون توانستند بیشتر بخش های سیستم عامل یونیکس رو با اون بازنویسی کنند ، اون زمان خیلی از سیستم عامل ها با اسمبلی نوشته شده بودند ، برخلاف اسمبلی که برنامه های نوشته شده با اون فقط مختص CPU های خاصی هستند ، C به طرز خارقالعاده ای پرتابل (یا قابل حمل، portable) هست، و به یونیکس (یونیکسِ جدید همونی که با C بیشتر بخش هاش بازنویسی شد) این اجازه رو میده که به راحتی روی انواع کامپیوتر ها ریکامپایل (از دوباره کامپایل کردن رو بهش میگیم ریکامپایل) بشه. سرنوشت C و UNIX به هم گره خورده و بخش اعظمی از محبوبیت C به خاطر موفقیت UNIX به عنوان یک سیستم عامل بوده و هست !
در سال 1978 ، برایان کرنیگان و دنیس ریچی کتابی را با عنوان "زبان برنامه نویسیه سی" (The C Programming Language) منتشر کردند . این کتاب که عموما به نام K&R (اول فامیلی نویسندگان کتاب) شناخته میشه. یک سری مشخصات بی قاعده (غیر رسمی) رو برای زبان سی درون خودش جای داده بوده که همین باعث شد تا تبدیل به یک استاندارد بشه! و زمانی که قابل حمل بودن یک برنامه امری بسیار ضروری بود ، برنامه نویس ها به پیشنهادات و راه حل های این کتاب رجوع میکردند؛ اونم به این خاطر که در اون زمان بسیاری از کامپایلر ها تحت این استاندارد (K&R) اجرا میشدند.
در سال 1983 موسسه ملی استاندارد های آمریکا (ANSI=American National Standards Institute) یک کمیته برای ایجاد یک استاندارد رسمی برای زبان C تشکیل داد. در سال 1989 (کمیته ها کلا همیشه و در همه جا لاک پشتی کار میکنند و کلی طولش میدن) بلاخره کارشون تموم شد و استاندارد C89 رو بیرون دادند که عموما بهش ANSI C (بخونید : اِی اِن اِس آی سی ولی خودِ آمریکایی ها میگن اَنسی سی) هم گفته میشه. در سال 1990 سازمان بین المللی استاندارد سازی (ISO = International Organization for Standardization) ANSI C (سی 89 یا C89) رو (با یکم تغییر جزئی) پذیرفت ، این ورژن از C به C90 مشهور شد . و کامپایلر ها بلاخره با این ورژن یعنی ANSI C/C90 سازگار شدن و برنامه هایی که قابل-حمل-بودن (PORTABILITY) براشون خیلی خیلی مهم بود با این استاندارد کد نویسی شدند.
در سال 1999 ، کمیته ANSI (همون کمیته که واسه C ساختند) اومدند و یه ورژن دیگه از C رو بیرون دادند به اسم C99 ، این ورژن از C تمامی ویژگی هایی که قبلا به کامپایلر ها به عنوان افزونه و پسوند راه یافته بودند یا این که در ++C اجرا و پیاده سازی شده بودند رو به کار گرفت.
سی پلاس پلاس (++C)
خب و اما بریم سراغ عشقِ ما یعنی ++C و ببینیم اصلا قضیه و تاریخچه این زبان چیه؟
++C (که به صورت سی پلاس پلاس تلفظ میشه) توسط بیارنه استراستوروپ (Bjarne Stroustrup) در اوایل سال 1979 در همون آزمایشگاه تلفن بِل ساخته و توسعه داده شد ، اونم به عنوان چی؟ به عنوان یه افزونه برای زبان C.
++C قصه ما ویژگی های جدید زیادی رو به زبان C اضاف کرد و شاید بهترین ایده این باشه که به عنوان یه ابرمجموعه ی خفن از C در نظرش بگیریم، هر چند که اگر بخوایم خیلی عمیق بشیم و تفاوت های این دوتا زبان رو عمیقا بررسی کنیم باید بگم این اشتباست که اون رو یه ابرمجموعه از زبان سی در نظر بگیریم چرا که در ورژن C99 یه تعداد ویژگی وجود دارند که در ++C وجود نداره.
اما دلایل مشهور شدن ++C اصولا از این حقیقت نشات میگیره که این زبان ، یک زبانِ شی گرا (Object Oriented Language بخونید : آبجِکت اُری.یِنتِد لَنگّو.اِج) هست !
حالا این که کلمه شی در اصطلاحِ شی گرایی یعنی چی رو بعدا با هم سرش بحث میکنیم و در مورد تفاوتش با شیوه های ی سنتی برنامه نویسی صحبت میکنیم و خلاصه قراره کلی اختلاط کنیم (البته تو چپتر ها و فصل های بعد ، فعلا تو فصل 0 بیدیم 😂🤦♂️) !
و اما خب بریم سراغ زمانی که ++C شروع به استاندارد سازی کرد . توی سال 1998 ++C توسط کمیته استاندارد ها، آی اس ـُ (ISO committee) استاندارد سازی شد (منظور از استاندارد سازی اینه که مثلا کمیته ISO اومد شروع کرد به ساخت یه داکیومنت [Document] برای این که در وهله اول بتونه زبان سی پلاس پلاس رو توصیف کنه و بگه اصلا چطوریه و چجوری کار میکنه و قوانینش رو بگه و بعدش هم واسه این که مطمعن بشن که همه کامپایلر ها برای کامپایل کد های ++C از یه استاندارد پیروی می کنند!). بعد از اون توی سال 2003 یه آپدیت ریزه میزه داشتیم از زبان ++C که بعد از پخش شدن و عمومی شدنش معروف شد به 03++C (باید یه نکته ای رو همینجا از زبون خودم بهتون بگم کلا قضیه این اسما اینه که اگر مثلا ++C تو سال 2045 یه آپدیتی بده بیرون بهش میگن ورژن 45++C گرفتید؟ ته سال رو برمیدارن ! پس اگر دیدید یه جا نوشته شده بود 11++C منظور استاندارد ++C ای هست که تو سال 2011 آپدیت شده و بیرون داده شده تا بقیه ازش استفاده کنن !)
از اون موقع (سال 2003) به بعد تا الان 4 تا آپدیت دهن پرکنِ خفن و پر پیمون داشتیم که بهشون به ترتیب سالی که اومدن میگیم :
- 11++C
- 14++C
- 17++C
- 20++C
و داخل هر کدوم از 4 تا به نسبت قبلی فانکشنَلیتیه بیشتری داشتیم (منظورم اینه که هر کدوم به نسبت قبلی کارای خفن تری میشد باهاش بکنی مثلا ممکن بود توی ورژن 11 مجبور بودی برای یه کار 10 خط کد بنویسی ولی توی ورژن مثلا 14 میومدن اونو برات اوکی میکردن و یه متود یا فانکشن میزاشتن که راحت ازش استفاده کنی و دیگه درگیر الگوریتم نویسی برای اون کار نباشی!) . و مخصوصا این کار رو 11++C خیلی خوب انجام داد یعنی مقدار زیادی از قابلیت های ++C امروزی رو مدیون 11++C هستیم ، آخه کلی ویژگی خفن بهش اضاف کرد و کلی کارایی ++C رو بالا برد.
و اما بریم سراغ بروز رسانی هایی که در آینده از این زبان قراره ببینیم فعلا که باید بگم الان استارت ورژن 23++C خورده که امیدواریم تو سال 2023 بیاد که 100 درصد میاد (بگید جونززز 😍🔥💦) و در رابطه با این سوال که هر چند سال یک بار آپگرید میدن؟ باید بگم به طور متوسط تا الان که هر سه سال یک بار بوده 11 بعد 14 بعد 17 بعد 20 الانم که 23 فکر میکنم در آینده هم به همین روال باشه اگرم نباشه تهش یکی دو سال تاخیر داشته باشه دیگه ! ولی خداییش الان خیلی منظم هستند و هر سه سال دارن یه چیز خفن تر میدن بیرون !
و اما نوبتی هم باشه نوبت اینه که یکم زبان تخصصیمون رو قوی کنیم و اونم چند تا اصطلاح هست که میخوام بهتون یاد بدم !
در واقعا توی هر زبانی هر ورژنی از اون زبان که به صورت رسمییی پخش میشه و بیرون میاد رو بهش میگیم (Language Standard یا Language Specification بخونید : لَنگّو.اِج اِسپِسیفیکیشِن). پس از این به بعد این دو کلمه رو دیدید بدونید که منظور ورژن جدید یا استاندارد جدید اون زبانه 😍
فلسفه زبان C و ++C
خب نوبتی هم باشه نوبت فلسفه این دو زبانه ، ناسلامتی داریم در مورد تاریخچه حرف میزنیم مگه میشه از فلسفه اش نگیم 🥺☝
در واقع فلسفه ای که پشت ساخت و طراحی این دو زبان هست رو میتونیم در این عبارت خلاصه کنیم : اعتماد به برنامه نویس !
که این عبارت هم میتونه خفنننننن و جذاب باشه و هم خطر ناک، حالا چرا؟ یکم دندون رو جیگر بزارید میگم 🥺
قضیه اینه که ++C ساخته شد تا به برنامه نویس یه آزادی بی حد و مرز بده تا بتونن هر کاری که عشقشون میکشه رو انجام بدن !
اما همین قضیه یه مشکلی ایجاد میکنه ، و اونم اینه که این زبان عموما شما رو از انجام کارایی که با عقل جور در نمیاد باز نمیداره به این خاطر که زبان فکر میکنه که شما اون کارا رو بنا به دلایلی انجام دادید که نمیتونه درکش کنه ! (به زبان ساده بخوام بگم ، زبان این آزادی عمل رو به شما میده که هر کاری دوست دارید بکنید حالا اگر این وسط یه کاری بکنید که اصلا با عقل جور در نمیاد عموما زبان باهاش مشکلی نداره چون فکر میکنه که این کاری که کردید حتما دلیلی داشته که اون توانایی درک دلیلیش رو نداره و نمیفهمه چرا ولی در کل حق با شماست ! به عبارتی فلسفه اصلی ++C کم و بیش اینه : همیشه حق با برنامه نویسه !)
و این قضیه باعث شده که در روند یادگیری این زبان به کلی دام بربخورید که اتفاقا دام های رایجی هم هستند ، حالا این وسط قبل از ادامه ماجرا بگم که انگلیسی زبون ها به این دام های رایج توی زبان انگلیسی و مبحث برنامه نویسی میگن Pitfalls (بخوانید : پیت فالز) ، پس به طور کلی برنامه نویس های تازه کار ممکنه به خاطر نداشتن آگاهی و شناخت کامل از زبان، توی این دام های رایج بیوفتند ، که همین دلیل اصلی ای هست که دونستن این که چه کارهایی نباید توی زبان C++/C بکنید به همون اندازه مهمه که باید بدونید چه کارهایی باید بکنید! (به زبان ساده تر؛ دونستن باید ها و نباید ها در سی پلاس پلاس و زبان سی بی اندازه مهمه و چه بسا اهمیتشون به یک اندازه هست !)
دوتا سوال رایج :
و اما در آخر بریم سراغ دوتا سوال رایج در مورد این دوره آموزشی و همینطور خود زبان ++C/C .
سوال : ++C به چه دردی میخوره؟
سی پلاس پلاس زبونی هست که خب اول باید بگم خیلی قدرتمند و بی اندازه سریعه از این رو زمانی که کارایی و پرفورمَنس بالا و کنترل خوب روی مموری و باقی سخت افزار ها و منابع دیتا و اینا مهم و نیاز باشه از سی پلاس پلاس استفاده می کنیم که اینجا براتون چند تا از انواع اپلیکیشن هایی که عموما با سی پلاس پلاس ساخته میشن رو اوردم (نکته حائز اهمیت اینه که اینا فقط بخش خیلی خیلی کوچیکی از انواع اپلیکیشن هایی هست که میشه با ++C ساخت اصل قضیه اینه که همه کار میتونید باهاش بکنید هر کارییییییییییییییییی که فکر میکنی رو میشه باهاش کرد).
- بازی
- سیستم های ریل-تایم (مثلا برای مَنیوفَکچِرینگ ، تِرَنسپورتِیشن و ...)
- اپلیکیشن های مالی (مثل اپلیکیشن های تریدینگ و اینا)
- اپلیکیشن های گرافیکی و شبیه سازی و کلا اپلیکیشن های سیمولینکی که در حوزه مهندسی و ساینس(علوم پایه) خیلی کاربرد دارند
- اپلیکیشن های آفیس
- نرم افزار های تعبیه شده یا همون Embeded Software
- اپلیکیشن های پردازش تصویر و ویدیو و صدا و از این قبیل چیزا
- هوش مصنوعی و شبکه های عصبی و اینجور چیزا (در این مورد یه نکته بگم خیلی ها فکر میکنن فقط پایتون به درد هوش مصنوعی میخوره قضیه اینه که ++C هم یه زبانیه که کاملا به درد ساینس میخوره منتها فرق اساسیش با پایتون اینه که برای این که یه برنامه خوب با ++C بسازیم باید واقعا برنامه نویسی رو درک کرده باشیم، چون که واقعا نیاز هست تا بفهمیم داریم چی کار میکنیم و چی کار نباید بکنیم و چرا ! و این چرا ها خیلی مهمه ، به همین خاطر اصولا پایتون برای این کار ساده تره البته در سطوح متفاوتی این دو کاربرد های خودشون رو دارند ولی به طور کل شما میتونی یه هوش مصنوعی رو از 0 تا 100 با ++C بسازید!)
آیا نیازه که قبل از این که این دوره رو ببینم زبان C رو بلد باشم؟
خیر به هیچ وجه ! هیچ مشکلی نیست که اول با ++C شروع کنید و من هر چیزی که نیاز باشه بدونید رو بهتون توی این آموزش ها میگم (که شامل دام های رایج هم میشه) .
و وقتی که شما ++C رو بدونید یادگیری هر زبان دیگه ای از جمله زبان C خیلی براتون اسون میشه اونم حتی اگرررررر نیاز باشه یادش بگیرید !
تبریک میگم و ازتون ممنونم که به آخر این مقاله اومدید ، من فرهان هستم و خیلی خیلی خیلی خوشبختم😍😍، مرسی که هستید و امیدوارم لذت برده باشید ! لینکی که اول هر مقاله هست بخش پادکست اون مقالست ، سعی کردم که برای هر مقاله یک پادکست داشته باشیم تا بتونید موضوعات رو بهتر درک کنید و این کار رو به این خاطر میکنم که مشکلی در خواندن درست مقالات نداشته باشید ، این مقاله آموزشی، ترجمه ی اولین درس فصل صفرم سایت learncpp.com هستش که لینک این مطلب رو براتون میزارم : برای رفتن به منبع این مقاله کلیک کنید
خوشحال میشم نظرتون رو در مورد ترجمه بدونم و این که این اولین تجربه ی ترجمه من هست 💗 و این که تا درودی دیگر بدرود.
-فرهان