辞書へ戻る言語の一覧

C++

しーぷらすぷらす言語1985

ビャーネ・ストロヴストルップC言語オブジェクト指向などの機能を加えて作った言語。性能と抽象度を両立でき、ゲーム・ブラウザ・各種アプリの基盤として広く使われている。Cとの互換を保ちながら巨大に育った言語。

概要

C++は、Bjarne StroustrupがC言語Simula譲りのクラス機構を組み込んで作った言語。本人の言葉では『Simulaのプログラム構成能力とCの効率性・柔軟性を両立させる』ことを目指して設計された。C言語で書かれた既存資産や低レイヤでの効率をそのまま活かしながら、オブジェクト指向というより高い抽象度でプログラムを組み立てられるようにする、という二兎を追う設計思想が出発点にある。

時代背景

Stroustrupは1970年代末、英国ケンブリッジ大学で分散システムのソフトウェア構成に関する博士研究をしており、シミュレーションのためにSimula言語を使っていた。Simulaのクラス概念がアプリケーションの概念をコードに直接写し取れる書きやすさに感銘を受けた一方、Simula自体は実行速度や実用性の面で当時の実務には向かなかった。1979年からBell研究所で、Cの効率性とSimula風のクラスを組み合わせた『C with Classes』の開発を始め、1979年から1983年にかけての経験がのちのC++の骨格を決定づけた。

名前の由来

『C with Classes』が言語として確立していく過程で、新しい名前が必要になった。名付け親はStroustrupの同僚Rick Mascittiで、1983年夏に考案し、実際に文書に使われたのは1983年12月(当時執筆中だった著作の最終稿への反映)が最初だった。Stroustrup本人の説明では、C言語のインクリメント演算子`++`にちなみ、Cからの『進化的な変更』であることを示す名前として選んだという。『短く、良い解釈があり、形容詞プラスCという形式ではない』ことも選定理由に挙げている。似た名前の`C+`は構文エラーになる上に既に別の無関係な言語で使われていたため避けられた。また、言語を『D』と呼ばなかった理由についても、C++はCを拡張するものであり、機能を削ることで問題を解決しようとする言語ではないから、と本人が説明している。

種類・系譜

C++の直接の前身は『C with Classes』(1979〜1983年)で、そこに仮想関数・関数名およびオペレータのオーバーロード・参照・const定数・ユーザー制御のフリーストアメモリ管理・改良された型検査などが加わって現在のC++の骨格になった、とStroustrup自身が挙げている。最初のC++処理系は、C++のソースコードをC言語のコードに変換してから既存のCコンパイラでコンパイルする『Cfront』という方式のコンパイラだった。C++はその後もISO標準化委員会のもとで進化を続けている。

現在

C++はゲームエンジン・ブラウザのレンダリングエンジン・OSのコンポーネント・組み込み機器など、性能が要求される領域で今も広く使われている。Cとのある程度の互換性を保ちながら、テンプレートによるジェネリックプログラミングや、標準ライブラリ(STL)によるコンテナ・アルゴリズムの充実など、当初の『Cの効率性+Simulaの構造化』という出発点から大きく肥大化した言語になった。近年はRustのようなメモリ安全性を言語機構で強制する新しい言語との比較で語られることも増えている。

作者Bjarne Stroustrup
基盤C言語

関連項目

  • C言語デニス・リッチーがUNIX開発のために作った汎用言語。ハードウェアに近い操作ができつつ移植性も高く、OSや組み込みなど低レイヤの定番として現在も使われ続けている。後の多くの言語の文法の祖でもある。
  • Rustメモリの安全性を保ちながら高速に動くことを目指して作られた言語。C/C++が抱えがちなバグを言語の仕組みで防げるため、OSやブラウザ、低レイヤの開発で支持を広げている。
  • C#マイクロソフトが.NET基盤向けに開発した言語。JavaやC++の良さを取り入れ、Windowsアプリやゲームエンジン(Unity)、業務システムなど幅広く使われている。現在も活発に進化を続けている言語。
  • Simulaノルウェーで作られた、シミュレーション向けの言語。「クラス」や「オブジェクト」という概念を初めて言語に持ち込み、オブジェクト指向プログラミングの源流とされる。後のSmalltalkやC++に流れ込む発想がここで生まれた。
  • Javaサン・マイクロシステムズが開発した、「一度書けばどこでも動く」を掲げた言語。仮想マシン上で動く仕組みで環境差を吸収し、企業システムやAndroidアプリの基盤として広く普及した。
  • SwiftAppleがiOS/macOSアプリ開発のために作った言語。それまでのObjective-Cより書きやすく安全で、Apple製品向けアプリ開発の主役になった。
  • ビャーネ・ストロヴストルップC++の生みの親。C言語にオブジェクト指向を加え、長くシステム開発を支える言語を作り上げた。

関連技術

この用語を扱った記事

リバースエンジニアリングとは|ソフトの仕組みを解析する技術を解説

出典