30歳のC ++

今年の10月14日に、プログラミングの世界で最も重要な記念日の1つ、C ++言語の30周年が行われました。 この間、非常に人気があり、今でも世界で最も人気があり広く使用されているプログラミング言語の1つです。



この記念日に関連して、言語の創始者であるビョルン・ストラウストルプとのインタビューの翻訳を提供します。







ちょうど30年前、CFront 1.0のリリースと本「C ++ Programming Language」の最初の発行が行われました。 同じ日にリリースすることは重要でしたか?



これが重要かどうかはわかりませんが、同時に良い考えでした。 AT&T(コンパイラを販売している会社)とAddison-Wesley(本の出版社)の両方が、リリースに成功する日を尋ねました。 私は10月14日に電話をしました。これは、米国コンピューターエンジニアリング協会の会議で講演する予定で、そこで発表できるからです。



これにより、ライターが2回作成され、2倍の作業が必要になる場合があります。 しかし、本を書くことはより良い言語の開発に役立ちましたか?



これは必要な本でした。 小さいながらも成長を続けるコミュニティがそれを必要としていました。 この本を書くという考えは私の頭にさえ入りませんでした。 このアイデアは、後にベル研究所の隣人であるアルアホ(ベル研究所はAT&Tのような会社です)から提示されました。 「C ++プログラミング言語」の作業量を絶対に過小評価していました。 完全に新しいトピックについて書くことは非常に困難です。 私は言語について多くのことを学び、人々に説明しようとした。 C ++を変更しましたが、言語自体がより論理的または機能的になったため、説明が簡単になりました。 指示を書くことは、設計するのに非常に良い方法です。







1985年10月14日月曜日、セミナーC入門を発表したときの気持ちを覚えていますか?



いいえ、覚えていません。 実際、1980年代に起こったことから、私は比較的少ないことを覚えています。 それから私はとても忙しかった。 1979年から1991年の間に、C ++を使用するプログラマの数は7.5か月ごとに倍増しました。 このような成長により、非常に多くの作業が発生します。 今日、C ++ユーザーの数は440万人に達しました( JetBrainsの調査による)。 それは私にとって重要な日でしたが、覚えているのは、初版の最初のコピーを受け取った方法だけです。



では、C ++をどのように見ましたか 彼の将来はどうでしたか?



もちろん、私はそのような信じられないほどの、時には爆発的な舌の成長を期待していませんでした。 私はそれを改善することに集中し、ライブラリの作成を研究し、コンパイラを改善し、これらすべてを使用する方法を説明しました。



一方、今日のC ++で見られるものの多くは、当時に根ざしています。 クラス、関数宣言(関数プロトタイプ)、コンストラクター、およびデストラクターは最初のバージョンの一部でした。 数年後、インライン関数とオーバーロードされた代入演算子を追加しました。 同時に、初期化と割り当ての違いが現れました。 一般的な演算子のオーバーロードは、後で(1983年頃)仮想関数と同時に発生しました。 多くの場合、パラメータ化されたデータ型が最初から実装されたことを忘れます。 ヘッダー<generic.h>でCfrontを使用しました。 数年の間、私はマクロの一般的なプログラミングで十分だと思っていました。 私は非常に間違っていましたが、パラメーター化された型と関数を(他の)型と共に使用する必要があると信じていました。 結果はパターン(1988)でした。



主なアイデアは、ユーザーが強力で、美しく、効果的な抽象化に費用をかけることができる機能で言語を豊かにすることでした。 これは、言語自体でアプリケーション固有の抽象化をサポートするという考えと矛盾します。 今日のC ++は、C言語のコンピューターの基本モデルを使用しています。これにより、ハードウェアを効率的かつ適切に使用するポータブルプログラムを作成できます。 また、効率的な抽象化の構築をサポートするために、C ++を徐々に改善するよう取り組んでいます。



優れたプログラミング言語を開発しようとするほとんどの試みは失敗します。 あなたの周りのますます多くのプログラムがあなたが作成した言語で書かれていると感じるのはどうでしたか? そして、あなたの意見では、そのような成功をもたらしたものは何ですか?



うれしそうに-同時に怖い。 非常に多くの人々に役立つ何かを開発したと感じることは素晴らしいことですが、それはまた、特に言語の開発に関しては大きな責任です。 成功した便利な機能を追加した場合-この世界をより良い場所にしたが、それは間違いの価値がありました-そして損害は非常に大きいでしょう。 それでも、C ++の開発は一連の改善だったと思います。 すべてのアイデアが成功したわけではありませんが、ほとんどはほとんどの人にとって非常に有用であり、失敗は致命的ではありませんでした。 C ++は毎年改善されていました。 C ++は、1980年にリリースされた1.0リリースよりも比較にならないほど便利です。より美しいコードを記述でき、より高速に動作します(機器の速度の違いを考慮しても)。



