2008-12-01から1ヶ月間の記事一覧

定数関数の威力

JPerl Advent Calendar 2008 第一日目でも紹介されているように,特殊な方法で宣言した関数*1は定数関数として特別に処理され,コンパイル時に展開される。しかし,定数の展開はコンパイル時にしか行われない。つまり,実行時に呼び出す実体が決まるメソッド…

Class::MOP::is_class_loaded()のXS版

書いた。これはまさにXSが最適なケースで,Pure Perl版より16-24倍ほど速い。 For "strict": Rate pp xs pp 3692/s -- -96% xs 90163/s 2342% -- For "Class::MOP::Method": Rate pp xs pp 2999/s -- -96% xs 75188/s 2407% -- For "Foo::Bar", which does n…

reduceの解釈

List::Utilのreduce()が何をするかやっと分かった気がする。http://perl-users.jp/articles/advent-calendar/2008/20.html でもって、reduce は初期要素、つまり $a の最初の値を指定できます。 つまりこういうことだね。 package Foo; use Moose; use List:…

モダンなXSの書き方

PerlのソースコードはPerl言語以上に変化が大きく,それに伴ってXSの書き方もだいぶ変わってきている。新しいAPIを使ったほうが可読性がよかったり高速だったり使いやすかったりする。たとえば,スカラー(SV)から文字列(PV: pointer valueつまりchar*)を得る…

Taintモードの振る舞い

Taintモードの振る舞いがよく分からない。 $ perl -Te 'eval "" if $^X' Insecure dependency in eval while running with -T switch at -e line 1. $ perl -Te 'require strict if $^X' Insecure dependency in require while running with -T switch at -e…

XSを書く難しさ

最近思うが,つくづくXSは難しい。いとも簡単にSEGVを起こし,デバッグが難しく,それゆえモジュール作者のやる気が失われたときのリスクが非常に大きい。そうやって多大なリスクを犯してXSを書いても,肝心の速度がPurePerl以上に遅いことも少なくない。最…

__PACKAGE__がうざいときにuse component;

DBIx::Classのシンタクスシュガーがほしいについて。とりあえずJifty::DBIとData::Modelについてはいずれ調べるとして,クラスメソッドのシンタクスシュガーを一般化するモジュールを書いた。CPANにあげるようなものではないけど。 http://svn.coderepos.org…

Shika XS accessor

ShikaにXS Accessorを実装したのでClass::XSAccessorと比較してみました。 Shika/trunk $ perl -Mblib benchmark/accessor.pl Perl 5.008005 on linux Shika/0.01_01 Moose/0.63 Class::XSAccessor/0.14 ------------------ new,set,get*10 Rate ShikaPP Moo…

Perlの数値処理

Data::Util::is_number()を実装すべく数値処理を調べていたらPerlの暗黒面を覗いてしまった。Perlの数値処理ルーチンは,Perl Parserが行うリテラルの処理と,Perl_grok_*を中心とした数値変換ルーチンが行う処理がある。この記事では便宜的に,前者で処理で…

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…

XSでクロージャ

Perlのようにクロージャをサポートする言語では,eval()せずに実行時にサブルーチンを定義できるので大変便利である。しかし,Cではポータブルにクロージャを作る方法はないので,サブルーチンの動的定義とXSによる高速な実装は相容れないように見える。しか…

「Perl/XSが得意なこと」の補足

Perl/XSが得意なことはほとんどオレオレ用語といっていいくらい端折ったリストなので追々補足しておく。 まずひとつ,「注意を払う」というのは内部で呼ばれるmalloc()を極力減らすという意味と書いたが,よく考えてみればこれはmalloc()*1が遅いというのが…

Perl/XSが得意なこと

最近ひたすらXSを書いていて思ったのが,XSはやっぱり速いということ。ただ,いつでも無条件に速いというわけでもなく,何も考えずに書くとPurePerlのコードより遅くなることも珍しくない。実際,最近書いたShikaやMOPのXS版もいきなり高速だったわけではな…

Shibuya.pm #10 LT Acme::Don't 2.0 発表資料

LTの資料アップロードしました。 http://coderepos.org/share/browser/docs/gfx/Shibuya.pm-10/AcmeDont.pdf 初めてCodeRepos使ってみました。ついでに改めてちょっとだけ自己紹介します。まず名前ですが,gfxと書いてゴローとでも読んでください。専攻は心…