辞書へ戻る言語の一覧

C言語

しーげんご言語1972

デニス・リッチーUNIX開発のために作った汎用言語。ハードウェアに近い操作ができつつ移植性も高く、OSや組み込みなど低レイヤの定番として現在も使われ続けている。後の多くの言語の文法の祖でもある。

年表

1969Bell研究所がMulticsプロジェクトから撤退し、Ken Thompsonらが独自のUNIX環境の開発を始める。同年、Thompsonが言語Bを作る。
1972Dennis RitchieによるC言語開発の『最も創造的な時期』。
1978Kernighan と Ritchie による最初の広く読まれた解説書『The C Programming Language』(通称K&R)刊行。
1983M. D. McIlroyの働きかけにより、ANSIがX3J11委員会を設立しC言語の標準化に着手。
1989X3J11委員会がC言語の標準規格案を完成。翌年ISO/IEC 9899-1990としてISOにも採択される。

仕組み

C言語は、コンパイル時に型が決まる静的型付け言語で、ポインタを介してメモリのアドレスを直接扱える。変数はメモリ上の連続した領域(配列)として表現でき、ポインタにその先頭アドレスを持たせれば、加算だけで次の要素へ移動できる。この「ポインタ+加算=隣のセルを指す」という考え方は、祖先言語BCPL・Bから受け継がれたもので、メモリを均質な配列として扱う設計に由来する。ソースコードはコンパイラによって直接機械語に変換されるため、実行時のオーバーヘッドが小さく、OSやドライバのような低レイヤのソフトウェアを書くのに向いている。

時代背景

1969年、Bell研究所はMITとGEとの共同プロジェクトだった大規模OS「Multics」から手を引いた。Multicsの実装言語PL/Iは開発陣の好みに合わず、Ken Thompsonを中心とする非公式なグループが、自分たちで使いやすい計算環境を作ろうと動き始める。Thompsonが1968年から使っていたDEC PDP-7は18ビット語8Kワードという小さなメモリしかなく、最初のUNIXはPDP-7のアセンブラで書かれた。高水準言語で書きたいという思いから、Thompsonはまず自分の言語Bを作り(BCPLをThompsonの頭を通して8Kバイトのメモリに収まるまで削ったもの、というのが本人の説明)、それを土台にRitchieがCへと発展させた。C言語がその形になったのは1969年から1973年の間で、特に創造的な変化の中心は1972年だったとRitchie自身が振り返っている。

名前の由来

C言語の名前は、直接の祖先である言語「B」の次の文字として付けられた。Bは、Bell研で1969年ごろKen Thompsonが作った言語で、Martin RichardsがMITで設計したBCPLをもとにしている(BCPLは「Basic CPL」の略で、CPLはCambridge大学とLondon大学が共同開発した大規模な言語)。Bという名前自体もBCPLの短縮という説が有力だが、Ritchieは「Thompsonが Multics 時代に作った別の言語 Bon(妻Bonnieにちなむ、または呪文を唱える宗教の名にちなむとされる)から来ている」という説も並記しており、本人も確定的な由来は断定していない。

現在

C言語は1989年にX3J11委員会がANSI標準規格をまとめ、翌年ISO/IEC 9899-1990としてISOにも採択された。以後も改訂が続いている。UNIXおよびその後継であるLinuxやBSD系OS、多くの組み込み機器のファームウェアは今もC言語で書かれており、他言語の処理系(PythonRubyのインタプリタ本体など)の実装言語としても使われ続けている。C言語の文法(波括弧によるブロック、セミコロンの文末、型を前に置く宣言スタイルなど)はC++JavaJavaScriptC#など後続の主要言語に広く受け継がれ、「Cファミリー」と呼ばれる文法の系譜を作った。

作者Dennis Ritchie
用途システム・低レイヤ

関連項目

  • UNIXベル研究所で生まれたOS。小さな道具を組み合わせて使う思想や、ファイルを中心とした設計が後の多くのOSに受け継がれた。C言語とともに育ち、現代のmacOSやLinuxにまでその系譜が続いている。
  • C++ビャーネ・ストロヴストルップがC言語にオブジェクト指向などの機能を加えて作った言語。性能と抽象度を両立でき、ゲーム・ブラウザ・各種アプリの基盤として広く使われている。Cとの互換を保ちながら巨大に育った言語。
  • アセンブリ言語機械語の命令を人が読める記号に置き換えた、最も低水準に近い言語。CPUの動きをそのまま書くため習得は難しいが、限界まで速度や容量を絞れる。レトロゲーム解析やROMハックでは、逆アセンブルした先で必ず出会う言語。
  • ALGOL学術的に設計された初期の高水準言語。ブロック構造や再帰など、現代の言語に当たり前にある概念の多くを整理して広めた。言語そのものより、後のCやPascalなど数多くの言語に与えた影響が大きい、いわば言語の祖先。
  • Objective-CCにSmalltalk風のオブジェクト指向を足した言語。NeXT、そしてAppleに採用され、長らくMacやiPhoneアプリ開発の中心言語だった。独特の角括弧記法を持ち、Swift登場まで一時代を築いた。
  • GoGoogleが開発した、シンプルさと並行処理のしやすさを重視した言語。コンパイルが速く扱いやすいため、サーバーやクラウド基盤のソフトで広く採用されている。DockerやKubernetesもGoで書かれている。
  • Javaサン・マイクロシステムズが開発した、「一度書けばどこでも動く」を掲げた言語。仮想マシン上で動く仕組みで環境差を吸収し、企業システムやAndroidアプリの基盤として広く普及した。
  • デニス・リッチーC言語を作り、UNIXの開発を主導した計算機科学者。彼の作った言語とOSは半世紀後の現在もあらゆる機器の土台で動き続けており、現代のソフトウェアの基礎を築いた人物の一人。
  • Perlラリー・ウォールが作った、テキスト処理に強いスクリプト言語。正規表現を手軽に扱え、初期のWeb(CGI)やシステム管理で広く使われた。「インターネットの接着剤」と呼ばれ、動的なWebの黎明期を支えた。
  • Pythonグイド・ヴァンロッサムが作った、読みやすさを重視した汎用スクリプト言語。シンプルな文法と豊富なライブラリで、Web・データ分析・機械学習まで幅広く使われ、現在もっとも広く学ばれる言語の一つになった。
  • Pascalニクラウス・ヴィルトが教育用に設計した言語。構造化プログラミングをきれいに学べる言語として広く使われ、後にTurbo Pascalとして実務でも普及した。プログラミング教育の歴史に名を残す。
  • ビャーネ・ストロヴストルップC++の生みの親。C言語にオブジェクト指向を加え、長くシステム開発を支える言語を作り上げた。
  • Rustメモリの安全性を保ちながら高速に動くことを目指して作られた言語。C/C++が抱えがちなバグを言語の仕組みで防げるため、OSやブラウザ、低レイヤの開発で支持を広げている。

関連技術

この用語を扱った記事

文字コードが多すぎる理由リバースエンジニアリングとは|ソフトの仕組みを解析する技術を解説Stirlingの使い方|バイナリエディタでファイルを書き換えてみる

出典