Haskell: 初期リリースのPugs 6.0.0をビルドしてみよう
「Pugsが今熱い。」
そう思ってPugsの最新版であるバージョン6.2.11のソースコードを読んでみると、そのソースコードの量に圧倒されます。とてもじゃないけど、ソースコードを理解するのは難しそうです。開発が進めばもっとPugsの規模が大きくなって、もう追いかけるのは不可能。
でもそんなことで諦めるのは早いです。今がダメなら昔に戻ればいいんです。Pugsの初期バージョンなら、今とは違ってかなりシンプルなソフトウェアの構成になっているはずです。もしそうなら、Pugsのソースコードを理解できるようになる可能性が高くなります。(期待通り、今よりも遥かにシンプルでした!)
PugsのソースコードはSubversionで管理されていて、開発者でなくても誰でもそれにアクセス可能です(当然コミットは不可)。そのため、Pugsの任意のリビジョンのソースコードを自由にゲットできます。「任意のリビジョン」ということは、古いバージョンのPugsのソースコードもゲットできるということです。*1
Pugs 6.0.0のビルド
では、Pugsの初期リリースであるバージョン6.0.0のソースコードをPugsのリポジトリからゲットしてビルドしてみましょう。
PugsのビルドにはGHCが必要になるのですが、私はGHC 6.4.1を利用しました。もしかすると、Pugs 6.0.0のビルドには他のパッケージも必要かもしれません。技術評論社のSoftware Design 2006/03 号の特集でPugsのビルド方法が説明されているので、そちらを参考にして最新版のPugsをインストールしておくと良いかもしれません。(私のマシンにはPugs 6.2.11がインストールされていて、その時にいくつかパッケージをインストールしました。)
すんなりmakeできれば良かったのですが、途中でエラーになる所が数箇所あったので、Pugsのsrcディレクトリ以下にあるHaskellのコードをちょっとだけ修正しました。その修正を反映させるpatchは以下からゲットできます。
ビルドは以下のようにすればできるはずです。Pugs 6.0.0のソースコードをゲットするために、svnコメントにrオプションに4を指定しています。
% cd ~ % wget http://vaio.redirectme.net/pugs/patch/build_pugs6.0.0.patch % svn co http://svn.openfoundry.org/pugs -r 4 pugs6.0.0 % cd pugs6.0.0/src % patch < ~/build_pugs6.0.0.patch % cd .. % perl Makefile.PL % make
Pugs 6.0.0が動いた!
ビルドがうまくいったら、blibsディレクトリ以下にビルドされたpugsを実行してみます。
% ./blib/script/pugs .=====. __ __ ____ ___ _________________________________________ || || || || || || ||__' Pugs 6: Based on the Perl 6 Synopses ||====' ||__|| ||__|| __|| Copyright (c) 2005 Autrijus Tang || `====' ___|| `===' World Wide Web: http://autrijus.org/pugs || `====' Report bugs to: autrijus@autrijus.org == Version: 6.0.0 ========================================= Welcome to Pugs -- Perl6 User's Golfing System Type :h for help pugs> "Hello, " ~ "World" "Hello, World"
動きました!!*2
Perl 6から文字列の結合が、ドット(.)からチルダ(~)に変わるそうですが、インタプリタで実行した「"Hello, " ~ "World"」の結果からもわかるように、それもPugs 6.0.0ですでに実装されていたみたいですね。
Pugs 6.0.0ではほとんど何もできないと思いますが、規模が大きくなりつつあるPugsを、今回のように原点に戻って勉強していくと面白いかもしれませんね。