Next: この講義では
Up: 計算機言語 I 第 1
Previous: プログラミング言語は, なぜ必要なのか
von Neumann 型のコンピュータが生みだされて以来 50年以上経ちますが,
その間に様々なプログラミング言語が開発されました.
まず, プログラミング言語はプログラムを処理する形態で,
次の2つに大きく分類されます.
- Interpreter(通訳系と訳す事がある)
- 処理を記述したものから, 1部分のまとまりのある処理内容を
機械語に変換しては実行し, それが終わると次の部分に移る, と
いうことを繰り返して, 処理をします. つまり, 同時通訳の人が
外国語から日本語に通訳するように, プログラミング言語の内容を
その場で機械語に通訳して, 計算機に実行させているのです.
計算機概論 I で取り上げた, awk は interpreter です.
- Compiler(翻訳系と訳す事がある)
- 処理の記述を一度に全部機械語に翻訳してしまい,
その後にそれを実行します. コンピュータは, 機械語に翻訳された
内容を読みこみ, それを実行します.
この授業では, compiler を取り上げます.
また, プログラミング言語は, その文法が違えば異なる言語です.
文法のなかで, 良く知られているものを挙げると
次のようなものがあります. 注意して欲しいのは, 同じ文法を持つ言語でも
compiler だったり interpreter だったりすることがあることです.
- assembly 言語
- プログラミング言語を作るに当って, 最も単純な発想は
コンピュータに対する命令である 2 進法の並びを,
1対1で人間が理解できる言葉に対応させることです.
この対応で1つの言語が作れます. それが, assembly 言語です.
assembly 言語の処理系のことを assembler といいます.
この言語を作るのは簡単ですが, 機械語で出来ることがあまりにも
単純な事しかできないため, この言語を使うプログラミングは
人間にとってはやさしいことではありません.
例えば, 画面に 1 を表示させるのも, assembly 言語を使うと
結構大変な仕事になります. 今でも, コンピュータ(より一般的には,
携帯電話やコンピュータ内蔵型家電製品等)の電源投入直後の
仕事を記述するのには, 必要な言語です.
また, 機械語と1対1に対応しているということから,
コンピュータの設計が違えば, assembly 言語も違うということに注意して
ください. すなわち, assembly 言語という名前の全ての
コンピュータに共通の言語があるわけではありません.
assembly 言語のようにハードウェアに密着した言語を, 低級言語といいます.
それに対し, より人間に近い言語を高級言語といいます.
高級言語と呼ばれるものの特徴は, コンピュータが違っても
(原理上は)まったく同じ記述でプログラミングが出来るということです.
- Fortran
- Formula transformation の略です.
最も早い時期に作られた, 高級言語です.
主に科学技術用数値計算をするためのプログラミング言語です.
古くからあるために, 数値処理のためのパッケージとかが豊富で,
現在でも用いられています.
ただ, プログラミング理論とかが無い時代の産物なので,
最近の理論から見ると良いプログラミング言語とはいえないようです.
実際問題として, 特に Fortran 用のパッケージを使う必要性がないのなら,
もう勉強する必要もないと思います
- COBOL
- Fortran と同時期に作られた高級言語ですが,
こちらはもっぱら事務処理用言語として開発されました.
マスコミを賑わした2000年問題の多くは, COBOL を用いて
作られたプログラムでした.
- ALGOL
- Fortran, COBOL と同時期に開発された言語です.
こちらの方は, 数学者が中心となって作ったといわれるだけあって
理論的にすっきりした言語だそうです. ただ, あまり普及しませんでした.
その理由はよくわかりませんが, 想像するに, あまりにも言語仕様が巨大に
なったことと, 標準での入出力の定義が与えられなかった事だろうと思います.
- Pascal
- スイスの N. Wirth という人が, 教育用目的に ALGOL を元に
言語仕様を小さくし, さらに標準の入出力を定義して開発しました.
1980 年代には結構流行し, 現在でも比較的使われています.
現時点でも, プログラミング入門用言語としては, 良いものだと思います.
ただ, 元の言語仕様では大きなプログラムを書くにはちょっと不便です.
なお, パスカルから派生した言語として modula-2 と Ada があります.
またその孫ともいえる, Oberon という処理系もあります.
Oberon は, IBM-PC 互換機とか Macintosh では無料で処理系が
ETH(何の略かは忘れました)から入手できます.
- LISP
- List Processorの略です. プログラム言語としては,
かなりの歴史を持っています. やたら括弧をつかってプログラムをするのが,
特徴です. これと親戚の言語として, Schemeがあります.
人工知能や Expert Systemの分野では, 良く用いられます.
例えば数学では, 数式処理系(数式のまま微積分をしたり,
行列計算をしたりする処理系)の Macyma や Reduceは, LISP
をつかって開発されています. 計算機概論 I の授業で取り上げた emacs の
拡張機能も, LISP の親戚である Emacs LISPで作られます.
以前は方言の多い言語でしたが, 現在では, Common LISPと言う規格が作られました.
ただ, Common LISPの言語仕様もかなり大きなものになっています.
UNIX用では, 京都大学で開発された KCL(Kyoto Common LISP)が, かつては有名
した. これは今では, GCL(Gnu Common Lisp)に発展しています.
- Prolog
- かつて, 日本のどこかの省庁の次世代コンピュータの開発言語として
採用されました. 三段論法をそのままプログラムしていくような言語です.
- C
- 1970年代に UNIXのシステム記述用言語として開発されました.
OSのプログラムには, それまでは, assembly言語を用いていましたから,
そこに高級言語を用いたということで, これは画期的なことでした.
しかし, そもそもは assembly言語の代わりとして作られたという経緯があるため,
比較的低級な言語になっています.
- SmallTalk
- 1970年代に, 新しいプログラミング言語として Xerox
の研究所で開発されました. オブジェクト指向という新しいプログラミング規範
(paradigm)を導入した言語です. もともとは, 言語だけでなく
OSも一体となった環境でしたが, 残念ながらその環境はあまり
世に受け入れられませんでした.(値段の問題だと思います)
OSの操作環境のほうは, 良く似た考え方が Macintoshに採用され
Windows等, 最近の主流となっています.
オブジェクト指向プログラミングの考え方も, C, Pascal, Oberon
LISPなどに導入されて, Objective-C, C++, CLOS等の言語となっています.
当時の Xeroxでは, 現在の主流となっている技術,
例えばワークステーションの概念とか, Ether Netによるネットワーク
がすでに考えられており, Xeroxなしでは現在のコンピュータはありえないのですが,
当の Xeroxがそこから余り利益を得ていないのは, 歴史の皮肉です.
- BASIC
- アメリカで, プログラミング入門用として開発されました.
(開発者たちの名前は忘れました)多くのパソコンに入っていたため,
一躍有名になりました. 本来の BASIC の言語仕様は, 割ときちんとしているのですが,
パソコンに移植されたものが言語仕様の一部分だったため,
「良い」言語としては, あまり普及していません.
(本来の言語仕様を True BASIC というそうです)
なお, いままでの指導要領では高校の数学で, 「悪い」BASIC を使用しています.
また, 大学入試センター試験にも, BASIC の問題が出題されていますが,
本来の BASIC の規格からは外れた「悪い」内容だそうです.
- Perl
- 最近少し流行している処理系です.
これは, compiler ではなく interpreter です.
だいたい
の感じです.
つまり, shell のように command を実行させることが出来,
awk のように手軽な記述が可能で, C のように何でもできる言語です.
(C の中で, command 実行はしない事はないが, 処理系に依存するので大変.
shell は command 実行以外はほとんど出来ない.
awk も文書処理以外の処理は, 余り得意でない. )
UNIXのシステム管理者を目指すなら, 勉強して損は無い言語です.
- Java
- WWWで閲覧するものに色々な機能を付け加えるために
開発されました. C言語に似た構文とオブジェクト指向な環境が
備わっています. 最近の WWWの流行にあわせて, これも流行しています.
なお, 計算機概論 I の授業でやった awk scriptを書くこともプログラミングですし,
数式処理系でもプログラミングが出来ます.
以前は, 数式処理系 Mapleを用いたプログラミングを,
授業で取り上げました. さらには, パソコン用の表計算ソフトにも
プログラミングの機能がついていますし, 数式を綺麗に記述するために
使った LATEXでも, 計算をさせる事ができます. 上では書いていませんが,
データベイスにアクセスするためのプログラミング言語(SQLと呼ばれるものが
標準的に用いられます)も, 実用上は重要です.
そういう意味で, 上で列挙した言語を使うことが
プログラミングである, とは考えないでください.
Next: この講義では
Up: 計算機言語 I 第 1
Previous: プログラミング言語は, なぜ必要なのか