Slide 1

Slide 1 text

Purely Functional Smalltalk-72 Dec 2012 Minori Yamashita

Slide 2

Slide 2 text

自己紹介 山下実則(19) ● ハンドル: ympbyc ○ twitter, github …etc ● 代々木の12階でWebとスマホやってます。 ● Available for hire 9月の合同勉強会でLittleSmallscriptの発表をさせ て頂きました。今回もよろしくです。

Slide 3

Slide 3 text

Smalltalk-72

Slide 4

Slide 4 text

コード例 Smalltalk-72 Manualより

Slide 5

Slide 5 text

コード例 Smalltalk-72 Manualより

Slide 6

Slide 6 text

goto ☞ox←mx ☞oy←my

Slide 7

Slide 7 text

● The first real Smalltalk ○ -71は仲間内だけ? ● 記号がいっぱい ● 名前呼び出し。レシーバがトークンを食いながら 実行されて行く ● クラスベースオブジェクト指向 ○ クラスを関数としても呼び出せる ○ 継承はない (-76から) ● 本来は関数型的な思想 ○ 代入dis ● Lispの特殊形式をdisりながら作られた ○ 全てメッセージングなのが理想 概要だけ…

Slide 8

Slide 8 text

LispのマクロでSmalltalk-72

Slide 9

Slide 9 text

コード例

Slide 10

Slide 10 text

コード例 Smalltalk-72 Manualより

Slide 11

Slide 11 text

(☝ _ )☝ SO

Slide 12

Slide 12 text

(☞ _ )☞ COOL (☝ _ )☝ SO

Slide 13

Slide 13 text

Slide 14

Slide 14 text

☞x←y ☞x←:.

Slide 15

Slide 15 text

(☞ x ← : . (+ x 2)) ☟ (lambda (x) (+ x 2)) 定義側 ((foo 'bar) 5) ;=> 7 呼び出し側 これは、 (foo 'bar 5) と書きたい。後で出てきます。

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

to

Slide 18

Slide 18 text

to WAT DA FSCK IS Z

Slide 19

Slide 19 text

Z Combinator

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

to ⇒!?!?←#☞⇑!???!

Slide 22

Slide 22 text

(to animal (name) ( 'name ⇒ name '())) (define (animal name) (Z (lambda (SELF) (lambda (⇒) (if (equal? 'name ⇒) name '()))))) ☟ メソッド名が束 縛される

Slide 23

Slide 23 text

コード例2

Slide 24

Slide 24 text

デモ

Slide 25

Slide 25 text

ここからが本題

Slide 26

Slide 26 text

アラン ケイは言いました

Slide 27

Slide 27 text

"take the hardest and most profound thing you need to do, make it great, and then build every easier thing out of it" Alan Kay 1993

Slide 28

Slide 28 text

1970年、関数は弱かった。 ● LISPしかない ● ダイナミックスコープ ● 先行評価 ● 特殊形式に依存していた

Slide 29

Slide 29 text

そこでケイは 関数を"Make it great"するのではなく、 "The hardest and most profound thing" として、オブジェクトとメッセージングを選ん だ。 Smalltalkでこれは成功した。

Slide 30

Slide 30 text

時は流れ

Slide 31

Slide 31 text

オブジェクト指向言語は肥大化した。 ● C++, Java, Ruby ... ● 無節操なAlgol風構文追加 ● 副作用ベース ● オブジェクト指向誕生の動機が全く尊 重されていない

Slide 32

Slide 32 text

It is unfortunate that much of what is called "object-oriented programming" today is simply old style programming with fancier constructs. Many programs are loaded with "assignment-style" operations now done by more expensive attached procedures. Alan Kay 1993

Slide 33

Slide 33 text

いっぽうそのころ

Slide 34

Slide 34 text

関数が強くなっていった! ● クロージャ(レキシカルスコープ) ● メッセージパッシング(Scheme) ● 遅延評価 ● カリー化 ● 参照透明(副作用は最小) ● The most profound thingとして十分 な機能を獲得した

Slide 35

Slide 35 text

今、Take the most profound thing and make it greatしたらどうなるの か。

Slide 36

Slide 36 text

一例

Slide 37

Slide 37 text

Nadeko

Slide 38

Slide 38 text

遅延評価とカリー化とシンプルなオブジェクトシス テムを積んだ純粋関数型言語. S式を使うけどマク ロはなし。 構文はラムダ抽象と関数定義と関数呼び出しの3 つだけ!

Slide 39

Slide 39 text

遅延評価とカリー化とオブジェクト指向風メッセー ジングを積んだ純粋関数型言語. S式を使うけどマ クロはなし。 構文はラムダ抽象と関数定義と関数呼び出しの2 つだけ! Haskell, Io Smalltalk Lisp

Slide 40

Slide 40 text

Smalltalk-72風 使っているのは関 数だけ!

Slide 41

Slide 41 text

Actor

Slide 42

Slide 42 text

後置風関数 - リストが高階関数 語順がSmalltalkと同じになる 無限リスト 部分適用

Slide 43

Slide 43 text

コミット歓迎

Slide 44

Slide 44 text

おしまい!

Slide 45

Slide 45 text

The Early History of Smalltalk http://www.esug. org/data/HistoricalDocuments/Smalltalk80/Smalltalk History.pdf Smalltalk-72 Instruction Manual http://www.textfiles. com/bitsavers/pdf/xerox/alto/Smalltalk72_Manual. pdf Nadeko https://github.com/ympbyc/Nadeko 参考