成功の理由は? たくさんありました。 成功するためには、ユーザーが必要とするすべての点で言語が十分に優れていなければならず、同時に何も失敗してはいけません。 1つまたは2つの点で、世界で最高であるだけでは不十分です。 C ++は、その中心で、パフォーマンスと機器へのアクセスが重要なシステム(いわゆるシステムプログラミング)、特に複雑な管理が必要なシステムの重要なタスクに重点を置いています。 第二に、C ++は世界の問題に応じて絶えず進化しており、成長しています。 それは決して「象牙の塔」ではありませんでした。 結局、C ++が広告から離れることは決してなかったということは私にとって重要だと思われます。



人生のほとんどをC ++に費やし、今日まで積極的にC ++に取り組んでいます。 この献身の原因は何ですか? 新しいプログラミング言語で作業を開始しますか?



私は繰り返しC ++開発から抜け出そうとしましたが、いつも私を引き戻しました。 C ++で作業することが、やりがいのあることをする主なチャンスだと思います。 ですから、C ++は研究開発のための私のメインツールです。 私とC ++コミュニティの他のメンバーが学んだ教訓は、何百万人もの人々を助けることができる言語とライブラリに導入されています。



もちろん、新しい、より高度なプログラミング言語を作成することを夢見ていましたが、一連のアイデアから有用なツールに移行するには多くの時間がかかります。 その分野でC ++と競争することは難しく、私の興味のほとんどはC ++が得意なものです。 さらに、ほとんどの新しい言語は失敗します。 ゼロから何かを開発することでミスを犯すのは非常に簡単です。 成功する大規模システムは、小規模な稼働システムから成長する傾向があります。



30年で何が変わったのですか? 何が変わりませんか?



マシンモデルと抽象化のサポート強化への要望は変わらず、これまでと同様に重要です。 静的(コンパイル時)データ型システムに注意を払ったことについても同じことが言えます。



例外とパターンの使用が大幅に改善され、より美しく機能的なコードを作成できるようになりました。 1996年にIEEE Software誌のために書いたドキュメントには、それと別のものの両方がC ++の開発の可能な方向として現れました。 例外は、コンストラクターとデストラクターと共に、セキュアなリソース管理(RAII)の基盤となりました。 テンプレートは、Alex StepanovのSTLライブラリの開発と、一般化されたプログラミングに対する彼のアイデアに貢献しました。 文字通り今年、私たちはC ++テンプレートの機能を補完する概念の直接言語サポートを開発しました。







1980年代後半、人々はクラス階層の使用に夢中になりました。 私は、さまざまなプログラミングスタイルを調和のとれた全体に結合することにもっと興味がありました。 私の本の初版では、(意図的に)「オブジェクト指向プログラミング」という用語を使用せず、「C ++は単なるオブジェクト指向プログラミング言語ではない」という精神でタイトルを付けてスピーチを行いました。 後に、大衆はテンプレートとメタプログラミングに大きな関心を示し、しばしば最も簡単な解決策が最良であることを忘れていました。 言語機能とライブラリ機能の統合に基づいたエレガントなプログラミングの理解を伝える方法をまだ探しています。



私の意見では、今後数年間で非常に重要になる別のことは、ツールとライブラリのガイドラインの開発です。 これにより、C ++コミュニティは新機能をより速く学習できます。 完全に新しい側面の1つは、ぶら下がりポインタを削除できることです。これにより、完全にタイプセーフでリソースに優しいプログラミングの機会が開かれます。 特に、ガベージコレクターなしですべてのリソースリークを排除します(ガベージを生成しないため)。セキュリティは向上していますが、パフォーマンスの低下に直面する必要はありません。 また、C ++のスコープを制限しません



これらすべてが、C ++に常に存在していた問題の解決に役立つことを願っています。それは、C ++を使用する人々の間でさえ、C ++のトレーニングと理解の欠如です。 当初から、C ++を他の何かの奇妙なバージョンとして説明する傾向がありました。 たとえば、C ++は「Cに追加されたいくつかの新機能」または「いくつかの最新の機能が欠けている安全でないJava」であると言われています。 これは、C ++の普及に障害をもたらしています。 私の新しい本、 C ++ Overviewも役立つかもしれません。 C ++とその標準ライブラリについては、ブライアンケルニガンとデニスリッチーの本であるCプログラミング言語(K&Rとも呼ばれます)よりもページ数が少なく、かなり高いレベルで話しています。 私の本は、初心者よりも既に確立されたプログラマー向けに設計されています。



数日中に、C ++委員会がハワイ諸島に集まり、次のメジャーバージョンのC ++に関する作業について話し合います。 C ++ 17はどのように見えると思いますか?



来週のコン[ハワイ]での会議の後、C ++ 17がどのようになるかについて、より良いアイデアが得られると思います。 しかし、私は(穏やかに)調整され、楽観的です。 C ++ 11は、C ++ 98と比較して大きな成果であり、C ++ 17は、C ++ 11と比較して同じ大きな一歩となることを願っています。



たとえば、私は見てみたい:



翻訳: http : //blog.noveogroup.ru/post/132140074527/

オリジナル: http : //cpp-lang.io/30-years-of-cpp-bjarne-stroustrup/



All Articles