2009-10-01から1ヶ月間の記事一覧

A note about ClassName type

以前 id:Craftworks さんとMooseのClassName型について話した件*1で思うところがあったのでメモしておく。 まず,現在のClassName型の定義は以下のようになっている。 sub ClassName { return Class::MOP::is_class_loaded($_); } これは確かにおかしい。ク…

Type as State, Coercion as Hook

MooseのTypeConstraintは,型というよりはあるデータの性質を表現したものだと考えられる。また,TypeCoercionは,ある型(=あるデータの性質)に対してフックを掛けるメカニズムと考えられる。 このように考えると,Coercionを利用していろいろと面白いこ…

Shipped Scalar::Util::Instance

Data::Util::is_instance()をベースに,MooseのTypeConstraint::Classに似たコードジェネレータを書いた。 http://search.cpan.org/dist/Scalar-Util-Instance/ http://github.com/gfx/Perl-Scalar-Util-Instance #!perl -w use strict; use Test::More test…

To repeat testing with different configuration

構成条件を変えてテストを繰り返したいことがある。 たとえば,XSとPurePerlの両方の実装を持つモジュールなどはそうだし,Any::Mooseを使ったモジュールであれば $ENV{ANY_MOOSE} を変えてテストを繰り返したいと考えるのは当然だ。この問題は,postamble()…

eval "use $module" in Perl_call_sv() could segmentation faults

Data::Utilのmethod modifiersが落ちる件は,Perlコアのバグであるようだ*1。perlがPerl_call_sv()でサブルーチンを呼び出すときに,そのサブルーチンがディレクティブを含んだeval()を実行し,そのuseディレクティブが例外を放出すると*2,setjmp(3)がSEGV…

Perl 5.11.1 features

perl-5.11.0の続報。 perl-5.11.1がリリースされた。例によって個人的に興味をもったトピックを紹介するが,今回は大きな変更はない。 Add package NAME VERSION syntax use NAME VERSION と同じように解釈されるようだ アンダースコア付きの開発版でもクォ…

Yet another native traits in Moose

id:tokuhiromの示唆を得て,Native traits/AttributeHelpersについて考えてみた。 現在MooseではMX::AttributeHelpersが"Native traits"として組み込みになっているが,それにもかかわらずhas()の時点でtraits => ['Array']などとしないと使用できない。これ…

with Enumerable

RubyライクなEnumerable roleを作ってみた。 http://github.com/gfx/Perl-Enumerable git clone git://github.com/gfx/Perl-Enumerable.git #!perl package IO::Enumerable; use Any::Moose; # requires Mouse 0.39 with 'Enumerable'; has handle => ( is =…

Twitter始めた

学園祭でテンションが上がった勢に任せてTwitterを始めてみた。 すでに@gfxが埋まっていたので@__gfx__にした。最初の言及がid:dankogaiからだったので嬉しい。http://twitter.com/dankogai/statuses/4761667318 アンダースコアの入れ方に XS Wizard の面目…

Mouse 0.39 released

Mouse 0.38をリリースしました。 Mouse @ CPAN git clone gitmo@moose.perl.org:Mouse.git 0.37-0.38 の変更点のまとめ: type constraints と type coercion を強化しました ArrayRef[Foo | Bar]などが動くようになってます Moouse::Exporterを導入しました…

A patch for Data::Dumper to display the subroutine name, instead of sub { "DUMMY" }

sub { "DUMMY" } にウンザリして,しばらく前から Data::Dumper に以下のようなパッチを当てている。これで,コードリファレンスが与えられたときにその名前を出力するようになる。Deparse よりも簡潔でいい。無名関数に対してはあまり効果がないが,&foo::_…

ShipIt::Step::ChangeAllVersions 0.001 released

ディストリビューションのモジュールすべてのバージョンを更新するshipit stepプラグインを書いた。 http://github.com/gfx/Perl5-ShipIt-Step-ChangeAllVersions 繰り返し再発明されてきたツールだとは思う。たとえば,ppi_versionというPPIベースのバージ…

Perl 5.11.0 features on the syntax

Perl 5.11.0がリリースされたので,perl5110deltaから構文的な変更をいくつか拾ってみた。 Implicit strictures "use 5.11.0" はstrictも有効にするようになった The yada yada operator ('...') 未実装の機能を示す組み込み演算子が追加された each is now …

Moose::Role = #include directive + X

前提:Moose::RoleはJavaのInterfaceなんかじゃない 最近,RoleというのはCプリプロセッサの#includeディレクティブに近いもののような気がしてきた。そして+Xがメソッドのチェック有無やコンフリクトのチェックである。 たとえば,以下のようなコードを考え…

[Perl]UTF8-flagged strings affects regexps with the "i" modifier

HTML::FillInForm::Liteの使いどころという記事で,HTML::FillInForm::Liteが遅いということが取り上げられていた。 試しに記事内のベンチマークを行ったところ,確かに遅い。 # HTML::FillInForm 1.06 Benchmark: HTML::FillInForm vs. HTML::FillInForm::L…