10 سوال اساسی در مورد زبان ++C
مجله الکترونیکی کامپیوترورلد با مخترع ++ C، بیارن استراستروپ (Bjarne Stroustrup) مصاحبه‌ای انجام داده که تقریبا تمام جوانب این زبان برنامه‌نویسی را از دید سازنده آن بررسی کرده است، از میان این مصاحبه طولانی، چند سوال را انتخاب کردیم که دانستن آنها در مورد این زبان برنامه‌نویسی محبوب خالی از لطف نیست .
Bjarne Stroustrup

چه کسی++ C را شروع کرد؟
من به دنبال ابزاری بودم که بتوانم نگارش توزیع‌شده از هسته یونیکس را طراحی و پیاده‌سازی کنم. در آن سال (1979) چنین چیزی وجود نداشت. به ابزاری نیاز داشتم که می‌توانست ساختار یک برنامه را بیان کند و مستقیما با سخت‌افزار سرو کار داشته باشد و به‌درد برنامه‌نویسی‌های اساسی و جدی سیستم بخورد. 

 نام++ C از کجا آمده است؟
ابتدای کار، اسمش C with Classes بود. بسیاری نمی‌توانستند آن را تلفظ کنند و کم‌کم به اسم C معروف شد. اما گویا متوجه نبودند که C صدا زدن این برنامه یعنی اشاره کردن به برنامه دنیس ریچی () نه برنامه من، برای همین اسم‌های مختلفی برای زبان‌ها گذاشتند. سی‌ قدیم، سی بهتر، و چنین چیزهایی... تا این‌که یک روز از طرف آزمایشگاه‌های بل (Bell Labs) برای من نامه آمد که یک اسم درست و حسابی برای این زبان انتخاب کنیم که ما آن موقع به C++ بسنده کردیم. انتخاب زیادی نداشتیم، یک لیست بود که به ما دادند و من از میان آنها همین را انتخاب کردم. البته بیشتر موافق بودند که ++C را انتخاب کنیم، اما به نظر من تلفظش دیگر بسیار سخت می‌شد. 

تا به حال به موانع یامشکلاتی برخورده‌اید که توسعه زبان را به خطر بیاندازد؟
تا دل‌تان بخواهد! قوانین اصلی طراحی برنامه چیست؟ چه چیزی باید در زبان باشد و چه چیز نباید باشد؟ اغلب مردم به‌دنبال زبانی می‌گردند که بسیار کوچک باشد و در عین حال تمام امکاناتی که آنها به‌دنبالش هستند را هم در خود داشته باشد، خب این غیرممکن است. 

بعد از مدت کوتاهی که به شانس و اقبال اکتفا کرده بودم، بالاخره به این نتیجه رسیدم که باید به قانونی مشخص برسم. زبانی که در آن واحد هم پایدار باشد و هم برای برنامه‌نویسی سیستم (همچون زبان C) مناسب باشد. واضح است که هیچ برنامه‌ای نمی‌تواند هر دو را به‌طور کامل داشته باشد. اما هدف C++ این بود، حالا چقدر به آن نزدیک شدیم، بعدا مشخص شد.

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

اگر الان شانس این را داشتید که C++ را دوباره اختراع کنید، کدام بخش آن را تغییر می‌دادید؟
- عجب سوال کلیشه‌ای پرسیدید، آن موقع خب معلوم است که 30 سال تجربه کار با++ C را نداشتم و آن موقع، تنها منبعی که می‌شد برای++ C به او مراجعه کرد، خودم بودم که تازه آن هم تمام وقت نبود. اما در بهترین حالت، دوست داشتم که توابع مجازی، Templateها و استثناها را اگر در سال 85 پیاده می‌کردم،++ Cزبان بسیار بهتری از آب در می‌آمد. 

وقتی در سال 1998،++ C به یک استاندارد بدل شد، چه احساسی داشتید و چه نقشی را در روند استانداردسازی بازی کردید؟
سال‌های زیاد بود که سخت کار می‌کردم (1989 – 1997)، هر چند که الآن دارم روی استاندارد زیرمجموعه‌اش کار می‌کنم. اینکه زبان استانداردی را بخواهی محبوب حفظ کنی، کاری دشوار و وظیفه‌ای سخت است. C++ هیچ پدری ندارد و هیچ کس نیست که برای توسعه‌اش از جیب بزند، کتابخانه‌هایش رایگان هستند و رایگان هم بازاریابی می‌شوند. باز هم دست موسسه ایزو درد نکند که به رشد جامعه C++ کمک کرد و همین رشد باعث شد داوطلبان زیادی از سراسر دنیا داشته باشد. 

جالبترین برنامه‌ای که تا به‌حال دیده‌ای که با++ C نوشته‌اند چیست؟
نمی‌توانم یکی را انتخاب کنم.. بیشتر به سیستم‌های کامل نگاه می‌کنم که بخشی از آنها را با++ C نوشته‌اند. مثلا زیرسیستم خودروهای مریخ‌نشین ناسا، موتور جستجوی گوگل، سیستم رزرو هوایی آمادئوس به ذهنم می‌رسد. اگر فقط بخواهم به کد نگاه کنم، به‌نظرم STL الکساندر استپانو یکی از مفیدترین، موثرترین و جالب‌ترین کدهای++ C بود که تا به‌حال دیده‌ام. 

آیا فکر نمی‌کنی که++ GNU C بهتر است خطاهای طولانی کمتری داشته باشد که دانشجویان نترسند؟
البته، اما واقعا تقصیر کامپایلر گنو نیست. مشکل اصلی اینجاست که C++ استاندارد 98 هیچ راه ساده‌ای برای تعریف یک تمپلیت پیش‌پای برنامه‌نویس نمی‌گذارد. این یکی از ضعف‌های این زبان است، نه کامپایلر آن! و فقط با تغییر زبان می‌شود آن را درست کرد که قرار است بخشی از C++0x (استاندارد جدید C++ باشد).

در آخر چیز دیگری هست که بخواهید اضافه کنید؟
- بله من فکر می‌کنم که ما باید هنر انتقال مفاهیم پایه‌ای++ C را هم داشته باشیم. بسیار سخت است که بخواهیم از نظر فنی برنامه را توسعه بدهیم، اما به برنامه‌نویسان نگوییم که قابلیت‌های فنی آن چیست. از طرف دیگر، خود ویژگی‌های زبانی کسل‌کننده‌اند. برنامه‌نویسان باید خودشان با ترکیب ویژگی‌های پایه، به ویژگی جامع‌تری برسند و این نیازمند زمان است. 

اخیرا من از صنعت خارج شدم و به سمت دانشگاهی‌شدن پیش رفته‌ام و حالا مشکلات تحصیلی را از زوایای مختلف درک می‌کنم. ما باید سطح سواد توسعه‌دهندگان نرم‌افزارمان را بالا ببریم. طی سه سال گذشته، شیوه جدید تدریس برای سال اولی‌ها طراحی کردم و نتیجه آن کتابی شده است با عنوان برنامه‌نویسی، مفاهیم و تمارین با استفاده از++ C.


منبع : جام جم ، ضمیمه کلیک شماره 250

ترجمه از سایت ComputerWorld