19
ププププププププププ ププププ プププププププププ ププププ

プログラミング言語論

Embed Size (px)

DESCRIPTION

プログラミング言語論. 理工学部 情報システム工学科 新田直也. 講義概要. 私の研究室: 13 号館 2 階 (13-206) 講義資料について : http://www.center.konan-u.ac.jp/~n-nitta/ 参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」 , 技術評論社 成績評価 : 主に試験 (1 回 ) ,演習,レポートで評価. 講義計画. 第 1 回 (4/6) プログラミング言語の種類と歴史 第 2 回 (4/13) 変数と型 第 3 回 (4/20) 式と評価 - PowerPoint PPT Presentation

Citation preview

Page 1: プログラミング言語論

プログラミング言語論理工学部

情報システム工学科新田直也

Page 2: プログラミング言語論

講義概要 私の研究室:

13 号館 2 階 (13-206)

講義資料について : http://www.center.konan-u.ac.jp/~n-nitta/

参考図書 :河西朝雄 : 「原理がわかる プログラムの法則」 , 技術評論社

成績評価 : 主に試験 (1 回 ) ,演習,レポートで評価

Page 3: プログラミング言語論

講義計画第 1 回 (4/6) プログラミング言語の種類と歴史第 2 回 (4/13) 変数と型第 3 回 (4/20) 式と評価 第 4 回 (4/27) 制御構造 ( ここらへんでレポート ?) 第 5 回 (5/11) 配列 第 6 回 (5/18) 手続き呼出し 第 7 回 (5/25) 記憶クラス 第 8 回 (6/1) 演習 第 9 回 (6/8) プリプロセッサ 第 10 回 (6/15) 分割コンパイル 第 11 回 (6/22) オブジェクト指向言語 (1) 第 12 回 (6/29) オブジェクト指向言語 (2) 第 13 回 (7/6) オブジェクト指向言語 (3) 第 14 回 (7/13) プログラミング環境 第 15 回 (7/20) 試験

Page 4: プログラミング言語論

ハードウェアとソフトウェア ソフトウェアがなければコンピュータは動かない.

「コンピュータ,ソフトがなければただの箱」

ソフトウェアの例: OS(Windows, Mac, UNIX…) アプリケーションソフト (Netscape , Word ,メーラー… ) 組み込みソフト ( 携帯電話, DVD プレーヤ,車,ロケット… )

ソフトウェアは誰かが作っている. 皆さんも作ることができる ( プログラミング ) .

Page 5: プログラミング言語論

プログラミング言語 プログラム :

コンピュータへの作業指示書 ( 命令列 ) .

プログラミング言語 : 作業指示書で用いる言語. 意味が厳密に定められている.

→解釈にあいまい性がない. コンピュータが自動で実行可能.

プログラム

Page 6: プログラミング言語論

プログラミング言語の種類 プログラミング言語の数は,おそらく 100 以上.

用途の違い. 技術の進歩. 趣味の違い.

プログラミング言語の分類. 低級言語と高級言語 手続き型言語と宣言型言語 コンパイラとインタプリタ ( プログラムの処理方式の

分類 )

Page 7: プログラミング言語論

低級言語と高級言語 低級言語 ( 低水準言語 ):

コンピュータ (CPU) を直接操作できる言語. そのコンピュータでできることはすべて指示できる. 細かい内容までいちいち指示する必要. ハードウェア毎に異なる. 例 ) 機械語,アセンブラ

高級言語 ( 高水準言語 ): より自然言語に近い ( 人間にとって理解し易い ) . 最終的に機械語に翻訳される. 例 ) Basic, C, Java…

Page 8: プログラミング言語論

機械語とアセンブラ 機械語は,数字 ( 命令コード ) の列.

アセンブラは,数字の列を単に見易くしたもの(ニーモニック).

機械語の命令とアセンブラの命令は 1 対 1 に対応する.

3E 00 CD 3C 57 32 7E A0 C3 55 39

3E 00 CD 3C 57 32 7E A0 C3 39 55

LD A, 00h CALL 573Ch LD A, [A07Eh] JP 5539h

機械語 アセンブラ

Page 9: プログラミング言語論

高級言語の誕生 FORTRAN(1957 年 )

科学技術計算用

ALGOL(1958 年 ) アルゴリズム用

COBOL(1959 年 ) 事務処理用

Lisp(1962 年 ) リスト処理用

