○○型言語と呼ばれるために備えるべき最低限の条件についての検討

27
○○型言語と呼ばれるために 備えるべき最低限の条件 についての検討 @tsuda_ahr

Upload: tsudaa

Post on 08-Jul-2015

385 views

Category:

Software


1 download

DESCRIPTION

○○型言語と呼ばれるために 備えるべき最低限の条件 はなんだろう?というのを検討してみました。

TRANSCRIPT

Page 1: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

○○型言語と呼ばれるために備えるべき最低限の条件

についての検討@tsuda_ahr

Page 2: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

たとえば、こんな単語がございまして。

• 構造化言語

• オブジェクト指向言語

• 関数型言語

Page 3: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

免責

• 最低限、なにがあれば「○○型言語」と言えるのかを検討してみまし

た。

• 私見に基づいており、根拠などはあまりありません。

• なお、 ○○型言語についての最低要件は何か、を検討してみたので

あって、 ○○指向プログラミングや○○指向設計とかとはまるで関

連がありませんので、その点も注意してください。

Page 4: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

1.構造化言語であるための条件

Page 5: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

構造化言語の条件

• IF がブロック文で書けること。

以上。

____________________________

ちなみに if のブロック文とはこんなやつ

if (条件) {

処理

} 註)FOR と WHILE は非構造化BASIC でもブロック文なので、条件から排除

Page 6: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

BASIC(構造化対応以前)の場合

10 A = 100

20 IF A > 0 THEN GOTO 30 ELSE GOTO 50

30 A = 200

40 GOTO 60

50 A = 300

60 PRINT A

70 END

Page 7: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

構造化BASICの場合

10 A = 100

20 IF A > 0 THEN

30 A = 200

40 ELSE

50 A = 300

51 ENDIF

60 PRINT A

70 END

Page 8: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

ここでいう「構造化」とは何か

構造化定理(だいくすとら)に従ってプログラムが書けること。

構造化定理とは、以下の3要素でプログラムは書けるというアレ。

• 順次

• 反復

• 分岐

GOTO論争の元ネタ。

→ 分岐のために GOTO を使わなくていい = 構造化プログラミング言語

Page 9: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

以下はおまけ機能

① 変数のスコープ (ローカルスコープ)

② 引数 / 戻値

③ 閉じたサブルーチン(=C言語的な関数)

④ 去勢された GOTO (exit for とか)

Page 10: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

閉じたサブルーチン?

BASIC ではこんな記述が可能だった

10 PRINT "AAA"

20 GOSUB 50

30 PRINT "CCC"

40 END

50 PRINT "BBB“

60 RETURN

61 GOTO 30 ←RETURN の代わりにこう書いてもエラーにならない

# エラーにはなりませんが、メモリリークします。# 最近の Visual Basic とかでは不可です。

ルーチンの境界

Page 11: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

2.オブジェクト指向言語であるための条件

Page 12: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

オブジェクト指向言語の条件

• new ができること

(this が使えること)

以上。

Page 13: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

以下はおまけ機能

① 継承

② 多態性

③ コンストラクタ

④ メッセージパッシング

⑤ カプセル化

⑥ スコープ (private / protected 等)

⑦ 名前空間

⑧ テンプレート (ジェネリック)

⑨ 例外機構

Page 14: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

Cの場合 (new がない場合)

Cの場合、こう書くと ゲーム盤はプログラムで 1枚しか持てない。

enum FACE {NONE, DARK, LIGHT

};

void main() {piece_put(3,3,DARK);piece_put(4,4,DARK);piece_put(3,4,LIGHT);piece_put(4,3,LIGHT);

}

int _board[8][8]; // ゲーム盤

void piece_put(int x,int y,int face) {

_board[x][y] = face;

// 反転処理}

main.c board.c

なので、複数のゲーム盤を持たせたい場合は、piece_put(*board, x, y, face)

みたいな感じで、呼び出し側が操作するゲーム盤を指定します。

Page 15: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

結局のところ オブジェクト指向って。

• 構造化プログラミング言語 (Cとか)

board b; // 構造体

piece_put(&b, x, y, face);

• オブジェクト指向プログラミング言語

var b = new board();

b.piece_put(x, y, face);

移動しただけ

Page 16: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

3.関数型言語 (函数型言語?) であるための条件

Page 17: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

関数型言語の条件

今回の条件は2つ

1) 関数を変数に代入できる

2) 制御構文も文ではなく式 ( 具体的には IF が値を戻す )

Page 18: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

変数?代入?

せんせー。(純粋)関数言語には、変数や代入がないと聞きました!

やかましい! 却下!!

気になる人は「束縛」とか「破壊的代入」とか「シャドーイング」とかを調べてみてください。

Page 19: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

文と式

• 文(STATEMENT)

値の戻らない命令文のこと。

if / for / return など。

• 式(EXPRESSION)

値を戻す式や関数のこと。

• 条件式 a == b

• 論理式 a & b

• 算術式 a + b * c

• 関数 sin(a)

Page 20: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

でも関数型言語でないと、これらは不可なのか?

実はそうでもない。 _| ̄|○

1) 関数を変数に代入できる

→ Javascript / C# などでもできる。

2) 制御構文も文ではなく式

→ Ruby の If は値を戻す。

Page 21: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

関数が変数に代入できる

function test(){return function(x)

{return x * 2

}}

var a = test()alert( a(10) )

Javascript

戻り値に引数を渡して実行できる。

関数で戻せる。

Page 22: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

if が式

Ruby F# (関数型言語)

a = 100

b = if (a >= 100) a = 200

else a = 300

end

printf "%d¥n",a

結果: 200 結果: 100

let a = 100

let b = if (a >= 100) then let a = 200()

else let a = 300()

printf "%d¥n" a;;

Page 23: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

関数型の式の特徴

• 閉じている。

• 式の外のデータは参照できるが、式の外のデータを操作することができない

(基本的には)

Page 24: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

関数型の場合、正しくはこんな感じで書きますF# (関数型言語)

結果: 200

let a = 100;;

let a = if (a >= 100) then 200

else 300

printf "%d¥n" a;;

Page 25: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

以下はおまけ機能

• 参照透過性

• 副作用がない

• カリー化

• メモ化

• 部分適用

• 関数合成

• 並列動作に強い

Page 26: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

まとめ

オブジェクト指向とか関数型とか言っても怖くないよ!ってことで。

(意味不明)

Page 27: ○○型言語と呼ばれるために備えるべき最低限の条件についての検討

ご清聴ありがとうございました