2009-01-01から1年間の記事一覧
構成条件を変えてテストを繰り返したいことがある。 たとえば,XSとPurePerlの両方の実装を持つモジュールなどはそうだし,Any::Mooseを使ったモジュールであれば $ENV{ANY_MOOSE} を変えてテストを繰り返したいと考えるのは当然だ。この問題は,postamble()…
Data::Utilのmethod modifiersが落ちる件は,Perlコアのバグであるようだ*1。perlがPerl_call_sv()でサブルーチンを呼び出すときに,そのサブルーチンがディレクティブを含んだeval()を実行し,そのuseディレクティブが例外を放出すると*2,setjmp(3)がSEGV…
perl-5.11.0の続報。 perl-5.11.1がリリースされた。例によって個人的に興味をもったトピックを紹介するが,今回は大きな変更はない。 Add package NAME VERSION syntax use NAME VERSION と同じように解釈されるようだ アンダースコア付きの開発版でもクォ…
id:tokuhiromの示唆を得て,Native traits/AttributeHelpersについて考えてみた。 現在MooseではMX::AttributeHelpersが"Native traits"として組み込みになっているが,それにもかかわらずhas()の時点でtraits => ['Array']などとしないと使用できない。これ…
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を始めてみた。 すでに@gfxが埋まっていたので@__gfx__にした。最初の言及がid:dankogaiからだったので嬉しい。http://twitter.com/dankogai/statuses/4761667318 アンダースコアの入れ方に XS Wizard の面目…
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を導入しました…
sub { "DUMMY" } にウンザリして,しばらく前から Data::Dumper に以下のようなパッチを当てている。これで,コードリファレンスが与えられたときにその名前を出力するようになる。Deparse よりも簡潔でいい。無名関数に対してはあまり効果がないが,&foo::_…
ディストリビューションのモジュールすべてのバージョンを更新するshipit stepプラグインを書いた。 http://github.com/gfx/Perl5-ShipIt-Step-ChangeAllVersions 繰り返し再発明されてきたツールだとは思う。たとえば,ppi_versionというPPIベースのバージ…
Perl 5.11.0がリリースされたので,perl5110deltaから構文的な変更をいくつか拾ってみた。 Implicit strictures "use 5.11.0" はstrictも有効にするようになった The yada yada operator ('...') 未実装の機能を示す組み込み演算子が追加された each is now …
前提:Moose::RoleはJavaのInterfaceなんかじゃない 最近,RoleというのはCプリプロセッサの#includeディレクティブに近いもののような気がしてきた。そして+Xがメソッドのチェック有無やコンフリクトのチェックである。 たとえば,以下のようなコードを考え…
HTML::FillInForm::Liteの使いどころという記事で,HTML::FillInForm::Liteが遅いということが取り上げられていた。 試しに記事内のベンチマークを行ったところ,確かに遅い。 # HTML::FillInForm 1.06 Benchmark: HTML::FillInForm vs. HTML::FillInForm::L…
Mouse 0.30-0.35間で一部後方互換性を壊してしまっていたので,0.36-0.37で修正しました。ご迷惑おかけしました。まだ完全に自動化はしていないものの,HTTP-Engine*1とArkについてはリポジトリからpullしてmake testを行うスクリプト*2を書いたので,後方互…
Mouse 0.35をリリースしました。 時間がないので詳細はあとで書きます。書きました。 Mooseとの互換性が高まった一方,いくつかのAPIがMooseよりに変更されたため,いくつかのモジュールでは修正が必要になってしまいました。 何か問題がありましたら連絡し…
Test::LeakTraceはDevel::LeakTraceよりはマシではあるものの,あまり使い勝手がいいとは言えないからもう少し何とかならないか,ということをkonobi氏と話した。普通のGCアルゴリズムのように,シンボルテーブルからたどれるものはリークしていないとみなす…
Mouseのco-maintainerになりました。しばらくは主に互換性を上げるメンテナンスをし,その後Moose::XSのプロトタイプとしてのMouse::XSの実装に入ります。0.31までにやったこと(Moose 0.90 compatible): has()においてis => 'bare'をサポートするとともに,…
PerlIO_unread is awesomeの補足PerlIO_unread()はよく考えるとかなり異様な挙動をする。何バイトまでなら安全に戻せるのか,あるいは戻した文字列はどこへ行くのか,などの疑問が起きて当然だ。結論からいえば,これらは:pendingという内部レイヤーを用いて…
Moose/Class::MOP開発スポンサー (JPA Sponsors Moose/Class::MOP Work)の報告です。まずは現状ですが,Moose 0.90/Class::MOP 0.93のロード時間が約176msであるのに対し,ベースラインとしたMoose 0.88/Class::MOP 0.89のロード時間が約209msであるので,約…
今回初めてYAPC::Asiaに参加した。記憶が鮮明なうちに,得たもの,考えたことをメモしておく。ハッカソンにも二日目のみ参加したが,時間があまりとれず,特に成果は出せなかった。 AnyEvent/Coro AnyEvent/Coroのイメージがつかめたのはとてもよかった。特…
YAPC::Asia 2009で発表してきました。 XS書きのためのPerl MAGIC 入門 Moose Hacking Guide (Lightning Talks)
A note about features about Moose::Attribute::Native::Trait. package Stuff; use Moose; has options => ( traits => ['Array'], is => 'ro', isa => 'ArrayRef[Str]', default => sub { [] }, handles => { each_options => 'kv', # two at a time }, )…
まもなくYAPC::Asia 2009が開催しますね。私の発表の資料は以下の場所に置き,順次更新する予定です。 git://github.com/gfx/YAPC-Asia-2009-gfx.git よろしくお願いします。(12日 追記) 順次更新とはいきませんでしたが,発表に使ったスライドを二つ(PerlM…
perldeltaには載っていなかったが,Perl 5.10.1でバージョンオブジェクトのAPIが変わった。古いAPIも残してあるものの新しいスタイルが強く奨励されるということだ。 # old, deprecated style (< 0.75) use version; $VERSION = version->new('1.002003'); u…
id:tokuhiromに促されてperlコアにMoose XSへ向けた拡張を書いてみたのだが,githuのおかげでパッチを書くのが簡単にできた。forkして,トピックブランチを作って*1,コードを書いて,テストして,p5p mailing listにポストして終わり。こんなに簡単だとは思…
Adam Kennedy (ADAMK)が「Array::CompareでMooseを使わないようにしてくれ」とRTでチケットを作成したことがきっかけとなり,Mooseの速度について議論が起きています。以下ラフなまとめ。 #49270: Remove the use of Moose - RT Array::CompareではMooseを使…
Mooseが生成するサブルーチンはDeparseできないことがある。これはSub::Nameがサブルーチンの内部構造を変えてしまい,-DDEBUGGING付きのperlの元だとB.cの内部のアサーションが失敗するからのようだ。そこでこのバグを修正し,さらにいくつかの改善を行った…
何か面白いものはないかと思い,CPAN上の最初のリリースではないMooseX一覧を出力するスクリプトを書いてみた。 #!perl -w use strict; use CPAN; use version; my $hatena = grep{ $_ eq '--hatena' } @ARGV; my %processed; foreach my $m(CPAN::Shell->ex…
16:54 (tokuhirom_______) Params::Validateをかけたときに、そのスタックにレキシカル変数としておけたら便利じゃね?という その後の議論のまとめ。呼び出し元に変数を定義するのは無理ですが,引数として与えられた変数の名前ならPadWalker::var_name()で…
SUPER疑似クラスを通じたメソッド呼び出しは非常に遅い。 もしベースクラスに手を加えることができるなら,空のフックメソッドをベースクラスに仕込んでおくことを考えたほうがいいかもしれない。たとえば以下のケース: # using SUPER package BaseClass; s…
Spreadsheet::ParseExcel v0.52より,S::P::FmtJapanではJcode.pmの代わりにEncode.pmを使うようになり,それに伴い内部エンコーディングがEUC-JPからUTF-8になりました。Parseメソッドの第二引数にS::P::FmtJapanオブジェクトを渡すことで,日本語の日付や…