手続き型言語

関数型 ( 宣言型 ) 言語

Page 10: プログラミング言語論

高級言語の発展 BASIC(J. ケムニー & T. カーツ , 1964 年 )

初心者向き会話型言語

構造化プログラミング (E.W.Dijkstra) 構造化 BASIC C (D.M. リッチー , 1972 年 ) Visual Basic(1991 年 )

人工知能 ( 論理型言語 ) PROLOG(1972 年 )

オブジェクト指向 C++(1983 年 ) Java(SUN, 1995 年 )

Page 11: プログラミング言語論

手続き型言語と宣言型言語 手続き型言語

処理の手順を与える. 現在の主流. コンピュータは与えられた手順通りに,処理を実行. プログラムの動作が予測しやすい反面,細かい指示を

いちいち記述する必要がある.

宣言型言語 必要な知識と,処理の目的を与える. 特に,研究者の間で広まっている. コンピュータは与えられた目的を達成するように,推論し

ながら処理を実行. プログラムの動作が予測しにくく,細かい処理を記述しに

くい.

Page 12: プログラミング言語論

手続き型と宣言型の記述例 階乗を計算する関数 fact

int fact(int x) {int y = 1;while (x > 0) {

y = y * x;x--;

}return y;

}

fact(x) == if x > 0 then fact(x – 1) * x else 1

< 手続き型 >

< 宣言型 ( 関数型 )>

Page 13: プログラミング言語論

構造化プログラミング E.W.Dijkstra が提唱.どんなプログラムも

go to 文を使わずに書ける ( 構造化定理 ).

構造化定理 :任意のプログラムは,連接,判断 (if 文 ) ,前判定反復 (while 文 ) を組み合わせて記述することができる.

int s = 0;start:

s++;if (s > 100)

goto fin;goto start;

fin:;

int s = 0;while (s <= 100) {

s++;}

goto 文を取ると…

Page 14: プログラミング言語論

オブジェクト指向プログラミング 発祥は定かではない.

SIMULA 67 (1967 年 ) SmallTalk (1972 年 )

現在の主流である. C++ (1983 年 ) Visual C++ (1992 年 ) Java (1995 年 )

データ構造と手続きをクラスとしてまとめて記述する. プログラムの可読性の向上. プログラムの再利用性の向上. プログラムのモジュラリティの向上.

Page 15: プログラミング言語論

プログラムの処理方式 プログラムはテキストファイルで書く ( ソースコード ) .

テキストエディタで書いてもよいが,専用のエディタの方が便利.

ソースコードを処理する方式には以下のものがある. コンパイラ方式 :

ソースコードを機械語に変換. ( 高速 ) インタプリタ方式 :

ソースコードを解釈しながら実行. ( 低速 ) 中間コード方式 :

コンパイラとインタプリタの中間. Java などで採用. ( 中速 )

処理方式がわからないとプログラミング言語は使えない !!

Page 16: プログラミング言語論

コンパイラとインタプリタ コンパイラはソースコードから機械語への変換プログラ

ム.

インタプリタはソースコードの解釈と実行を同時に行うプログラム.

ソースコード A コンパイラ& リンカ

実行プログラム A

入力 出力 実行

インタプリタソースコード B

解釈 & 実行

実行プログラム A

プログラム実行のための準備

Page 17: プログラミング言語論

中間コード方式 機械語は,機種に依存する. (Windows のプロ

グラムは, Mac では動かない ) いっぽう,インタプリタ方式は実行速度が遅い. 機種に依存しない部分だけを先にコンパイルす

る.ソースコード A コンパイラ 中間コード A

入力 出力 中間コード A インタプリタ

解釈 & 実行

機種が違っても良い

Page 18: プログラミング言語論

今日のまとめ プログラミング言語の種

低級言語

高級言語

手続き型言語

宣言型言語

関数型言語

論理型言語

非オブジェクト指向言語

オブジェクト指向言語

機械語,アセンブラ

BASIC , C

C++ , Java

Prolog

Lisp, Scheme, ML

Page 19: プログラミング言語論

本日のまとめ プログラミング言語の種

低級言語

高級言語

手続き型言語

宣言型言語

関数型言語

論理型言語

非オブジェクト指向言語

オブジェクト指向言語

機械語,アセンブラ

BASIC , C

C++ , Java

Prolog

Lisp, Scheme, ML