最近のperl6事情

| | コメント(0) | トラックバック(0)
本業がなんだかんだと忙しく更新をサボっているうちに前回から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-optionparrotのビルド時に与えるオプションを指定できることに気がつきました。すなわち、rakudoで遊びたいだけという場合はチェックアウトしたrakudoのソースツリーで
$ perl Configure.pl --gen-parrot \
    --gen-parrot-option="--optimize"
とするだけですね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 最近のperl6事情

このブログ記事に対するトラックバックURL: http://blog.s2factory.co.jp/MT/mt-tb.cgi/83

コメントする