オブジェクト指向言語 – 第 A 章 p.1

第 A 章 さまざまなプログラミング言語

A.1 プログラミング言語の分類
プログラミング言語とは、プログラム（つまりコンピュータに与える指示）を書くための形式である。プログラミング言語は、まず機械語（およびアセンブリ言語）と高級言語の 2 種類に大別することができる。
高級言語は、さらにパラダ イムによって大まかに分類することができる。
（プログラミング ）パラダイムとは —（ 空欄 A.1.1 ）のこと。

プログラミング言語には大きく次の 4 つのパラダ イムに分けられる。

（ 空欄 A.1.2 ）

手続き型

命令型とも言う。
機械語に比較的近く、手続き（ procedure ）中心にプログラムを組み立てる。
代入文（ 変数の値の変更）を多用する（ 空欄 A.1.3 ）関数型関数（ function ）を、整数などのデータと同等に扱う。
リスト・木などの汎用的なデータ型を扱うのが得意である。
代入文を（ほとんど ）使用しない。
（値を変更するよりも、新しいデータをつくる。）（ 空欄 A.1.4 ）オブジェクト 指向オブジェクト（ object ）中心にプログラムを組み立てる。
GUI などのように、良く似た型が数多く使われる場合が得意である。
論理型（ 空欄 A.1.5 ）論理式（〜ならば〜）の集まりがプログラムになる。
このような分類は慣習的なもので、また排他的なものではない。一つの言語は 2つ以上のパラダ イムの影響を受けていることが普通である。
すべてのパラダ イムをカバーし 、どんな用途のプログラムでも記述できるような一つの言語があれば理想的だが 、現実には、そのような誰もが納得するようなオブジェクト指向言語 – 第 A 章 p.2

第 A 章 さまざ まなプログラミング言語“究極の” 言語はこの世にまだ現れていない。そのため用途に応じて、いくつかのプログラミング言語を使い分ける必要がある。
また、型付け (typing) に関する考え方をもとに、プログラミング言語を分類する方法もある。一方の典型は、変数や関数の型宣言が必須で、コンパイル時に（静的に ）型検査を行なってしまい、実行時には型エラーを出さないプログラミング言語であり、もう片方の典型は、変数や関数の型宣言が必要なく、実行前には型検査をせず、実行時に（動的に）型エラーを発行する言語である。前者は厳格（不自由）だが安全、後者は自由だが危険と表現することができる。この分類も、実はさまざ まな中間的なアプローチが存在する。
また、強い型付け (strong typing) と弱い型付け (weak typing) という分類もあるが 、人によって定義がいろいろあり、はっきりしない。強い型付けの定義の一つは、型の間違った操作は（静的なチェックまた動的なチェックのいずれにせよ）必ず防ぐことができる、というものである。弱い型付けの定義の一つは、型の不整合があったとき処理系が適当に型変換してしまう、データの解釈が完全にプログラマまかせである、というものである。
（ 強い型付けと弱い型付けは相反する性質ではない。）

A.2

主なプログラミング言語

A.2.1

Fortran（ 空欄 A.2.1 ）の略。1957 年、IBM の John Backus ら。

• 最古の高級言語の一つ、手続き型言語• 現在でもA.2.2（ 空欄 A.2.2 ）に使われることが多い。

BASIC（ 空欄 A.2.3 ）。John

G. Kemeny と Thomas E. Kurtz。
• 系統的には Fortran から派生した手続き型言語• Microsoft の商品がヒットしたため、パソコン上の主力言語の一つになった。
（ただし 、現在の Visual Basic は、発表当初の Basic とはまったく異なった言語になっている。）

A.2.3

COBOL
（ 空欄 A.2.4 ）の略。1960 年頃。Grace

Hopper ら。
•（ 空欄 A.2.5 ）の手続き型言語

A.2. 主なプログラミング言語

オブジェクト指向言語 – 第 A 章 p.3

A.2.4 Pascal
1968 年頃、スイスのチューリッヒ工科大学の Niklaus Wirth。
•（ 空欄 A.2.6 ）に適した Algol 系の手続き型言語（ goto 文を使わずに、プログラムを書くことができる。）• 主に（ 空欄 A.2.7 ）に使われた。

• Delphi 言語は Pascal を拡張したものである。

A.2.5 C
1973 年頃、AT&T のベル研究所の Dennis Ritchie により、うオペレーティングシステムを記述するために開発された。

（ 空欄 A.2.8 ）とい• Algol 系の手続き型言語• Pascal とは従兄弟のような関係にあたる。
• マシンレベルに近い記述が可能だが、Pascal と同様、構造化プログラミングに向く。

A.2.6 Lisp
1960 年頃、MIT の John McCarthy。
る。
格言 — “Lisp を知らない人は Lisp を再発明する。”•（ 空欄 A.2.9 ）の略といわれ（ 空欄 A.2.10 ）• （ 準）関数型言語• 対話的なプログラミング環境 （ 通常、インタプリタにより実行される）• メモリ管理を自動化（ゴミ集め）

