perl

Shared strings in XS

XSで共有文字列を活用するの続き。スクリプトを変えて再計測を行った。 http://github.com/gfx/Perl-B-Shared git clone git://github.com/gfx/Perl-B-Shared.git いろいろ試した結果,まとめとしては以下のようになる。 共有文字列の生成と破棄は通常の文字…

Mouse type constraints in XS

MouseのXS化*1が進みつつあります。0.40_04ではtype constraintsを全面的にXSで実装しました。生成されるコードを徹底的にXS化したため,かなり高速になりました。以下はTC付きアクセサに値をセットする場合のベンチマークの結果です。Mouse/benchmarks/type…

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']などとしないと使用できない。これ…

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がメソッドのチェック有無やコンフリクトのチェックである。 たとえば,以下のようなコードを考え…

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という内部レイヤーを用いて…

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

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

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オブジェクトを渡すことで,日本語の日付や…