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

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

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

（プログラミング）パラダイムとは—のこと。

プログラミング言語には大きく次の 4 つのパラダイムに分けられる。
手続き型
命令型とも言う。
機械語に比較的近く、手続き（procedure）中心にプログラムを組み立てる。
代入文（変数の値の変更）を多用する。
関数型関数（function）を、整数などのデータと同等に扱う。
リスト・木などの汎用的なデータ型を扱うのが得意である。
代入文を（ほとんど）使用しない。（値を変更するよりも、新しいデータをつくる。）
オブジェクト指向
オブジェクト（object）中心にプログラムを組み立てる。
GUI などのように、良く似た型が数多く使われる場合が得意である。
論理型
論理式（〜ならば〜）の集まりがプログラムになる。
このような分類は慣習的なもので、また排他的なものではない。一つの言語は 2 つ以上のパラダイムの影響を受けていることが普通である。
すべてのパラダイムをカバーし、どんな用途のプログラムでも記述できるような一つの言語があれば理想的だが、現実には、そのような誰もが納得するような “究極の” 言語はこの世にまだ現れていない。そのため用途に応じて、いくつかのプログラミング言語を使い分ける必要がある。
また、型付け (typing) に関する考え方をもとに、プログラミング言語を分類する方法もある。一方の典型は、変数や関数の型宣言が必須で、コンパイル時に（静的に）型検査を行なってしまい、実行オブジェクト指向言語 – 第 A 章 p.2

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

時には型エラーを出さないプログラミング言語であり、もう片方の典型は、変数や関数の型宣言が必要なく、実行前には型検査をせず、実行時に（動的に）型エラーを発行する言語である。前者は厳格（不自由）だが安全、後者は自由だが危険と表現することができる。この分類も、実はさまざまな中間的なアプローチが存在する。
また、強い型付け (strong typing) と弱い型付け (weak typing) という分類もあるが、人によって定義がいろいろあり、はっきりしない。強い型付けの定義の一つは、型の間違った操作は（静的なチェックまた動的なチェックのいずれにせよ）必ず防ぐことができる、というものである。弱い型付けの定義の一つは、言語が暗黙の型変換をする、というものである。（この定義だと、強い型付けと弱い型付けは相反する性質ではない。）

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

Fortranの略。1957 年、IBM の J. Backus ら。

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

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

A.2.3 COBOLの略。1960 年頃。

•A.2.4の手続き型言語

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

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

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

A.2.5

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

C1973 年頃、AT&T のベル研究所の D. M. Ritchie により、記述するために開発された。というオペレーティングシステムを• Algol 系の手続き型言語• Pascal とは従兄弟のような関係にあたる。
• マシンレベルに近い記述が可能だが、Pascal と同様、構造化プログラミングに向く。

A.2.6 Lisp
1960 年頃、MIT の J. McCarthy。
格言 — “Lisp を知らない人は Lisp を再発明する。”の略といわれる。

•• （準）関数型言語• 対話的なプログラミング環境 （通常、インタプリタにより実行される）• メモリ管理を自動化（ゴミ集め）

A.2.7

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

A.2.8

ML

1980 年代に、スコットランドのエディンバラ大学。

。

• 関数型言語• パターンマッチング・多相型・型推論などを特徴とする。
• Objective Caml, F#なども ML の方言になる。

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

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

A.2.10

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

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

A.2.11

Prolog1970 年代はじめ、フランスのマルセイユ大学の A. Colmerauer。

。

• 一階述語論理に基づく論理型言語（論理式の証明 = プログラムの実行）• ユニフィケーション（単一化）、バックトラッキング（後戻り）などを特徴とする。

A.2.12

Smalltalk

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

A.2.13 C++
1980 年代前半、AT&T の B. Straustrap。
• Cにプログラミングのための仕組みを付け加えたもの。

• 仕様は巨大である。（電話帳並みと言われる）

A.2.14Java年、Sun Microsystems 社の J. Gosling ら。Java とはアメリカの口語でのこと。

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

注: 下記の JavaScript とはまったく別の言語なので混同しないこと。

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

A.2.15

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

JavaScript（ECMAScript）

1994 年 Netscape 社（ただし最初の名前は LiveScript だった。）•に基づくオブジェクト指向言語• HTML などに埋め込まれるスクリプト言語としてよく使用される。
• Java に（つまり C に）似た文法を持つ。（しかし Java とは全く別の言語）• 関数型言語的なプログラミングも可能である。
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 do it.”

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

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