2009-01-01から1年間の記事一覧

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…

Mouse 0.37 released

Mouse 0.30-0.35間で一部後方互換性を壊してしまっていたので,0.36-0.37で修正しました。ご迷惑おかけしました。まだ完全に自動化はしていないものの,HTTP-Engine*1とArkについてはリポジトリからpullしてmake testを行うスクリプト*2を書いたので,後方互…

Mouse 0.35 released

Mouse 0.35をリリースしました。 時間がないので詳細はあとで書きます。書きました。 Mooseとの互換性が高まった一方,いくつかのAPIがMooseよりに変更されたため,いくつかのモジュールでは修正が必要になってしまいました。 何か問題がありましたら連絡し…

TODO: Make Test::LeakTrace more useful

Test::LeakTraceはDevel::LeakTraceよりはマシではあるものの,あまり使い勝手がいいとは言えないからもう少し何とかならないか,ということをkonobi氏と話した。普通のGCアルゴリズムのように,シンボルテーブルからたどれるものはリークしていないとみなす…

Mouse 0.31

Mouseのco-maintainerになりました。しばらくは主に互換性を上げるメンテナンスをし,その後Moose::XSのプロトタイプとしてのMouse::XSの実装に入ります。0.31までにやったこと(Moose 0.90 compatible): has()においてis => 'bare'をサポートするとともに,…

The :pending layer (used in PerlIO_unread)

PerlIO_unread is awesomeの補足PerlIO_unread()はよく考えるとかなり異様な挙動をする。何バイトまでなら安全に戻せるのか,あるいは戻した文字列はどこへ行くのか,などの疑問が起きて当然だ。結論からいえば,これらは:pendingという内部レイヤーを用いて…

Results from JPA sponsorships of Moose/Class::MOP

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であるので,約…

What I got in YAPC::Asia 2009, notes, and todo

今回初めてYAPC::Asiaに参加した。記憶が鮮明なうちに,得たもの,考えたことをメモしておく。ハッカソンにも二日目のみ参加したが,時間があまりとれず,特に成果は出せなかった。 AnyEvent/Coro AnyEvent/Coroのイメージがつかめたのはとてもよかった。特…

YAPC::Asia 2009で発表してきました

YAPC::Asia 2009で発表してきました。 XS書きのためのPerl MAGIC 入門 Moose Hacking Guide (Lightning Talks)

An idea of Moose enumerators (about Native::Trait)

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 }, )…

My document for YAPC::Asia 2009

まもなくYAPC::Asia 2009が開催しますね。私の発表の資料は以下の場所に置き,順次更新する予定です。 git://github.com/gfx/YAPC-Asia-2009-gfx.git よろしくお願いします。(12日 追記) 順次更新とはいきませんでしたが,発表に使ったスライドを二つ(PerlM…

Benchmark: version object vs. eval

perldeltaには載っていなかったが,Perl 5.10.1でバージョンオブジェクトのAPIが変わった。古いAPIも残してあるものの新しいスタイルが強く奨励されるということだ。 # old, deprecated style (< 0.75) use version; $VERSION = version->new('1.002003'); u…

Github makes perl core hacking easier!

id:tokuhiromに促されてperlコアにMoose XSへ向けた拡張を書いてみたのだが,githuのおかげでパッチを書くのが簡単にできた。forkして,トピックブランチを作って*1,コードを書いて,テストして,p5p mailing listにポストして終わり。こんなに簡単だとは思…

Mooseの速度が遅いという議論のまとめと感想

Adam Kennedy (ADAMK)が「Array::CompareでMooseを使わないようにしてくれ」とRTでチケットを作成したことがきっかけとなり,Mooseの速度について議論が起きています。以下ラフなまとめ。 #49270: Remove the use of Moose - RT Array::CompareではMooseを使…

Sub::Name affects on subroutine's internal structures (patch)

Mooseが生成するサブルーチンはDeparseできないことがある。これはSub::Nameがサブルーチンの内部構造を変えてしまい,-DDEBUGGING付きのperlの元だとB.cの内部のアサーションが失敗するからのようだ。そこでこのバグを修正し,さらにいくつかの改善を行った…

List of MooseX:: modules on CPAN

何か面白いものはないかと思い,CPAN上の最初のリリースではないMooseX一覧を出力するスクリプトを書いてみた。 #!perl -w use strict; use CPAN; use version; my $hatena = grep{ $_ eq '--hatena' } @ARGV; my %processed; foreach my $m(CPAN::Shell->ex…

An idea of a syntactic validator

16:54 (tokuhirom_______) Params::Validateをかけたときに、そのスタックにレキシカル変数としておけたら便利じゃね?という その後の議論のまとめ。呼び出し元に変数を定義するのは無理ですが,引数として与えられた変数の名前ならPadWalker::var_name()で…

The SUPER pseudo class is very slow!

SUPER疑似クラスを通じたメソッド呼び出しは非常に遅い。 もしベースクラスに手を加えることができるなら,空のフックメソッドをベースクラスに仕込んでおくことを考えたほうがいいかもしれない。たとえば以下のケース: # using SUPER package BaseClass; s…

Spreadsheet::ParseExcel::FmtJapan 0.52 handles Japanese encodings with Encode

Spreadsheet::ParseExcel v0.52より,S::P::FmtJapanではJcode.pmの代わりにEncode.pmを使うようになり,それに伴い内部エンコーディングがEUC-JPからUTF-8になりました。Parseメソッドの第二引数にS::P::FmtJapanオブジェクトを渡すことで,日本語の日付や…