[View] [Edit] [Attachments] [History] [Home] [Changes] [Search] [Help]

Smalltalk 72

Uploaded Image: st72.png
Smalltalk 72 とは、パロアルト研究所にて開発された最も初期の Smalltalk です。
当時アラン・ケイは LOGO の影響を非常に強く受けており、文法も LOGO と良く似て
います。いわばオブジェクト指向版 LOGO のようになっていて、その帰結として
実はドリトルとも非常に似たシステムになっている所が興味深いです。

インストールと起動

(Smalltalk 72 のエミュレーターを Squeak 上で簡単に動作させる事が出来ます。http://d.hatena.ne.jp/sumim/20060121/p1 の通りに作ったイメージを http://metatoys.org/pub/smalltalk72.zip において置きますのでこれを使うと早いです。)

SqueakMap よりインストールする。

自動的に Welcome to Smalltalk-72 のウインドウ(ST72 トランスクリプト)が開く
ウインドウ内の t USER の行へカーソルを持っていって do it すると、
対話ウインドウが開きます。
↑キーで入力なので、例えば 3 + 4 ↑ と打ち込むと答えの 7 が現れます。

最初からやり直したい場合は
ST72Context classPool at: 'Trans' put: nil.
ST72Context bootFrom: 'ALLDEFS'

でもう一度ブートする事が出来ます。

Smalltalk 72 入門

それでは、マニュアルを見ながらいくつか実験をして見ましょう。
ちなみに、対話ウインドウの中では alt + V でペーストが効きますので、このページから
コピペすると簡単かと思います。

簡単なメッセージ

3 * 4 ! (! で↑カーソルキーを現します)
355.0 / 113 !
done !

done (もしくは ctrl-D) でセッションを終了します。再起動は次のコマンドです。
disp show. disp frame. USER

タートルグラフィック

Uploaded Image: st72pen.png

以下を入力してみてください。! が↑カーソルボタンという事を忘れずに。
@ go 100 !
@ turn 90 go 100 !
redo !                       (直前のコマンドを実行します。)
@ erase home !               (画面をきれいにする)
for i _ 1 to 200 do (@ go i * 2 turn 89) !
@ repeat (@ goto mx my) !    (カーソルの場所にタートルが付いてくる。 alt + . で中断)

@ を打ち込むと画面にはかわいいスマイリーが現れます。このスマイリーと色々
お話する事によって絵を書く事が出来ます。
ちなみに、mx my は現在のマウスカーソルのXY座標を表しています。goto で座標に移動しろと
言う意味になります。

プログラムを書く

Uploaded Image: square.png
to square (do 4 (@ go 100 turn 90)) !
square !

さて、このあたりから面白くなってきました。 @ go 100 turn 90 を4回繰り返すと
四角になるのですが、これに square という名前を付けて何度でも呼べるようにしました。さらに、
to square (" size _ :.
   do 4
	  (@ go size turn 90)) !
square 200 !

今度は大きさを変える事が出来る四角です。
本当はエディタで square を編集できるみたいですが、壊れているので丸ごと打ち直してください。
ここでは一度に新しいアイデアが出てきました。

Joe との対話

Uploaded Image: joe.GIF
次はSmalltalk のチュートリアルでは割と良く出る Joe との対話です。
to box var : x y size tilt :
   (%draw   ? (@ penup goto x y pendn up. @ turn tilt. square size.)
    %undraw ? (@ ink _ "white. SELF draw. @ ink _ "black)
	%turn   ? (SELF undraw. "tilt _ tilt + :. SELF draw.)
	%grow	? (SELF undraw. "size _ size + :. SELF draw.)
	isnew   ? ("x _ "y _ 256. "size _ 50.
			   "tilt _ 0. SELF draw)) !

to square length
   ("length _ :.
    do 4 (@ go length turn 90)) !

"joe _ box !
joe grow 50 !
joe turn 30 !
joe grow -20 !

"jill _ box !
repeat (joe turn 20. jill turn -11) !

いくつか上手く動かない点を回避する為にマニュアルと違うプログラムになっています。
これでアニメーションの実験が出来ましたね。ここではさらに新しいアイデアが登場します。
実は、ここでもう一つ大切なメッセージ addto が登場するはずだったのですが、
上手く動かなくて諦めました。これは、すでに定義されているクラスに新たなメッセージを追加するものです。

ライブラリ(ALLDEFS) を見ると、% というシンボルはどうやら何重にもネスト可能で、
ライブラリはいわば巨大な swich - case 文になっています。こういうやり方は、昔の
forth を彷彿とさせるのですが、柔軟過ぎて混乱しやすいという欠点があります。
現行の Smalltalk が swich 文を全く持たないのはその反省があったのかも知れません。
(このあたり全くテキトウな推測です。)

http://minnow.cc.gatech.edu/squeak/389 より(アラン・ケイ 15 Jan. 2000)

最初期の Smalltalk (Smalltalk-72) が完全に拡張可能な文法(実は、クラスを書く事がそのまま文法を書く事になっていた)を持っていた事に興味をもたれると思います。
この仕組みは上手くいきました。ただ、あまりにも自由すぎてユーザの興味に応じてバベルの塔を引き起こしてしまいがちです。また、他の少数の本当に良い拡張可能言語(Ned の Iron's IMP のような)の実験になっていました。
極端な拡張性は、誰でも読めて、沢山のクラスが定義されても大丈夫なように次のメジャーバージョン(Smalltalk-76)で取り除かれました。つまり、言語構造を仕事に合うように作るより、強力な意味を持つ事のほうが重要な事が分かったのです。
この方向性は Smalltalk-80 ではやりすぎで、次の世代、大抵は日曜プログラマで、読みやすく的を得たコードが必要な人々にはもっと実験が必要だと思います。

内部

対話ウインドウ内だけでなく、最初に表示される ST72 トランスリプトの中でも ST72 の
コマンドを実行する事が出来ます。しかし、まだデバッガは実装されていないようですので、
もしもデバッグをしたい場合、内部を覗いてみたい場合には Squeak 標準のデバッガを
使うと良いでしょう。
ST72Context runAsUserText: '3 + 4'
のようにして、ST72 の表現を通常のワークスペースからでも実行できるようになります。

リンク


Link to this Page

propella home