本業がなんだかんだと忙しく更新をサボっているうちに前回から5か月も経ってしまいました。その間ほとんど世の中の動きについていけてないのですが先日Parrot 1.2.0/Rakudo development realease #17がアナウンスされたので遊んでみました。
こちらがボンヤリとしているうちに
調べてみると
(追記)
parrot/rakudoまわりにはそこそこ動きがあったようで、手元でperl6処理系が動くようになるのにえらく手間取りました。以下、Mac OS X 10.5.7での結果です。
parrotのビルド
parrotのビルドは以前とそれほど変っていません。ソースtarballを取ってくるか、subversionリポジトリからチェックアウトしてビルドするだけです。
$ svn co https://svn.parrot.org/parrot/trunk parrot
$ cd parrot
$ perl Configure.pl
Parrot Version 1.2.0 Configure 2.0
Copyright (C) 2001-2009, Parrot Foundation.
Hello, I'm Configure. My job is to poke and prod your system to figure out
how to build Parrot. The process is completely automated, unless you passed in
the `--ask' flag on the command line, in which case I'll prompt you for a few
pieces of info.
Since you're running this program, you obviously have Perl 5--I'll be pulling
some defaults from its configuration.
init::manifest - Check MANIFEST.....................................done.
init::defaults - Set Configure's default values.....................done.
.........
.........
Okay, we're done!
You can now use `gmake' to build your Parrot.
After that, you can use `gmake test' to run the test suite.
Happy Hacking,
The Parrot Team
$ make
Compiling with:
xx.c
/usr/bin/gcc-4.0 -I./include -I/opt/local/include -fno-common -no-cpp-precomp -pipe -I/usr/local/include -I/opt/local/include -pipe -fno-common -Wno-long-double -DHASATTRIBUTE_CONST -DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NONNULL -DHASATTRIBUTE_NORETURN -DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED -DHASATTRIBUTE_WARN_UNUSED_RESULT -falign-functions=16 -fvisibility=hidden -funit-at-a-time -maccumulate-outgoing-args -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wdisabled-optimization -Wendif-labels -Wextra -Wformat -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wmissing-braces -Wmissing-field-initializers -Wno-missing-format-attribute -Wmissing-include-dirs -Wpacked -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wno-shadow -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wtrigraphs -Wundef -Wunknown-pragmas -Wno-unused -Wvariadic-macros -Wwrite-strings -Wbad-function-cast -Wdeclaration-after-statement -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wnonnull -DDISABLE_GC_DEBUG=1 -DNDEBUG -O3 -DHAS_GETTEXT -Wno-shadow -DHAVE_COMPUTED_GOTO -I. -o xx.o -c xx.c
perl tools/build/vtable_extend.pl
......
......
c++ -o pbc_info \
src/pbc_info.o \
-L/Volumes/repository/work/svn/parrot/blib/lib -L/Volumes/repository/work/svn/parrot/blib/lib -lparrot -lpthread -lm -L/opt/local/lib -licuuc -licudata -lpthread -lm -lm -lutil -lgmp -lreadline -lintl -undefined dynamic_lookup -L/opt/local/lib
$
これでparrotという実行ファイルができているはずです。
rakudoのビルド
rakudoは以前はparrotのソースツリーに入っていましたが、いつのまにやら独自のリポジトリに移っていました。こちらはsubversionではなくgitを使っています。
$ git clone git://github.com/rakudo/rakudo.git
......
$ cd rakudo
$ perl Configure.pl \
--parrot-config=<path>/<to>/parrot/parrot_config
......
Reading configuration information from parrot_config ...
Died at Configure.pl line 104.
$
うまくいきません。調べてみると
parrot_config --dumpの出力を読むところでコケているようです。手で起動してみると確かにダメです。
$ cd ../parrot $ ./parrot_config --dump ...... ...... execcapable => '0' flex_version => ''[1] 10491 bus error ./parrot_config --dump $この現象はMac OS Xだからなのかもしれませんが
rakudo関係のメーリングリストを検索してみたらLinuxでもそういうことが起きると言ってる人がいるようです。FreeBSD 7.2では問題ありません。
parrot_configのソース(PIRで書かれてます)を見てみたりもしたのですがよくわかりません。あれこれ調べてみても結局よくわからなかったのですが、ふとparrotのビルド時にperl Configure.pl --optimizeと、--optimizeオプションをつけてみたところparrot_config --dumpもコケなくなりました。このオプションはperl5のコンパイルオプションをparrotのコンパイル時にも使うというものらしいのですがなぜこれでコケなくなるのかは、そこまで追えていないのでよくわかりません。
parrot_configがコケなくなったので気を取り直して再度rakudoをビルドします。
$ perl Configure.pl --parrot-config=../parrot/parrot_config Reading configuration information from ../parrot/parrot_config ... Creating Makefile ... Cleaning up ... You can now use 'gmake' to build Rakudo Perl. After that, you can use 'gmake test' to run some local tests, or 'gmake spectest' to check out (via svn) a copy of the Perl 6 official test suite and run its tests. sb254$ make /Volumes/repository/work/svn/parrot/parrot /Volumes/repository/work/svn/parrot/runtime/parrot/library/PGE/Perl6Grammar.pbc \ --output=src/gen_grammar.pir --encoding=utf8 \ src/parser/grammar.pg src/parser/grammar-oper.pg /Volumes/repository/work/svn/parrot/parrot /Volumes/repository/work/svn/parrot/compilers/nqp/nqp.pbc --output=src/gen_actions.pir \ --encoding=fixed_8 --target=pir src/parser/actions ...... ...... /usr/bin/gcc-4.0 -o perl6.o -I/Volumes/repository/work/svn/parrot/include -I/opt/local/include -fno-common -no-cpp-precomp -pipe -I/usr/local/include -I/opt/local/include -pipe -fno-common -Wno-long-double -DHASATTRIBUTE_CONST -DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NONNULL -DHASATTRIBUTE_NORETURN -DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED -DHASATTRIBUTE_WARN_UNUSED_RESULT -falign-functions=16 -fvisibility=hidden -funit-at-a-time -maccumulate-outgoing-args -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wdisabled-optimization -Wendif-labels -Wextra -Wformat -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wmissing-braces -Wmissing-field-initializers -Wno-missing-format-attribute -Wmissing-include-dirs -Wpacked -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wno-shadow -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wtrigraphs -Wundef -Wunknown-pragmas -Wno-unused -Wvariadic-macros -Wwrite-strings -Wbad-function-cast -Wdeclaration-after-statement -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wnonnull -DDISABLE_GC_DEBUG=1 -DNDEBUG -O3 -DHAS_GETTEXT -c perl6.c Compiled: perl6.o c++ -o perl6 perl6.o /Volumes/repository/work/svn/parrot/src/parrot_config.o -L/Volumes/repository/work/svn/parrot/blib/lib -L/Volumes/repository/work/svn/parrot/blib/lib -lparrot -undefined dynamic_lookup -L/opt/local/lib -lm -lutil -lgmp -lreadline -lintl -lpthread -lm -L/opt/local/lib -licuuc -licudata -lpthread -lm Linked: perl6 $
perl6という実行ファイルができているはずです。動かしてみると、、、
$ ./perl6 -e "say 'hello';" hello $無事動きました。 わかってしまえば30分もあればできることですが今回はナゾの
bus errorのためにperl6をビルドするまでにかなり労力を使ってしまいました。次回(いつだ?)はこのperl6でもっと遊んでみたいと思います。
(追記)
rakudoのビルド時のconfigurationで--gen-parrotというオプションを付けると適切なバージョンのparrotのソースをリポジトリからチェックアウトしてビルドし、そのparrotを使ってrakudoをビルドしてくれますが、この時に--gen-parrot-optionでparrotのビルド時に与えるオプションを指定できることに気がつきました。すなわち、rakudoで遊びたいだけという場合はチェックアウトしたrakudoのソースツリーで
$ perl Configure.pl --gen-parrot \
--gen-parrot-option="--optimize"
とするだけですね。
コメントする