Parrotさわってみる

「Parrotってなあに?」ていうような人は、とりあえずささださんの手によるParrot 入門 - The Parrot Primerとか読むといいんじゃないかなと思います。
動的言語向けに設計されてるレジスタベースな汎用VMだよー」とかそんな感じだと思いますきっと。

まずインストール

http://svn.perl.org/snapshots/parrot/ からparrot-latest.tar.gzをダウンロード。

% tar zxf parrot-latest.tar.gz
% sudo mv parrot /usr/local

とりあえず/usr/local/parrotあたりに入れておくことにしてみました。

% cd /usr/local/parrot
% perl Configure.pl
...(なんか色々やってる)
% make
...(なんか色々)
% make test
...(たくさん)

Failed Test               Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
t/codingstd/cppcomments.t    0    11     1    2 200.00%  1
t/op/gc.t                    1   256    22    1   4.55%  4
 (8 subtests UNEXPECTEDLY SUCCEEDED), 12 tests and 616 subtests skipped.
Failed 2/351 test scripts, 99.43% okay. 2/7884 subtests failed, 99.97% okay.
make: *** [test] エラー 255

うーん。なんか成功してないテストもあるみたい。だけど、だいたいできてるみたいなので不安ですがとりあえず飛ばして次行きましょう。よくわかんないし。

% cd ~/bin
% ln -s /usr/local/parrot/parrot parrot
% parrot
parrot -[abcCEfgGhjprStvVwy.] [-d [FLAGS]] [-D [FLAGS]][-O [level]] [-o FILE] <file>

とりあえずparrotにリンクはっとく。これでとりあえず、parrotの環境構築できたつもり。

てきとうにPASMでなんか書いてみる。

PASMっていうのはParrotのアセンブリ言語のようなもの。

とりあえずハロワ。

% cat >hello.pasm
print "Hello, World!\n"
end
% parrot hello.pasm
Hello, World!
% parrot -o hello.pbc hello.pasm # バイトコードにコンパイル
% parrot hello.pbc # コンパイルしたバイトコードを実行
Hello, World!
%

Parrot VMJVMとかのスタックベースなVMと違って、レジスタベース。実際のCPUの命令セットに少し似ている、かも。

% cat >reg.pasm
set I1, 100
set N1, 2.2
set S1, "hoge"
print I1
print N1
print S1
print "\n"
end
% parrot reg.pasm
1002.200000hoge

ParrotのレジスタにはIレジスタ、Nレジスタ、Sレジスタ、Pレジスタの4種類があって、たぶんそれぞれ32個ある。

なんか腰が痛いので今日はここまで。ほぼなんもしてねーじゃん。

test