2010-01-01から1年間の記事一覧
Xslateは実行エンジン・パーザ・コンパイラが独立になるように設計してあるため、コンパイル済みの仮想マシンコードを用意すればの実行の際にコンパイラをロードする必要がない。またこのため、パーザ部分だけを切り替えることも比較的簡単にできる。そこで…
Xslateにテンプレートの重ね掛け(template cascading)を実装した。 この機能は、DjangoやText::MicroTemplateのテンプレート継承に似ている。 使い方だが、まず基本となるテンプレートを用意し、block $name -> { ... }でブロックを定義する。 base.tx: <section> : b</section>…
OSDC.twでXslateを発表してきました。 発表資料:http://gfx.github.com/osdc-tw-2010/main/肝心の発表は、プレゼンの焦点がぶれてしまって*1イマイチな出来でした。ひたすらPerl/XSへの愛を語るほうが私らしくてよかったと思います。とはいえ、この旅行自体…
来週末、4/24に開催されるOSDC.TW(or Shibuya.pm #13)で発表します。そこでは、高速テンプレートエンジン Xslate を紹介するつもりです。これはまだコードを書き始めたばかりで完成には程遠いものの、すでに従来のテンプレートエンジンと比較すると数倍のパ…
Perl 5.12.0がリリースされたようです。おめでとうございます! http://search.cpan.org/dist/perl-5.12.0/
Text::ClearSilver(CS)のベンチマークをとってみた。 比較はTemplate-Toolkit(TT), HTML::Template::Pro(HT), Text::MicroTemplate(MT)、およびMobaSiF::Template(MST)と行った。ベンチマークスクリプトは id:tokuhirom のものをベースに少し複雑にした。 結…
id:Craftworks さんから仕事をもらいまして、ClearSilverのPerlバインディングを書きました。 http://search.cpan.org/dist/Text-ClearSilver/ git://github.com/Craftworks/Text-ClearSilver.git ClearSilver はCで実装されたテンプレートエンジンで、高速…
Test::Vars の解説を少しだけ。Perlの構文木を歩き回るには、B::walkoptree()かB::walkoptree_exec()を使う。基本的なやり方は以下の通りである。 #!perl -w use strict; use feature 'say'; use B; my $cv = B::svref_2object(sub{ $_[0] + 42 }); local *B…
未使用の変数があるかどうかテストするTest::Varsというモジュールを書いた。 http://github.com/gfx/Perl-Test-Vars http://search.cpan.org/dist/Test-Vars/ 使用感は以下のようになる。 $ perl -MTest::Vars -e 'vars_ok "Test::Builder";' # $pack is us…
Makefile.PLで開発者用のモジュールを宣言するにはM::I::AuthorRequiresがあるが、これはモジュールがインストールされていなければdieするので、結局は手作業でモジュールをインストールしなければならない。しかし、今やcpanmがあるので、「モジュールのリ…
Yokohama.pm#5に参加しました。Shibuya.pmとはまた違った雰囲気で楽しかったです。 Yokohama.pm テクニカルトーク#5 (id:clouder)内容については id:hiratara さんの記事が詳しいです。 今日は Yokohama.pm #5 の日です私はPerl 5.12の新機能について発表し…
id:tokuhiromによれば,これは10e100+0.1を整数として扱ってしまい,またマシンの制約上10e100と10e100+0.1を識別する方法はないため,良くないのではないかということだ。 よって,正規リリース後に詳細を追記する。 MouseのInt制約で,大きな整数が通らな…
[追記]その後deprecated(廃止予定)ではなくstrongly discouraged(強く非奨励)に状態が改められたが、使用すべきでないという点は変わらない。[/追記] bleadperlのコミットログを眺めていたところ,以下のような記述があった。 deprecate bytes.pm この件…
Mouse 0.51からエラーチェックをMooseと同じくらい厳しくする予定です。具体的には,以下の場面で警告や致命的エラーを出します。 has()に未知のオプションが渡されたとき警告 おそらく綴りミスであるため has()によってアクセサが生成されず,かつ is => 'b…
Perlの開発版である5.11系列の最新版がリリースされた。 http://search.cpan.org/dist/perl-5.11.5/ 今回もバグフィクス中心なので,特に列挙すべき新機能はない。組み込みファイルハンドルのクラスが修正されたのが唯一の大きな変更か。 5.11.5までは,組み…
Strict constructor, which will warn unknown (maybe misspelled) arguments, is as useful as the strict pragma. For Moose, there is an extention to provide strict constructor: MooseX::StrictConstructor. Now Mouse 0.50_02 supports strict const…
NYTProfのHTML出力では,サブルーチンが定義された位置に対するリンクがある。これは,%DB::subというデバッグAPI*1を通じて取得している。 perldoc DB: DB - programmatic interface to the Perl debugging API (snip) %DB::sub The keys of this hash are …
最適化するのに相応しいサブルーチンのみ最適化できるように,optimizer::hotspotというモジュールを考えてみた。まだCPANクオリティではないのでgithubのみ。 http://github.com/gfx/Perl-optimizer-hotspot 仕組みとしては,PL_peeppをフックして,生成さ…
Perlコアの最適化をまとめておく。まず,opcodeの最適化を主に行っているのは,op.cのPerl_peep()である。ただし,これは最適化以外の処理,たとえばuse strict 'subs'の下でベアワードに対して致命的エラーを投げる,なども行っている。さて,Perl_peep()の…
元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありま…
プログラミングについての雑記(id:perlcodesample) プログラミングが上達するコツは簡単なプログラミングをできるだけたくさん書いて実行することです。本やインターネットを読むだけではプログラミングは上達しません。読むのは3割、書くのが7割ぐらいにな…
"Perl Best Practices" recommends to use "return;"*1 to return nothing, but it might be wrong in some cases. If you use this idiom for those functions which are expected to return a scalar value, e.g. searching functions, the user of those …
Perl 5.11.4がリリースされた。例によって修正をピックアップ: UNIVERSALモジュールによるisa/canのインポートがdeprecatedになり,警告が出るようになった versionのフォーマットが厳格に定められた。詳細は不明だが,package NAME VERSION 構文では"stric…
それでもっていうか I ♥ Perl な私ですが。いろいろ並べたてようとしたものの,Perl以外の(LLな)言語はそんなに詳しくないのであまり比較できないことに気付いた。ただ,use strictの元での変数スコープの在り方はRubyやJavaScriptよりも直観的で好き。ブ…
複雑なデータ構造のコピーにはStorable::dclone()やClone::clone()がよく使われてきた。しかし,これらのクローンポリシーには疑問がある。そこで,新しいクローンモジュールを書いてみた。 Data::Clone - search.cpan.org Data::Clone - github.org さて,…
File::Specはファイルパスを扱うために欠かせないモジュールだが,メソッドによっては非常に遅くプログラムのボトルネックになりかねない。 このようなケースでは,メモイズ(Memoize)というテクニックが役に立つ。メモイズは,引数が単純で副作用を持たない…
MouseX::Typesに著作権情報を付加するついでに、オリジナルに搭載されている型述語関数も追加した。ただし、オリジナルと異なり、明示的に指定しない限りエクスポートはしない*1。 #!perl -w use 5.010; use Any::Moose; use Any::Moose 'X::Types::' . any_…
今年もよろしくお願いします。今年の目標: p5pにもっと深く関わる コアの最適化とか拡張とか 標準モジュールをいじったりとか Mooseにも引き続き関わる Mouseで得たものをフィードバックしたい Cygwinに関わりたい Cygwin Perlの一部でWin32APIを直接呼び出…