言語

プログラミング言語を体系的にまとめる

この記事の目的

プログラミング言語を体系的にまとめて言語の特性を大枠で理解するのに役立てたい。(勉強のためのものなので間違ってたり補足あったらコメントがほしい)

インタプリタとコンパイラ

インタプリタ

ソースコードを変換せずに直接実行するもの。長所はプログラムを作成している途中でも、とりあえず書かれた箇所まで実行させることができ、プログラマの期待通りの動作をしている場合も、期待通りの動作をしていない場合も、早期にそれを確認・発見し、そして修正後すばやく実行、再確認できる。短所は実行速度が遅い。

コンパイラ

コンパイルという変換作業を行い、実行するもの。コンパイラ型言語では、コンパイルする前にソースコードをオブジェクトコードに翻訳しておくため、プログラムを解釈しながら実行するインタープリタ型言語と比較して、パフォーマンスに優れている。なお、オブジェクトコードはそのままでは実行できず、実行に必要なライブラリを結合して実行モジュールを生成する必要がある。このことをリンクと呼ぶ。

スクリプト言語とマクロ言語

スクリプト言語

スクリプト型言語は記述や実行を比較的簡易に行うことができる言語の総称である。非常に多くの場合、スクリプト言語はインタープリタ型言語であり、コンパイラ型言語に比べて実行までの処理の手間がかからないという特徴を持っている。また、他のプログラミング言語に比べると、英語のような自然言語に近い記述を用いてプログラミングすることが可能であり、習得が比較的容易であるとされる。

マクロ言語

VBAなど計算などの処理を行うのに適した言語。

言語のタイプ

言語には大きくワケて命令型と宣言型があり、命令型はどう処理を行うかを指示するのに対して宣言型はその値がどういうものかを宣言するものになる。こういった言語の捉え方をプログラミングパラダイムといい、複数のパラダイムを持つ言語をマルチパラダイムの言語という。

命令型

手続き型

手続き型プログラミング(てつづきがたプログラミング、英: Procedural programming)は、「手続き呼び出し」の概念に基づくプログラミングパラダイムの一種。命令型プログラミングと同義に扱われることが多い。「手続き」はプロシージャ、ルーチン、サブルーチン、メソッド、関数(数学の関数とは異なる。)など様々な呼称があるが、実行すべき一連の計算ステップを持つものと定義できる。手続きはプログラム実行中の任意の時点で呼び出すことができ、他の手続きからの呼び出しも、自分自身からの呼び出し(再帰呼び出し)も含まれる。

オブジェクト指向

オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」「目的重視の」という意味の形容詞) の日本語訳である。

オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、オブジェクト指向の考え方は必須である。

宣言型

関数型

何をもって関数型プログラミングとするか、関数型プログラミングを行っているコミュニティ内でも正確な定義や合意というものは存在しないが、一般的には、手続き型プログラミングがコマンド実行の列としてプログラムを記述していくのに対し、関数型プログラミングは複数の式を関数の適用によって組み合わせていくプログラミングスタイルである、ということは広く認められている。

論理型

プログラミングにおいて広く利用される手続き型言語ではコンピュータに対し「××をせよ」という具体的な指示を与えていくのに対し、論理型言語では「○○は××である」という定義を書き連ねる。そして「△△は××か?」とか「××なものを求めよ」という条件を与えると、それに見合う結果が返ってくるという言語である。

その特性ゆえに「8クイーン問題」のような、条件を決めると結果が確定する(が、具体的にどうやって求めるかは難しい)タイプの問題を非常に扱いやすいのであるが、先に手順が決まっていてその通りに動いて欲しいような処理は全くと言っていいほど書くことができない。現代主流言語の対極にあるような存在である。