صندلی داغ با مخترع ++C

مجله الکترونيکي کامپيوترورد (www.computerworld.com) با مخترع ++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.

منبع: کلیک جام جم