خالق ++C: این زبان را در درجهٔ اول برای خود و همکارانم به‌وجود آوردم!

خالق ++C: این زبان را در درجهٔ اول برای خود و همکارانم به‌وجود آوردم!

زمانی که به برنامه‌نویسی فکر می‌کنیم، یک از اولین زبان‌هایی که به ذهنمان می‌رسد ++C است که شاید دلیلش هم محبوبیت و کاربرد‌های وسیع این زبان برنامه‌نویسی چندمنظوره باشد که در سال ۱۹۸۳ به بازار عرضه شد. از آن زمان تاکنون، زبان‌های مدرن دیگری مانند Python ،Java و غیره منتشر شده‌اند اما چه‌چیزی است که ++C را در دنیای فناوری، گیمینگ و کامپیوتر‌های نسل جدید متمایز و مهم می‌کند؟ Jagmeet Singh در مصاحبه‌ای با خالق این زبان -Bjaene Stroustrup- سعی کرده تا به این سؤال پاسخ دهد.

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

با وجود این‌که زبان C قابلیت دستکاری در سخت‌افزار و زبان Simula، قابلیت کنترل پیچیدگی کد‌ها را داشت، اما هیچ زبانی وجود نداشت که هر دوی این کار‌ها را باهم انجام دهد. بنابراین من شروع به ساخت یک زبان جدید با اضافه کردن کلاس‌های Simula به C کردم.

اولین نسخهٔ ++C را برای چه کسی ساختید؟
من زبانی را برای خودم می‌خواستم تا بتوانم یک سیستم برپایهٔ یونیکس بسازم؛ حتی قبل از این‌که ساخت این زبان تمام شود، دوستان و همکارانم در آزمایشگاه‌های Bell شروع به استفاده از آن برای پروژه‌هایشان کردند. معمولاً پروژه‌های شبیه‌سازی از این زبان استفاده می‌کردند چراکه اولین نسخه از ++C که من تحت‌عنوان C with Classes (نامی که خود روی این زبان گذاشته بودم) ساخته بودم، برای این کار مناسب بود.

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

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

اولین چالشی که با آن مواجه شدم، طراحی خود زبان بود. سؤال اینجا بود که من و همکارانم به چه ویژگی‌هایی نیاز داشتیم تا بتوانیم کد‌های نوشته شدهٔ خود را ساده‌سازی کنیم؛ پیاده‌سازی این ویژگی‌ها برای اجرای مقرون‌به‌صرفهٔ آن‌ها در محیط‌های توسعه و اجرای واقعی نیز در ابتدا کار مشکلی بود.

زمانی که زبان آماده شد، نصب و پیاده‌سازی آن روی سخت‌افزار‌ها و سیستم‌عامل‌های مختلف بسیار دشوار بود؛ همچنین، آموزش نحوهٔ استفاده از تکنیک‌های این زبان برنامه‌نویسی جدید به افراد مختلف نیز خود چالشی بزرگ بود.

این کار به هیچ عنوان آسان نبود زیرا در سال اول، من تنها کسی بودم که روی پروژهٔ C with Classes کار می‌کرد و همکارانم تنها از پروژه حمایت می‌کردند، ولی در آن زمان هیچ پروژهٔ رسمی‌ای به‌نام ++C با یک بودجهٔ مشخص وجود نداشت. به‌صورت واقع‌بینانه، کمک‌هایی که در آزمایشگاه‌های Bell دریافت کردم، باعث به‌وجود آمدن ++Cیی که امروزه همه می‌شناسند شد.

چه نیازی به زبان ++C بود وقتی‌ که زبان C در دنیای برنامه‌نویسی و کامپیوتر به‌وجود آمده بود؟
من ++C را بر‌پایهٔ C ساختم زیرا نمی‌خواستم تمام کار را از پلهٔ اول شروع کنم. شروع از پلهٔ اول، ایدهٔ خوبی برای اتمام یک پروژه در مدت زمان محدود نیست. با این حال، زبان C نه در گذشته و نه در حال نمی‌تواند پیچیدگی کد‌ها را به‌خوبی ++C مدیریت کند.

جالب است بدانید که تکمیل زبان C در طول سال‌ها اغلب تحت‌تأثیر زبان ++C بوده است! زمانی که من پروژهٔ C with Classes را شروع کردم، استفاده از توابع (که امروز یکی از موثر‌ترین مفاهیم انتزاع زبان C می‌باشد) آن‌طور که باید و شاید معمول نبود.

حدس زده شد که به‌وجود آمدن همچنین پدیده‌ای، از کار‌هایی بود که در پروژهٔ ++C انجام شد. Kernighan و Ritchie در زبان C، پروتوتایپ‌های گوناگونی مانند const ،inline و ... را ارائه نکردند. کسانی که به‌همراه من روی پروژهٔ ++C کار می‌کردند، می‌دانند که حتی GNU Compiler Collection یا به‌اختصار GCC که در سال ۱۹۸۷ انتشار یافت، همان آن زمان و هم امروزه با ++C توسعه یافته است.

