تاریخچه ی زبان سی پلاس پلاس (c++)

تاریخچه زبان c++سی پلاس پلاس یک زبان میانی است که توسط استراس‌تروپ ساخته شده است.زبان سی پلاس پلاس در سال ۱۹۸۳ پا به عرصه گذاشت.استانداردسازی ++C توسط یک گروه از تشکیلات ISO انجام می‌شود. تاکنون ۶ نسخه از استاندارد این زبان منتشر شده‌است؛ و استاندارد C++20 نیز برای انتشار در سال ۲۰۲۰ برنامه‌ریزی شده‌است.نام سی پلاس پلاس (c++)این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳) است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر هنوز هم C++ به عنوان ابرساختار C شناخته می‌شود. آخرین نام از عملگر ++ در زبان C (که برای افزایش مقدار متغیر به اندازهٔ یک واحد بکار می‌رود) و یک عرف معمول برای نشان دادن افزایش قابلیت‌ها توسط + ناشی گشته‌است. با توجه به نقل قولی از استراس‌تروپ: «این نام ویژگی‌ها تکاملی زبان در C را نشان می‌دهد.» +C نام زبانی غیرمرتبط به این زبان است.استراس‌تروپ مبدأ این نام را در فصل اول کتاب خود «زبان برنامه‌نویسی C++» اشاره می‌نماید که معنی دیگر C++ را می‌توان در ضمائم کتاب جرج ارول بنام ۱۹۸۴ یافت. در سه قسمت از زبان تخیلی Newspeak «کلمات C» برای اشاره به لغات فنی و حرفه‌ای بکار می‌رود. «دو علامت +» برای ایجاد صفات عالی از صفات Newspeak به کار می‌رفت بنابراین C++ به معنای زبانی با بیشترین شباهت به C است.فلسفه در کتاب «طراحی و تکامل C++» استراستروپ قوانین مورد استفاده در طراحی C++ را بیان می‌نماید. دانستن این قوانین به فهمیدن نحوه عملکرد C++ و چرایی آن کمک می‌کند. جزئیات بیشتر در کتاب قابل دسترسی است: طراحی شده‌است تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد. طراحی شده‌است تا مستقیماً و به صورت جامع از چندین شیوه برنامه‌نویسی بتوان از آن استفاده کرد (برنامه‌نویسی ساخت‌یافته، برنامه‌نویسی شی‌گرا، انتزاع داده، و برنامه‌نویسی جنریک). طراحی شده‌است تا به برنامه‌نویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد. طراحی شده‌است تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد. از بکاربردن ویژگی‌های خاص که مانع از عمومی شدن است خودداری می‌نماید. از ویژگی‌هایی که بکار برده نمی‌شوند استفاده نمی‌کند. طراحی شده‌است تا بدون یک محیط پیچیده عمل نماید.کتاب خانه استاندارد در سال ۱۹۹۸ استاندارد C++ شامل دو بخش هسته زبان و کتابخانه استاندارد سی++ است. این کتابخانه شامل بیشتر بخش‌های STL و کتابخانه استاندارد C است. بیشتر کتابخانه‌های C++ در استاندارد وجود ندارند یا استفاده از تعریف قابلیت پیوند کتابخانه‌ها را می‌توان در زبان‌هایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگی‌های کامپایلر مشخص خواهد شد که کدام زبان را می‌توان استفاده نمود.کتابخانه استاندارد سی++ شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگه‌دارنده‌ها (مانند vector و list)، تکرارکننده‌ها (اشاره‌گرهای عمومی شده) برای شبیه‌سازی دسترسی مانند آرایه الگوریتم‌هایی برای جستجو و مرتب‌سازی در آن‌ها وجود دارند. نقشه‌ها (نقشه‌های چندگانه) (آرایه شرکت‌پذیر) و مجموعه‌ها (مجموعه‌های چندگانه) واسط‌های عمومی فراهم می‌سازند. در نتیجه با استفاده از قالب تابع، الگوریتم‌های جنریک با هر نگه‌دارنده و دارای تکرارکننده عمل نماید. همانند C ویژگی‌های کتابخانه را می‌توان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. c دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آن‌ها نامناسب تشخیص داده شده‌اند.استفاده از کتابخانه استاندارد - مانند std::vector یا std::string به جای آرایه‌های C- موجب ایجاد برنامه‌های مطمئن‌تر شده‌است.STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد C++ بوده‌است. استاندارد عبارت STL را بکار نمی‌برد بلکه آن را بخشی از کتابخانه می‌داند اما مردم هنوز هم آن را برای جداسازی بخش‌های مختلف کتابخانه با این نام بکار می‌برند. (جریان‌های ورودی/خروجی، جهانی‌سازی، تشخیص، زیرمجموعه کتابخانه C)بیشتر کامپایلرها کتابخانه استاندارد و STL را پیاده‌سازی می‌نماید. پیاده‌سازی‌های مستقلی نیز همانند STLport نیر وجود دارند. پروژه‌های دیگر نیز پیاده‌سازی‌های خود را از STL با توجه به اهداف خود به وجود می‌آورند.ویژگی های معرفی شده در C++در مقایسه با C زبان C++ ویژگی‌های جدیدی را معرفی نموده‌است مانند تعریف متغیر به عنوان عبارت، تغییر نوع‌های همانند تابع، نو/حذف، نوع داده bool، توابع درون‌خطی، آرگومان پیشفرض، گرانبارسازی عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاس‌ها (شامل تمام ویژگی‌های مربوط به کلاس‌ها همانند وراثت، اعضای تابع، توابع مجازی، کلاس‌های انتزاعی، و سازنده‌ها)، قالب‌ها، پردازش استثناء، کنترل نوع زمان اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>).برخلاف باور عموم C++ نوع داده ثابت را معرفی ننموده‌است. کلمه const کمی پیش از استفاده از این کلمه در C++ توسط زبان C به صورت رسمی بکار گرفته شد.در بعضی حالات C++ تعداد کنترل نوع بیشتری نسبت به زبان C انجام می‌دهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را در پایین ببینید)توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان C++ به کار گرفته شد.بعضی ویژگی‌های C++ بعداً توسط C به کار گرفته شد مانند نحوه تعریف for، توضیحات به شکل C++ (با استفاده از //)، و کلمه inline با وجود اینکه تعریف این کلمه در C با تعریف آن در زبان C++ هماهنگی ندارد. همچنین در C ویژگی‌هایی معرفی شده‌است که در C++ وجود ندارند مانند ماکروهای قابل تغییر و استفاده بهتر از آرایه‌ها به عنوان آرگومان. بعضی کامپایلرها این ویژگی‌ها را پیاده نموده‌اند اما در بقیه این ویژگی‌ها موجب ناهماهنگی می‌گردد.