2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perl6Advent Calendar 2012

Day 1

Perl6 Advent Calendar 1日目

Last updated at Posted at 2012-12-01

#はじめに

今年も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/

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?