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

DBD::SQLiteのAggregatorに関するアイデアメモ

DBD::SQLiteのコールバックであるAggregatorがいかにも遅くて使う気があまり起きない。 ただでさえコールバックが遅い所に,step()毎にいちいちENTER/LEAVEしているので遅いのも当然である。Perl VMのループを参考に,new()でENTER&SAVETMPSし,step()ではFR…

Pure Perl HTML::FillInForm

id:charsbar氏のブクマを眺めていたらTowards a Pure Perl HTML::FillInForm: 61% tests passingという記事があった。 HTML::FillInFormが依存するHTML::ParserがXSモジュールであるため,Pure Perlで依存の少ないHTML::Parserを開発し,HTML::FillInFormをP…

Perlの最適化 - aelemfast

先の記事のOpcodeトレース(APVM版)に以下のようなOpcodeがあった。 .aelemfast[@ARGV[0]] SCALARこれはPerlの最適化器*1が最適化の結果生成したOpcodeで,配列の添え字が定数かつ255以下のときにOpcodeのaelemから変換されるものだ。 もともとのaelemは,配…

Opcodeのトレース

Perlを-DDEBUGGINGつきでビルドするとPerl本体にOpcodeトレース機能が付く。 $ perl -Dts -e 'print "Hello, $ARGV[0] world\n"' Perl EXECUTING... => (-e:0) enter => (-e:0) nextstate => (-e:1) pushmark => * (-e:1) const(PV("Hello, "\0)) => * PV("H…

Shibuya.pm#11で発表しました

Shibuya.pm#11(2009/4/22)で発表しました。関係者の皆さんお疲れ様でしたー。Acme::Perl::VMのAcme::Perl::VM::JAに発表内容をまとめた文書を書きました。これで最初のコードについてはほぼすべて解説しました。スライドはまた後ほど。

リスト代入の不思議

スカラーの代入 { x = y } が左辺値そのものを返すというのは分かりやすい。 しかし,リスト代入 { (x) = (y) } が返す値は左辺値ではない。というか,現在の実装は挙動が不安定でバグもある。左辺値を返すように見える例: #!perl use feature 'say'; say s…

Acme::Perl::VM

Shibuya.pm#11まであと一週間ですね! Acme::Perl::VM(APVM)のコアがほぼできたので,CPANにアップしました。今のところ意外なほど順調です。if/for/whileはできますが,foreachなどはまだできません。配列やハッシュの操作もできません。というかHello, wor…

B::Foreach::Iteratorでforeachイテレータを進める

B::Foreach::Iteratorというモジュールを書いた*1。 use B::Foreach::Iterator 0.02; foreach my $key(foo => 10, bar => 20, baz => 30){ printf "%s => %s\n", $key => iter->next; } iter->next()*2はforeachループのイテレータをひとつ進め、その値を返…