++C چگونه توانست خلأهای برنامه‌نویسی را پر کند؟
در ۱۰ سال اول انتشار ++C، تعداد دولوپرهایی که از آن استفاده می‌کردند هر ۷.۵ ماه‌ یک‌بار، ۲ برابر می‌شد و هم‌اکنون ۴.۵ میلیون برنامه‌نویس و دولوپر از زبان ++C استفاده می‌کنند که این رقم هر ساله ۱۰۰۰۰۰ رتبه افزایش می‌یابد.

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

آیا آموزش‌های اپن‌سورس کمکی در به‌وجود آمدن پروژه‌های موفقی مانند C و ++C بودند؟
خیر. اولین موفقیت‌های C و ++C پیش از ظهور پدیده‌ای به‌نام اپن‌سورس به‌وجود آمد. با این حال، کمپانی AT&T قدم بعدی را محکم برداشته و اجازهٔ استفاده از C و ++C با هزینه‌های پایین را داد. برای کمپانی‌های غیرانتفاعی، قیمت زبان ما ۷۵ دلار بود که تنها هزینهٔ نوار مغناطیسی که در آن حمل می‌شد بود (سورس و باینری). با این حال، هنوز خبری از توزیع سازمان‌یافته‌ای برروی اینترنت نبود. خیلی سریع پس از آن، شرکت مذکور C و ++C را به سازمان ISO داد تا همه بتوانند از آن استفاده کنند و من خودم هم به کمپانی‌های دیگر برای نوشتن کامپایلر‌های ++C کمک می‌کردم.

امروزه تعداد زیادی کامپیلر اختصاصی و اپن‌سورس برای ++C وجود دارد؛ برای این که مطمئن شوم که این کار همگانی می‌شود، طبق توافقی با At&T، تصمیم به ثبت نکردن ++C و هرگونه پتنت به‌نام خود گرفتم.

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

درنهایت ممکن است یک زبان جدید با امکانات بیشتر در دسترس دولوپرها قرار گیرد؛ با این حال، ++C نزدیک ۳۰ سال است که پرچم‌دار این ماجرا است و این درحالی است که هیچ بودجهٔ تجاری یا مالکیت قوی پشتوانهٔ این زبان نیست.

ویژگی‌های عمده‌ای که باعث می‌شوند ++C گزینهٔ آسان‌تری نسبت به C باشد چه هستند؟
++C به شما سیستم تایپ بهتر، کلاس‌هایی شامل کانستراکتور و دیستراکتور، اورلودینگ، پشتیبانی لوکال برای برنامه‌نویسی شیٔ‌گرا و حتی برنامه‌نویسی معمولی به‌مراتب بهتر نسبت به C ارائه می‌کند.

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

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

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

شما می‌توانید کامپایلر مورد‌نظر خود را براساس معیار‌هایی مانند دسترسی به یک سخت‌افزار خاص، یک تکنیک برنامه‌نویسی خاص، یک محیط خاص، جابه‌جاپذیری یا یک ابزار خاص مانند GDB یا ویژوال‌استودیو انتخاب کنید (GDB مخفف واژگان GNU Project Debugger است).

با وجود این‌که زبان‌های Python ،Java و ++C هنوز در میان برنامه‌نویسان سیستم‌های امبدد جا نیفتاده، آیا شما فکر می‌کنید که تمرکز را باید روی چنین دستگاه‌هایی نیز بگذاریم؟
Python و Java برای برنامه‌نویسی سیستم‌های Embedded مناسب نیستند؛ ++C یک ابزار مهم است زمانی‌که شما نیاز به فشار بر اجرای برنامه یا بهره‌وری انرژی (به‌عنوان‌مثال، افزایش عمر باتری) خارج از یک گجت دارید اما توجه داشته باشید که هر زبانی را بحر کاری ساخته‌اند.

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

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

من درحال کار روی یک پروژهٔ بلندپروازانه هستم که توضیح می‌دهد که کد‌های مدرن ++C بااستفاده از نسخه‌های ۱۷، ۱۴، ۱۱ و بالاتر چگونه باید به‌نظر برسند. این پروژه Core Guildlines نام دارد و یک پروژهٔ اپن‌سورس است؛ در این پروژه، دولوپرهایی از شرکت‌های Morgan Stanley ،Microsoft ،Red Hat و Facebook حضور دارند.

ما درحال تهیهٔ یک کد ایمن به‌همراه منابعی ایمن هستیم که محدودیتی در نمایش برنامه و عملکرد آن نداشته باشد؛ کد‌های متناسب با Core Guidelines بسیار منظم‌تر و خواناتر از کد‌های فعلی هستند. علاوه‌بر این، ما در‌حال کار روی ابزاری برای اعمال خودکار چنین گایدلاین‌هایی هستیم.

