مجله الکترونيکي کامپيوترورد با مخترع ++C، بييارنه استراستروپ (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 همراه با كلاس از آن استفاده شد.
اگر الان شانس اين را داشتيد که ++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 استاندارد 98 هيچ راه سادهاي براي تعريف يک تمپليت پيشپاي برنامهنويس نميگذارد. اين يکي از ضعفهاي اين زبان است، نه کامپايلر آن! و فقط با تغيير زبان ميشود آن را درست کرد که قرار است بخشي از C++0x (استاندارد جديد C++ C باشد).
در آخر چيز ديگري هست که بخواهيد اضافه کنيد؟
بله من فکر ميکنم که ما بايد هنر انتقال مفاهيم پايهاي ++ C را هم داشته باشيم. بسيار سخت است که بخواهيم از نظر فني برنامه را توسعه بدهيم، اما به برنامهنويسان نگوييم که قابليتهاي فني آن چيست. از طرف ديگر، خود ويژگيهاي زباني کسلکنندهاند. برنامهنويسان بايد خودشان با ترکيب ويژگيهاي پايه، به ويژگي جامعتري برسند و اين نيازمند زمان است.
اخيرا من از صنعت خارج شدم و به سمت دانشگاهيشدن پيش رفتهام و حالا مشکلات تحصيلي را از زواياي مختلف درک ميکنم. ما بايد سطح سواد توسعهدهندگان نرمافزارمان را بالا ببريم. طي سه سال گذشته، شيوه جديد تدريس براي سال اوليها طراحي کردم و نتيجه آن کتابي شده است با عنوان برنامهنويسي، مفاهيم و تمارين با استفاده از ++ C.