انجمن انفورماتیک ایران انجمن انفورماتیک ایران انجمن انفورماتیک ایران
گزارش کامپیوتر شماره 256 مهر و آبان 1400 منتشر شد. يکشنبه  ١٣/٠١/١٤٠٢ ساعت ٠٧:٣٧
 

چرا C++ پس از 35 سال همچنان در کاربردهای واقعی
حکمرانی می‌کند؟

ترجمه: سعید امراللهی بیوکی
پست الکترونیکی: www.saeedamrollahi.com

 






بیارنه استراستروپ، در سال 1979، طراحی C++ را آغاز کرد و این زبان برنامه‌سازی همه منظوره در برنامه‌سازی سیستم به تکیه گاه اصلی برای برنامه‌سازان و تولیدکنندگان نرم‌افزار مبدل شد، درحالی‌که همواره رقیبانی جدی داشته، زبان‌هایی مانند جاوا، جاوا اسکریپت، پایتون، Go و حالا هم زبان سوئیفت از شرکت اپل.
بیارنه استراستروپ، درحال حاضر مدیرعامل بخش فناوری شرکت مورگان استنلی در نیویوک است و همزمان استاد مدعو در دانشکده علوم کامپیوتر دانشگاه کلمبیا و استاد و پژوهشگر برجسته در دانشکده علوم کامپیوتر دانشگاه تگزاس می‌باشد. دراین مصاحبه که توسط پل کریل ویراستار اینفوورلد صورت گرفته، بیارنه به ما از نقش C++ در دنیای امروز خواهد گفت، همچنین درباره دیگر رخدادها در تولید نرم‌افزار مانند زبان Go متعلق به گوگل و همچنین سوئیفت تازه وارد نقطه نظریات خود را ارائه می‌کند.
اینفوورلد. این روزها با وجود زبان‌های اسکریپتی مانند پایتون و جاوااسکریپت و زبان‌های دیگری مانند جاوا و Go   از گوگل، C++ چه نقشی ایفا می‌کند؟چگونه C++ موفق شد زنده بماند، رونق پیدا کند و با وجود این همه زبان برنامه‌سازی که دراین مدت پدیدآمده‌اند توانست تااین حد گسترش پیدا کند؟
استراستروپ. سوال خوبی است. بیش از 20 سال است که برخی افراد با جدیت پیش‌بینی ازبین رفتن C++ را می‌کنند، درحالی‌که این زبان درحال رشد و گسترش است. اساساً هیچ زبانی نتوانسته از پس پیچیدگی‌های موجود به مانند C++ برآید. اگر به سامانه‌های نهفته ، پردازش تصویر، نرم‌افزارهای مخابراتی و نرم‌افزارهای مالی نگاه کنید، می‌بینید این C++ است که حکمرانی می‌کند. کاربرد C++ را در نرم‌افزارهای کوچک نمی‌توان خیلی به وضوح دید. کجا می‌توان C++ را یافت؟ جایی که واقعاً به کارایی نیاز دارید: گوگل، آمازون، جویشگرها و مانند این‌ها.
اینفوورلد. اخیراً به زبان برنامه‌سازی Go که در شرکت گوگل طراحی شده توجه ویژه‌ای شده است. چه دورنمایی برای این زبان متصور هستید؟
استراستروپ. به نظر می‌آید Go در زمره زبان‌هایی است که چند کار و وظیفه مشخص را می‌تواند به ظرافت و زیبایی انجام دهد. زبان‌هایی از این دست که می‌توانند فقط چند کار معین را به خوبی انجام دهند، کارایی و عمومیت را از دست می‌دهند. اما خوب، باید صبر کرد و دید!
اینفوورلد. برخی از زبان‌های اسکریپتی جدید با ایده استفاده آسان برای برنامه‌سازان  ساخته شده است. بااین حال شما معتقدید که C++ نیاز به توجه و درنظرگرفتن بیشتر دارد. چرا؟
استراستروپ. بله! به‌طور قطع باید به C++ توجه بیشتری داشت. C++ برای هسته‌های اصلی سامانه‌ها و کاربردهای اساسی طراحی شده است و همواره دریک کاربرد واقعی، همراه با آن از زبان‌های اسکریپتی نیز استفاده شده است. وقتی برای اولین بار شروع به استفاده از C++ کردم، برای هرکاربردی که به یک زبان برنامه‌سازی واقعی و کارایی واقعی نیاز داشت از آن بهره می‌گرفتم، اما همراه با آن از پوسته یونیکس نیز به عنوان زبان اسکریپتی استفاده می‌کردم. آن موقع این‌گونه عمل می کردم و امروز هم تقریباً کارها به همین روال پیش می‌رود. C++ برای کاربردهایی با کارایی بالا ، اطمینان پذیری بالا، استفاده از حافظه با کمترین ردپا و مصرف انرژی پایین مناسب است، نه برای مشغولیات و سرگرمی‌ها و یا نرم‌افزارهای کوچکی که خیلی سریع باید آماده شوند. ما به این قلمرو تعلق نداریم!
اینفوورلد. در ژوئن گذشته، شرکت اپل از زبان جدید خود به‌نام سوئیفت رونمایی کرد. با توجه به آن‌که شرکت بزرگی مانند اپل این زبان را پوشش خواهد داد، فکر نمی‌کنید سوئیفت در آینده به زبانی مهم برای تولیدکنندگان نرم‌افزار مبدل گردد که توجه به آن اجتناب ناپذیر باشد؟
استراستروپ. فکر می‌کنم این‌گونه باشد. آن‌ها به Objective-C توجه کردند و سوئیفت دقیقاً به همان حوزه‌ای خواهد رفت که Objective-C به آن تعلق دارد.
اینفوورلد. در چکیده سمینار شما که قرار است چند روز آینده آن را به عنوان نطق اصلی ارائه کنید   آمده است: «C++ با دو چالش روبه روست: یکی کمک به برنامه‌سازان تا عملیات برنامه‌سازی مبرم و موردنیاز خود را برحسب کارایی، مقیاس‌پذیری و قابلیت اعتماد دربرنامه‌ها بیان کنند و دیگری کمک به آن‌ها تا بتوانند مولد کدهای ساده با قابلیت نگهداری بالا باشند». درباره این دو موضوع چکار می توان کرد؟
استراستروپ. در تلاشم تا دو موضوع را توضیح دهم. یکی کند و کاو در انتراع‌های کارآمد و استفاده کارآمد از سخت‌افزار و دیگری هرچه بیشتر آسان کردن برنامه‌نویسی. دراین خصوص،C++11 و C++14 جنبه‌های جدیدی را عرضه کرده‌اند.
یک نسخه فرعی از C++ امسال عرضه شد که به C++14 معروف است. دو کامپایلر GCC و Clang تمامی جنبه‌های 14C++ را پیاده‌سازی کرده‌اند. درحقیقت C++14 ، نسخه اصلی C++ را که به C++11 مشهور است کامل کرد. وقتی بناست یک محصول بزرگ مانند C++11 را عرضه کنید، برخی جنبه‌ها جا می‌مانند چون باید هرچه زودتر محصول خود را عرضه کنید، همچنین برخی جنبه‌ها به درستی کار نمی‌کنند مگر آن‌که همه را در کنار هم قرار دهیم و استفاده کنیم. C++14 شامل همان چیزهایی است که از C++11 جا مانده بود.
حالا به لطف C++14 ، عبارت‌ها یا توابع لاندا را می‌توان به‌صورت عام نوشت، [یا به عبارت دیگر، C++14 عبارت‌های عام لاندا را پشتیبانی می‌کند.] همچنین می توان این عبارت‌ها را علاوه بر دو شیوه کپی و ارجاع با شیوه انتقال نیز گرفت . در C++14 استنتاج گونه‌ها علاوه بر آغازین دهی شیء‌ها و متغیرها شامل گونة بازگشت توابع نیز می‌شود. توابع ثابت ، یعنی توابعی که می‌توان در زمان ترجمه یا کامپایل آن‌ها را محاسبه کرد، حالا می‌توانند شامل حلقه‌های for ساده باشند. C++14 متغیر الگو را نیز پشتیبانی می‌کند، آغازین دهی حافظه بهبود یافته و لفظ‌های تعریف شده توسط کاربر را نیز در اختیار داریم.
اینفوورلد. می‌خواستم نظر شما را درباره امنیت در برنامه‌سازی بدانم. چه چیزهایی را برنامه‌سازان درخصوص ایمن کردن برنامه‌هایشان باید بدانند؟ آیا C++ نسبت به سایر زبان‌ها، امن‌تر است؟
استراستروپ. من طرفدار پرو پا قرص اعمال امنیت و پشتیبانی از آن توسط سخت‌افزار هستم. با معیارهای زبان‌های برنامه‌سازی، اگر می‌خواهیم برنامه‌های خوبی داشته باشیم باید آن‌ها را ایمن گونه بنویسیم. این کار را می‌توان با C++ انجام داد. خود را درگیر و گرفتار جنبه‌های سطح پایین زبان برنامه‌سازی نکنید! همچنین [به‌جای کامپایلر] از مفسر استفاده نکنید، مفسرها شما را به جایی خواهند برد که شما را از پیگیری آنچه درحال انجام است، ناتوان می‌سازند. خلاصه آن‌که امنیت، یک موضوع سامانه‌ای است و نه موضوعی مربوط به زبان برنامه‌سازی.
اینفوورلد. در پایان، چیز دیگری هست که بخواهید درباره C++ یا تولید و توسعه نرم‌افزار بگویید؟
استراستروپ. هدف ما باید نیل به درجه بالایی از حرفه‌ای‌گری در تولید و توسعه نرم‌افزار باشد. در دنیای پیشرفته  امروز چیزهایی وجود دارد که به هیچ عنوان نباید نقض گردند و خراب شوند و اکثر آن‌ها به نرم‌افزار وابسته‌اند. باید آن‌ها را به صورت یک موضوع کلان و تمام نگریست. زبان  برنامه‌سازی و ابزارهای وابسته به آن صرفاً بخشی از این تمامیت هستند. باید راهی را پیدا کرد تا برنامه‌سازان و توسعه دهندگان نرم‌افزار را به شکل مناسب آموزش داد و این‌که به آن‌ها تاکید کنیم قابلیت اطمینان در نرم‌افزار تاچه حد اهمیت دارد.