Windows で GNU Smalltalk を少しだけ遊ぶ

少し前に きむら(K)さんち経由で知った、GNU Smalltalk で書かれたプログラミングの入門書 「Computer Programming using GNU Smalltalk」、その Appendix の中の Windows へのインストールの章に、

However a process is going on and there is a possibility that a Windows installer will be published soon.
You can get the installer from GNU Smalltalk official site:
http://smalltalk.gnu.org/download
as soon as it is released.

と書いてあったのを見て、わたし、wktkしてしまってます。


日頃お仕事等で使っている Windows で、Python とかのようにファイルベーススクリプトSmalltalk ・・というのは、わたしのちょっとした夢なのです。けれど、昔、 2.xのころ Cygwin でトライしたときは わたしのスキルが全然なさすぎて、上手く動かせなかったのですよね、しくしく。

そんな Windows 育ちの ワナビプログラマなわたしとしては、「インストーラの登場を刮目して待て!」なぁんて言われれば、それは靴下をベッドにつり下げる子供のように成ってしまうのです。はやく、こい、こい♪


* * *


とはいえ、待っている間にテンションが下がってしまうのも、モッタイナイもの。今現時点で、Windows で お手軽に GNU Smalltalk を愉しむ方法はあるかな?、とちょっと仕事中にゴソゴソ捜してみたら、すると一年前くらいに放流された GNU SmalltalkWindows インストーラ を見つけました。

Nabble - GNU Smalltalk Windows Installer (Beta)

ベータ版ですし、動作はあんまり期待できないかな?と思ったのですが、GNU Smalltalk 3.0b ベースなので、「Computer Programing with GNU Smalltalk」のサンプルくらいは動くかな?と、お試しインストール。

インストールしてみれば、「GNU Smalltalk 3.0b」とだけ書かれた 超いい加減 な readme.txt とかに「とりあえず試しに作ってみた一発目的」な雰囲気を感じ早くもビビりまくりです。

が、小手調べに動かした対話モードは、普通に動きます。じゃあ、こっちの方はどうかしら、とかとか試してみると、

みたいに、ちょっと弄るだけでシステムブラウザも立ち上がってしまい少々ビックリ。(動きはちょっと変だったけれど)


けれど、GUISmalltalk なら Squeak があるのです。肝心なのは GNU Smalltalk 独特の ファイルベーススクリプト。というわけで、ちょっとおためし。

"zenra.st"

Object subclass: ZenraSpeaker [

    say: source [
        "「全裸で」と付け足して コンソール出力する"
        <category: 'printing'>

        Transcript show: '全裸で'; show: source; cr.
    ]

]

| zenraBot |
zenraBot := ZenraSpeaker new.
zenraBot say: 'hello!'.

サンプルが無理矢理過ぎですが(^^;、こんな zenra.st ファイルを作って*1

C:\Program Files\GNU\Smalltalk\smalltalk>gst zenra.st
全裸でhello!

にゅー、普通に動きますね!


ざっと弄った限りでは標準入力 を上手く扱えないみたいで、ユーザ入力を受け取るサンプル(user_imput.st)だけはダメっぽいのですが、他のサンプルは問題なく動きます*2。十分 このドキュメントの 独習用に使えちゃいますね。

日常使いに出来るかは、ちょっと微妙ですが、正規表現も普通に使えますし、普段 Python でやっているようなことを Smalltalkで!・・という夢に向かって大きく一歩前進。ニンマリです。

*1:全然関係ないけれど、Transcript cr; show: じゃないのが書いてて気持ち悪かったです

*2:但し、添付の watch.st はプログラム側にバグがあるので 落ちちゃいます。WaterResistantWatch >> listYourFeatures メソッドの 「self listYourFeatures.」 を 「super listYourFeatures.」に書き換えるべし