PL/ParrotとPL/Perl6を試す - PL/ParrotかわいいよPL/Parrot

先日のLL TigerでPL/Parrot & PL/Perl6について喋ってきたのですが、紹介するつもりが逆にユーザーを減らしてしまった

ようなので、せめてもの罪滅ぼしにPL/Parrot & PL/Perl6のインストール手順を書いておきます。

PL/Parrot & PL/Perl6って何?という人は僕のLL Tigerの発表を見て下さい。
LTの虎@LL Tigerにて喋ってきました! - 分け入ってもコード

インストールに必要なもの

  • PostgresSQL 8.3.8以上
  • Parrot 最新版
  • Rakudo 最新版

PostgreSQLのインストール

PostgreSQLのインストールについてはそこら中に情報があるので割愛します。インストール方法はバイナリでもソースからビルドでもかまいません。

気をつける点として、バイナリでインストールする場合は必ずdev版を指定して下さい。aptitude search postgresqlとかyum search postgresqlとかしてやると、devの入ったパッケージがあると出てくるので、それを指定してやればOKです。

また、pg_configコマンドにパスが通っていることを確認して下さい。バイナリの場合は問題ないと思いますが、ソースからビルドする場合は/path/to/postgres/binにパスを通しておいてください。pg_configとはPostgreSQLのインストールオプションとかを表示するコマンドです。PL/Parrotインストール時に必要なファイルはpg_configを使って探しているようです。

Parrotのインストール

LL TigerDan Kogaiさんが紹介していたように、ParrotはRakudoのインストール時に

#perl Configure.pl --gen-parrot

と指定してやれば自動でインストールされます。が、PL/Parrotを使う場合にはParrotを個別にインストールすることをオススメします。

理由は、作者のBlogに

You must first install a recent version of Parrot and Rakudo Perl 6. I develop with Parrot trunk and Rakudo master because I often need very recent changes/bugfixes

http://leto.net/dukeleto.pl/2010/06/rakudo-perl-6-in-your-postgresql-database.html

とあるように、PL/ParrotはParrot、Rakudoの最新版の変更、バグフィックスを利用している為です。

Parrtoの最新版は公式を参照するとsvnで手に入るようです。
Packages & Source Code | Parrot VM

$svn https://svn.parrot.org/parrot/trunk parrot
$cd parrot
$perl Configure.pl
$make
$sudo make install

Parrotのビルドでこけることはそうそうないと思いますが、もしこけたらREADMEを見て、それでもだめなら開発者に連絡して下さい。

Rakudoのインストール

こちらも上で述べたように最新版をビルド。Rakudo最新版といえば、噂のRakudo Star。

公式を見るとtar.gzで配布しています。
http://rakudo.org/how-to-get-rakudo

$wget http://github.com/downloads/rakudo/star/rakudo-star-2010.07.tar.gz
$tar zxvf rakudo-star -2010.07.tar.gz

ビルドする前にbuild-essential、libicu-dev、subversionが必要なのでインストールしておいて下さい。Ubuntuならこんな感じ

$aptitude install build-essential libicu-dev subversion

無事インストールできたら、Rakudoをビルド

$cd rakudo-star-2010.07
$perl Configure.pl --parrot-config=/path/to/bin/parrot_config
$make blizkost-install
$sudo make install
    • parrot-confinオプションはparrot-configコマンドにパスがとっていれば必要ありません。パスが通っていない場合のみ、parrotのインストール先を指定して下さい。

blizkost-installはPerl6でPerl5のモジュールを動かすblizkostをインストールするためのオプションです。これも必要な場合のみ指定して下さい。

Rakudoのビルドもそうそうこけませんが、こけたらREADMEかメールで。

Perl6動くよ!

Rakudoのインストールまで終えるとPerl6を動かすことができます。

$perl6

とやってやるとインタラクティブシェルが起動するので、say helloとかしてみて下さい。

Rakudoをインストールするといくつかモジュールが付いてきます。LWP::Simpleもあるのでネットから取得することもできます。他のライブラリは

$ls /usr/local/lib/parrot/2.6.0/language/perl6/lib

ってやると一覧を見れます。インストール先を変えた場合は各自パスを読みかえてください。

githubにもちょこちょこPerl6のモジュールが上がってきているので、興味がある人は見てみて下さい。

PL/Perl6のインストール

ようやく本題です。

これも最新版を利用しましょう。まだまだ開発途上なので。

git clone http://github.com/leto/plparrot.git plparrot

次にPerl6のPBCの場所を環境変数で指定してあげます。PBCとはParrot VMバイトコードファイルのことです。これを指定してあげないと、PL/ParrotをインストールすることはできてもPL/Perl6を動かそうとすると、インタープリターが見つからないというエラーが出て実行することができません。

$export PERL6PBC=/usr/local/lib/parrot/2.6.0/language/perl6/perl6.pbc

PERL6PBCを指定したら、PL/Parrotのビルド

$cd plparrot
$make
$make install

以上でインストールは終わりです。

PL/Parrot & PL/Perl6をPostgreSQL上で使えるようにする

PostgreSQLで各PL言語を使えるようにするには

$createlang {PL言語名} {DB名}

というコマンドを実行してあげる必要があります。その際に指定したDBのcreatelang権限を持っている必要があります。個別に指定することもできますが、ここではテスト用にスーバーユーザーとDBを新たに作成しましょう。

$createuser test
Shall the new role be a superuser? (y/n) y
$createdb -O test testdb

ユーザーとDBを作成したらcreatelangです。自分でやってもいいのですが、PL/Parrot、PL/Perl6他を一度にcreatelangしてくれるスクリプトが同梱されているのでそれを利用します。

$psql -d testdb -U test -f `pg_config --sharedir`/contrib/plparrot.sql
  • dでDBを、-Uでユーザーを、-fで実行するファイルを指定しています。-fの引数ではpg_configコマンドでPostgreSQLのshareディレクトリを取得しています。もちろん直接パスを記述しても大丈夫です。

お疲れ様です

ここまでやればPL/Parrot & PL/Perl6を使うことができます。

$psql -d testdb -U test  -C "CREATE FUNCTION hello() RETURNS text AS $$ return 'hello' $$ LANGUAGE plperl6; SELECT hello();"

という、LL Tigerで紹介したワンライナーを実行してみて下さい。

LANGUAGE plparrot

としてやればParrotのコードを動かすこともできます。

PL/Parrot & PL/Perlについては以下のURLを参考にして下さい。
http://pl.parrot.org/
GitHub - leto/plparrot: Embed Parrot+Rakudo into PostgreSQL
Google グループ
とはいえ、まだまだ情報は少ないです。PL/Parrotを使ったら是非情報を発信して下さい!

PL言語そのものについてはPostgreSQLの公式ドキュメントが充実しています。ドキュメントが充実しているのもPostgreSQLのいいところです。
第42章 手続き言語

Enjoy PL/Parrot & PL/Perl6!