Self 処理系を色々試してみました
Self やるぞー!と鼻息をぷんぷんさせていたところ、純正 Self はとってもプラットフォームを選ぶことが判明しました。動くのは、
のみという狭さ。悔しい、MacOSX で動くのならば Linux で動いて欲しい。ていうか MacOSX は PPC も Intel も大丈夫って言ってるのに Solaris については SPARC 以外言及がないのがなんとなくもの悲しいところです。
なぜこんなにプラットフォームを限定しているの?と思うわけですが、これは Self の先進性であったらしい VM が JIT で高速化を実現していたから、という事情のようです(つまり各プラットフォーム用に JIT 用意するのが大変とかそういうわけなのだろう、と想像しています)。え、Java の JIT の元が Self にあったりするわけなの? ついでに squeak の Morphic って Self 由来なの?
というわけで、Self はプロトタイプベースを実現した先進性だけでなく、実用性を目指して JIT を実現した、とても夢に溢れた言語であったわけですね。Cの半分くらいの速度で動いていたという話もどこかに書いてありましたから、なかなか大したものです。すごいですよね!
Self 処理系
さてしかし、これでは Self を試せません。そういうわけで純正をあきらめて他の処理系にあたってみました。
- http://gliebe.de/self/index.html 純正 Self を x86 に移植
- dSelf : 分散オブジェクト拡張の Self
- OpenSelf : プロジェクト死んでるように見える上にレポジトリ自体はどこ?
- http://www.lsi.usp.br/~jecel/tiny.html : Release 0 はまだパーサだけ、Release 1 は Self 処理系がないと動かない
- http://www.squeak.cz/Squeak/95 : squeak で動く Self っぽいもの、でも文法も違うし別言語と考えた方が良さそう
というわけで、 Self/x86 もしくは dSelf のみが希望を持てるわけですが、残念ながら dSelf も分散オブジェクトを実現するために Self と 100% 互換というわけにはいかないそうなので涙を飲んで我慢(動作確認まではしました、dSelf は dSelf でなんだか面白そうです)。よって私には Self/x86 しか選択肢はありません。
Self/x86 の使い方
Self/x86 は x86 であれば一応 linux でも cygwin でも動くそうです。ただしソースからコンパイルするのは難しそうです。というのもどうも古い gcc でしかコンパイル出来ないような感じだからです。なので素直にバイナリパッケージをダウンロードして使いましょう。
http://gliebe.de/self/download.html
tar.gz を展開すると Self という実行ファイルが出来ますので、これを実行すると
Self Virtual Machine Version 4.1.10, Sun 08 Dec 02 16:51:16 Linux Copyright 1989-2002: The Self Group (type _Credits for credits) VM#
のように表示されます。ようやく Self が試せますね!やったね!
でも Version 4.1.10 って、大部古いようですけど、大丈夫なのかな。とりあえず Empty.snap をダウンロードしてこれを使ってみます(smalltalk と同じで環境丸ごと保存して使いまわす感じなんですね)。
% ./Self -s Empty.snap Welcome to the Self system! (Version 4.1.5) Copyright 1992-2002 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. Type _Credits for full credits. VM version: 4.1.10 "Self 1" X I/O Error .. aborting process.
おお、いきなりのエラー。メッセージの示すところはXに接続できないとかそういう事なのでしょうか。これでGUIは絶望的になりましたが、気にしない事にします。
"Self 1" lobby. lobby
うん、とにかく動きました。不安が募るばかりですが、頑張ります。