命令型プログラミング
命令型プログラミング(めいれいがたプログラミング、Imperative Programming)とは、計算機科学において宣言型プログラミングの対となる概念であり、計算をプログラム状態を変化させる文の列で記述するプログラミングパラダイムの一種。自然言語の命令法がなすべき行動への指令を表現するのとよく似た方法で、命令型プログラムはコンピュータが実行すべき命令列で構成される。命令型プログラミングに従ったプログラミング言語を命令型(プログラミング)言語と呼ぶ。一般に命令型プログラミングは、手続き型プログラミングと同義として扱われる。
命令型プログラミングは、宣言型プログラミング(関数型や論理型言語など)と対照的である。Haskellなどの関数型プログラミング言語では、プログラムは文の並びではないし、命令型言語が持つような広域状態を持たない。Prologのような論理プログラミング言語では、命令型言語のように計算の「方法」をプログラムとして記述するのではなく、計算すべき「事物」を定義する。
概要
ほとんど全てのコンピュータのハードウェア実装は命令型である。ほぼ全てのコンピュータハードウェアは機械語を実行するよう設計されており、機械語は命令から構成される。このような低レベルから見た場合、プログラムの状態はメモリの内容によって定義され、文としては機械語の命令が相当する。高級な命令型言語は変数や他の複雑な構文を使用可能となっているが、基本的に同じパラダイムである。レシピやチェックリストはプログラムではないが、命令型プログラミングのスタイルに似たコンセプトである。それらのステップが命令であり、実世界が状態を保持している。命令型プログラミングの基本的考え方はハードウェアの実装に近く、概念的にもなじみ深いため、多くのコンピュータ言語が命令型のスタイルである。
代入文は一般にメモリ上のある位置に存在する情報への操作であり、結果を後で使用するためにメモリ上に格納する。高級命令型言語ではさらに複雑な式の評価が可能となっており、算術操作や関数評価の組み合わせによる式が可能で、その計算結果をメモリに格納する。ループ文は文の並びを繰り返し実行させる。ループは、事前に決められた回数だけ繰り返す場合と、指定された条件が変化するまで繰り返す場合がある。条件分岐文は、何らかの条件が成り立ったときだけ指定された文の並び(ブロック)を実行する。条件が成り立たない場合、そのブロックはスキップされ、その次の文から処理が続行される。無条件分岐文は制御をプログラム内の別の箇所に転送する。無条件分岐には、多くの言語にあるGoto文、サブプログラム、プロシージャ呼び出しなどがある。
歴史
最初の命令型言語はコンピュータ本来の機械語であった。機械語の命令は非常に単純であり、ハードウェアの実装は容易になっていたが、複雑なプログラムの作成は困難だった。IBMのジョン・バッカスは1954年からFORTRANの開発を開始した。FORTRAN は機械語での複雑なプログラム作成の困難さを克服した最初の主要なプログラミング言語である。FORTRAN はコンパイル言語であり、名前付きの変数、複雑な式、サブプログラムといった命令型言語に共通の各種機能が利用可能であった。その後20年間、様々な高級命令型プログラミング言語が開発された。1950年代末から1960年代にかけて、数学的アルゴリズムをより表現し易くする目的で ALGOL が開発された。ALGOL は一部のコンピュータではオペレーティングシステムを記述するのにも使われた(バロース B5000)。COBOL(1960年)やBASIC(1964年)はどちらも文法をより英語的にしようとした。1970年代には、ニクラウス・ヴィルトの開発したPascal、ベル研究所のデニス・リッチーの開発したC言語が登場した。ヴィルトはその後、Modula-2、Modula-3、Oberonなどを設計している。アメリカ国防総省での必要性から、Jean Ichbiah とハネウェルのチームは1978年からAdaの設計を開始し、4年後に言語の要求仕様を定義した。言語仕様は1983年に公表され、その後1995年と2005年に改訂されている。
1980年代、オブジェクト指向プログラミングが急成長を遂げた。オブジェクト指向言語の多くは命令型のスタイルであるが、オブジェクトを扱う機能が追加されている。その後20世紀末まで、その種のプログラミング言語は多数開発された。1969年にアラン・ケイが考案したSmalltalkは、1980年にパロアルト研究所からリリースされた。他にも、1960年代後半から開発されていた世界初のオブジェクト指向言語 Simula や、C言語に基づいてビャーネ・ストロヴストルップが設計したC++がある。C++の最初の実装は1985年である。1980年代末から1990年代にかけて登場したオブジェクト指向のコンセプトを導入した命令型言語として以下のものがある:
- Perl、ラリー・ウォール(1987年)
- Python、グイド・ヴァンロッサム(1990年)
- PHP、ラスマス・ラードフ(1994年)
- Java、サン・マイクロシステムズ(1994年)
- Ruby、まつもとゆきひろ(1995年)
命令型言語
参考文献
- Pratt, Terrence W. and Marvin V. Zelkowitz. Programming Languages: Design and Implementation, 3rd ed. Englewood Cliffs, N.J.: Prentice Hall, 1996.
- Sebesta, Robert W. Concepts of Programming Languages, 3rd ed. Reading, Mass.: Addison-Wesley Publishing Company, 1996.
関連項目
- 宣言型プログラミング(対となる概念)
- プログラミングパラダイム
本項目は Stan Seibert が Imperative programming について書いた Nupedia 上の記事(GFDLライセンス)に基づいて英語版 Wikipedia に掲載されたものを翻訳したものである。