A.2.7 Scheme
1970 年代前半、MIT の Guy L. Steele Jr. と Gerald Jay Sussman ら。
• Lisp の方言の一つ• 単純で、しかも強力である。
• アプリケーションソフトの拡張用言語として、よく使用される。
（ GIMP のScript-Fu など ）

オブジェクト指向言語 – 第 A 章 p.4

A.2.8

第 A 章 さまざ まなプログラミング言語

ML

1980 年代に、スコットランド のエデ ィンバラ大学の Robin Milner。
（ 空欄 A.2.11 ）。
• 関数型言語• パターンマッチング・多相型・型推論などを特徴とする。
• Objective Caml, F#なども ML の方言になる。

A.2.9

Haskell1987 年以降、開発された。名前は、数学者 Haskell B. Curry にちなむ。
• 関数型言語 — 純粋な関数型言語で副作用を完全に排している。
• モナド による入出力を行なう。
•（ 空欄 A.2.12 ）を採用し 、並列プログラミングとの親和性も期待されている。

A.2.10Scala2003 年 スイス連邦工科大学の Martin Odersky。
• JVM 上で動作するマルチパラダ イムのプログラミング言語• Java との連携が容易である。
• 型推論があるため、多くの場所で型宣言を省略できるが 、コンパイル時の型検査で型エラーを発見できる。

A.2.11

Prolog1970 年 代 は じ め 、フ ラ ン ス の マ ル セ イ ユ 大 学 の（ 空欄 A.2.13 ）。

AlainColmerauer。

• 一階述語論理に基づく論理型言語（ 論理式の証明 = プログラムの実行）• ユニフィケーション（ 単一化）、バックトラッキング（ 後戻り）などを特徴とする。
一時期、第五世代コンピュータプロジェクト（ 1982〜1992 ）の頃は論理型言語（ Prolog に影響を受けた Guarded Horn Clauses や KL1 など ）に大きな注目が集まった。今日、その熱狂は去ったが 、再びもう少し注目を浴びても良い言語かもしれない。

A.2. 主なプログラミング言語

オブジェクト指向言語 – 第 A 章 p.5

A.2.12 Smalltalk
Xerox のパロ・アルト研究所の Alan Kay。
• オブジェクト 指向言語
• 統合開発環境（ IDE, Integrated Development Environment) のはしりとなった。

A.2.13 C++
1980 年代前半、AT&T の Bjarne Stroustrup。
• Cに加えたもの。

（ 空欄 A.2.14 ）プログラミングのための仕組みを付け• 仕様は巨大である。
（ 電話帳並みと言われる）

A.2.14 Java（ 空欄 A.2.15 ）年、Sun Microsystems 社の James Gosling ら。Java とはアメリカの口語で（ 空欄 A.2.16 ）のこと。

• C の文法に似せて設計されたオブジェクト 指向言語。
（ただし 、C との互換性はない。）• JVM と呼ばれる仮想機械上で動く（ Pascal の P コード と同じ原理）ので、（ 空欄 A.2.17 ）• WWW 上でプログラム（することができる。

（ 空欄 A.2.18 ）と呼ばれる）をやりとり• WWW サーバ側でのプログラム（用も広まっている。

（ 空欄 A.2.19 ））としての利

注: 下記の JavaScript とはまったく別の言語なので混同しないこと。
¡A.2.15 JavaScript（ ECMAScript ）1994 年 Netscape 社の Brendan Eich（ただし最初の名前は LiveScript だった。）•（ 空欄 A.2.20 ）に基づくオブジェクト指向言語• HTML などに埋め込まれるスクリプト言語としてよく使用される。
• Java に（つまり C に ）似た文法を持つ。
（しかし Java とは全く別の言語）• 関数型言語的なプログラミングも可能である。

オブジェクト指向言語 – 第 A 章 p.6

第 A 章 さまざ まなプログラミング言語

Microsoft 社の JScript も JavaScript に類似の言語である。複数の似た規格が乱立すると混乱が起きるため、ECMA という機関で言語規格の標準化が行われた。ここで決められた言語を ECMAScript という。つまり JavaScript も JScript も ECMAScriptの実装の一つ（あるいは規格の拡張の一つ）という位置付けになる。また、Adobe社の Flash のスクリプト言語として使用される ActionScript も ECMAScript の拡張である。

A.2.16Perl

1987 年 Larry Wall。
• CGI やテキスト処理などに広く使われるスクリプト 言語• 正規表現を強力にサポートする。
• モットー: “There’s more than one way to do it.”

A.2.17

Python1990 年 Guido van Rossum。
• マルチパラダ イムのスクリプト言語• Web プログラミングで人気がある。
• モットー: “There should be one—and preferably only one–obvious way to doit.”

A.2.18Ruby1995 年 まつもとゆきひろ。
• マルチパラダ イムのスクリプト言語• Web アプリケーションフレームワークのレ イクした。

（ 空欄 A.2.21 ）でブ問 A.2.1 このプリントで紹介した以外のプログラミング言語で重要・あるいは将来有望と思う言語を 2 つ以上取り上げ、プログラミングパラダ イム・型付けなどを含めて、その特徴を、自分が重要または有望と感じた理由とともにまとめよ。
情報の出典を明記せよ。