آیا شما تفاوت عمده‌ای میان کامپیوتر‌ها و دستگاه‌های امبدد که برای اکوسیستم اینترنت اشیاء (IoT) ساخته شده‌اند می‌بینید؟
البته که تفاوت‌هایی مانند رابط‌های کاربردی باینری (ABI) و نگرانی‌های امنیتی وجود دارد، ولی اساس‌ برنامه‌نویسی و محدودیت‌ها یکسان است و من فکر می‌کنم که آن‌ها به ++C اهمیت می‌دهند.

شما آینده استاندارد‌های ++C را چگونه می‌بینید؟
نسخهٔ ۱۷ از زبان برنامه‌نویسی سی‌پلاس‌پلاس استاندارد ISO برای ++C تا آخر سال جاری خواهد بود و نسخهٔ ۲۰‌ام این زبان، نسخهٔ بعدی استاندارد در سال ۲۰۲۰ خواهد بود. نسخهٔ ۲۰ام می‌تواند یک چشم‌انداز بزرگ و هیجان‌انگیز باشد و راه را برای ما تغییر دهد، اما همه این‌ها به کمیتهٔ استاندارد‌ها بستگی دارد که این تغییرات را بپذیرند یا نه.

برای یک گروه ۲۰۰ نفره از متخصصین و دولوپرها سخت است که ایده بدهند و در حین پیاده‌سازی هم به آن‌ها پایبند باشند اما این درحالی است که برخی از ما در کمیته این کار را انجام می‌دهیم.

چه ویژگی‌هایی در نسخهٔ ۱۷ام ++C وجود دارد که تجربهٔ برنامه‌نویسی کنونی را ارتقا‌‌ء خواهد داد؟
اگر نسخه‌های ۱۱، ۱۴ و ۱۷ این زبان را مقایشه کنیم، می‌بینیم که هیچ تغییر کلی صورت نگرفته است! درواقع، تغییری در نحوهٔ ساختن یک برنامه به‌وجود نمی‌آید بلکه از نظر من، این یک آپدیت کوچک است که البته به دولوپرها پیشنهاد می‌شود از آن استفاده کنند. مهم است که بگویم بیشتر ویژگی‌های نسخهٔ ۱۷ام ++C، برای پیاده‌سازی برنامه‌های بزرگ درنظر گرفته شده‌اند.

چیزی که در مورد ویژگی‌های جدید مهم است، این است که چه‌طور می‌شود با آن‌ها کد‌های بهتری نوشت؛ منظورم از نوشتن کد، این است که چه‌طور برنامه بااستفاده از منابع کمتر، بهتر اجرا شود.

صرف وقت بسیار روی کدنویسی برای دولوپرهای جوان آسان نیست. شما چه توصیه‌ای برای ایشان دارید تا بتوانند به‌راحتی روی یک پروژه جدید کار کنند؟
کد، جایی است که ایده‌های ذهنی جامعهٔ حقیقت به تن می‌پوشند. در کدنویسی، ما تنها چند برگهٔ کاغذ نمی‌نویسیم بلکه درحقیقت، ما باید کدی بنویسیم که کار کند.

قبل از این‌که به کدنویسی برسید، شما باید آن‌را درک کنبد؛ شاید شما بتوانید با یک نگاه کلی به کد نوشته شده، از کارکرد آن سر در بیاورید اما برای این‌که بتوانید در آن تغییرات ایجاد کنید (به‌طورمثال، باگ‌ها را رفع کنید)، باید زیروبم کد را دربیاورید، به‌خصوص این‌که مثلاً چه‌چیزی روی یک خط تأثیر می‌گذارد یا این‌که کدام خط روی کدام خط دیگر تأثیرگذار است؟

هر چیزی که به خواندن کد و مسیریابی آن کمک کند، به شما نیز کمک خواهد کرد. به یاد داشته باشید خواندن خط‌به‌خط کد و تنها تلاش کردن برای درک کد، به شما کمکی نمی‌کند. البته این روش، برای سورس‌کدهای بزرگ نشدنی و برای پروژه‌های کوچک کم‌اثر می‌باشد.

بنابراین، به‌دنبال یک ابزار مسیریابی خوب برای کدها -مانند یک IDE- باشید و همچنین به‌دنبال یک همکار خوب برای توضیح کدها و ابزار‌های مختلف و مورد نیاز مانند دیباگرها و ... باشید.

اگر می‌خواهید از ++C استفاده کنید، اول به‌خوبی آن‌را یاد بگیرید. درحقیقت، ++C مدرن را خوب یاد بگیرید و به دنبال نسخه‌های قبلی نباشید. شما می‌توانید یک کد بهتر نسبت به آن‌چه در دههٔ ۹۰ میلادی توسط نسخهٔ ۱۱ام ++C نوشته می‌شد بنویسید.

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

حال نوبت به نظرات شما می‌رسد. شما چقدر صنعت فناوری به‌خصوص توسعهٔ نرم‌افزار و گیمینگ را مدیون زبان ++C می‌دانید و به‌نظر شما این زبان چه نقشی در آیندهٔ این صنعت ایفا خواهد کرد؟ نظرات و دیدگاه‌های خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

منبع