#はじめに
今年もAdvent Calendarの季節がやって来ました。例のごとくマイナー言語ながら、ぼちぼちやっていこうと思います。今年も25日、完走できると良いなぁ。
現状確認
とりあえず一回目の今日は、現状の確認からにしようと思います…が、最近はNieczaやPugsを追っていなかったので、メインストリームの処理系であるRakudoに関してのみのお話です。
仕様と実装
今年に入ってメタな部分の実装がかなり進んだように感じます。処理系の深い部分から覗く意味不明なバグも大幅に減りました。GrammarとActionで簡単なパーザを書く程度なら、妙なバグに悩まされることも殆ど無いといっていいでしょう。大分まともな言語になってきた感があって素晴らしい。
公式の言語仕様を定義するテストスイート(Roast)をどれだけパスしたかが以下のページで見られます。スレッド周りはガタガタも良い所ですが、それ以外は結構な部分がimplementedになっています。「いつかのクリスマス」はそう遠くないのかもしれません(とは言え仕様の方もかなりの頻度で更新されていますし、実際これからどうなるかはよく分からないですね…)。
実行速度
ParrotのバージョンアップやRakudoの最適化に伴って、実行速度は徐々に改善の兆しを見せています。初代Rakudo Starに比べると、10倍以上高速になっているのでは無いでしょうか(ベンチマークとってる時間がありませんでした…ごめんなさい)。
使えるようになったオイシイ機能
Macros
今年実装された機能では、やはりマクロが大きいでしょう。実装段階としてD1-D6のステージが用意されており、現在ではD2までの機能が実装されています。具体的には「単純な文字列置換」と「関数形式のマクロ」は既に使えます。詳しくは以下のページを参照してください。
MetaClass
Perl6には「クラス」や「ロール」といった言語のベースとなる枠組みの挙動を変更することを可能にする仕組みがあります。言わば「クラスを定義するクラス」ということで「メタクラス」と呼ばれており、これを差し替えることでメソッド呼び出しをフックして本来とは別のメソッドを呼び出したりできます。
これを利用して、Grammarがどのように文字列にマッチしたのかを分かりやすく表示するデバッガが、Jonathan Wothingtonさんによって開発・公開されています。これはすごく便利。
これは部分正規表現がマッチした時に呼ばれる処理をフックすることによって実現しており、今年のYAPC::Asia Tokyoで彼が仕組みを解説しながら実際にデモを行った様子がYouTubeで見られます。
他にも挙げるとキリがないのですが、まだ24回も残っているので追々紹介していくことにしましょう。参加者も絶賛募集中ですので、興味を持った方はガンガン書いていってください!
明日の担当は@uasiさんです。
本家Perl6 Advent Calendarも始まったようですので、こちらもあわせてどうぞ。
https://perl6advent.wordpress.com/2012/12/01/state-of-perl-6-in-2012/