Idea

Perl5の構文木をParrotコードへ(というアイデア)

B::DeparseはPerl5の構文木からPerl5コードを生成するトランスレータであると言える。この場合は生成するコードはPerl5なので「トランスレータ」にはあまり見えないが、変換先は別の言語であってもいい。というよりは、もともとはPerl5の構文木からCのコード…

Test::LeakTraceというアイデア

Devel::LeakTrace(::Fast)?が使いにくい。BEGIN/ENDでレポートを出力するだけだし,そのレポートもSVの型とアドレスしか報告しない。それでもないよりはマシなので,Devel::LeakTraceを呼び出すスクリプトをauthor/やmisc/などに入れて実行しているが,これ…

DBIx::Classのシンタクスシュガーがほしい

Mooseに慣れた目でDBIx::Classを見てみると… package DB::Main::Artist; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto Core/); __PACKAGE__->table('artist'); __PACKAGE__->add_columns(qw/ artistid name /); __PACKAGE__->set_pr…

曖昧なメソッド呼び出し

{ package Foo; sub foo{} } { package Bar; sub foo{} } { package Baz; use parent -norequire => qw(Foo Bar); } Baz->foo(); # Ambiguous! こんなときのBaz->foo()はメソッド解決順序(MRO)に依存している曖昧なメソッド呼び出しです。 C++だと,このよう…

PerlでAssert

Perl5.9の時点では,assersionsと-Aコマンドラインスイッチという仕組みでCのassert(3)のようなことができるようになるはずだったらしい。しかし,そのメカニズムはPerl5.10には結局採用されなかった。 開発中はassert()が欲しい,しかし,リリース後の実行…

feature::compat

warnings::compatがあるのだから,feature::compatもあっていいのではないかと思う。 しかし,say()は簡単に実装できるが,switch()とstate()はソースフィルタが必要だし,あまり実用的ではないか。

warnings::lint

コンパイル後のOP treeを見て小言を言ってくれるモジュールとしては既にB::Lintというものがあるわけだが,どうせ大したチェックをしてくれるわけでもないので,いちいちperl -MO=Lint script.plなんてしていられない。 しかし,warnings::lintというプラグ…