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

Xslate, as of 0.1006

Xslateは実行エンジン・パーザ・コンパイラが独立になるように設計してあるため、コンパイル済みの仮想マシンコードを用意すればの実行の際にコンパイラをロードする必要がない。またこのため、パーザ部分だけを切り替えることも比較的簡単にできる。そこで…

Template cascading in Xslate

Xslateにテンプレートの重ね掛け(template cascading)を実装した。 この機能は、DjangoやText::MicroTemplateのテンプレート継承に似ている。 使い方だが、まず基本となるテンプレートを用意し、block $name -> { ... }でブロックを定義する。 base.tx: <section> : b</section>…

OSDC.twで発表してきました。

OSDC.twでXslateを発表してきました。 発表資料:http://gfx.github.com/osdc-tw-2010/main/肝心の発表は、プレゼンの焦点がぶれてしまって*1イマイチな出来でした。ひたすらPerl/XSへの愛を語るほうが私らしくてよかったと思います。とはいえ、この旅行自体…

OSDC.TWで発表します

来週末、4/24に開催されるOSDC.TW(or Shibuya.pm #13)で発表します。そこでは、高速テンプレートエンジン Xslate を紹介するつもりです。これはまだコードを書き始めたばかりで完成には程遠いものの、すでに従来のテンプレートエンジンと比較すると数倍のパ…

Perl 5.12.0 released!

Perl 5.12.0がリリースされたようです。おめでとうございます! http://search.cpan.org/dist/perl-5.12.0/

Benchmarks to Text::ClearSilver

Text::ClearSilver(CS)のベンチマークをとってみた。 比較はTemplate-Toolkit(TT), HTML::Template::Pro(HT), Text::MicroTemplate(MT)、およびMobaSiF::Template(MST)と行った。ベンチマークスクリプトは id:tokuhirom のものをベースに少し複雑にした。 結…

Text::ClearSilver - New ClearSilver binding in Perl

id:Craftworks さんから仕事をもらいまして、ClearSilverのPerlバインディングを書きました。 http://search.cpan.org/dist/Text-ClearSilver/ git://github.com/Craftworks/Text-ClearSilver.git ClearSilver はCで実装されたテンプレートエンジンで、高速…

Visit opcode tree with B

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 to detect unused variables

未使用の変数があるかどうかテストする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…

Install developper's prerequisites with cpanm

Makefile.PLで開発者用のモジュールを宣言するにはM::I::AuthorRequiresがあるが、これはモジュールがインストールされていなければdieするので、結局は手作業でモジュールをインストールしなければならない。しかし、今やcpanmがあるので、「モジュールのリ…

[perl][Yokohama.pm] Yokohama.pm#5に参加しました

Yokohama.pm#5に参加しました。Shibuya.pmとはまた違った雰囲気で楽しかったです。 Yokohama.pm テクニカルトーク#5 (id:clouder)内容については id:hiratara さんの記事が詳しいです。 今日は Yokohama.pm #5 の日です私はPerl 5.12の新機能について発表し…

What's "integer"?

id:tokuhiromによれば,これは10e100+0.1を整数として扱ってしまい,またマシンの制約上10e100と10e100+0.1を識別する方法はないため,良くないのではないかということだ。 よって,正規リリース後に詳細を追記する。 MouseのInt制約で,大きな整数が通らな…

bytes.pm will be deprecated in Perl 5.12

[追記]その後deprecated(廃止予定)ではなくstrongly discouraged(強く非奨励)に状態が改められたが、使用すべきでないという点は変わらない。[/追記] bleadperlのコミットログを眺めていたところ,以下のような記述があった。 deprecate bytes.pm この件…

Mouse will become as strict as Moose

Mouse 0.51からエラーチェックをMooseと同じくらい厳しくする予定です。具体的には,以下の場面で警告や致命的エラーを出します。 has()に未知のオプションが渡されたとき警告 おそらく綴りミスであるため has()によってアクセサが生成されず,かつ is => 'b…

Perl 5.11.5 features

Perlの開発版である5.11系列の最新版がリリースされた。 http://search.cpan.org/dist/perl-5.11.5/ 今回もバグフィクス中心なので,特に列挙すべき新機能はない。組み込みファイルハンドルのクラスが修正されたのが唯一の大きな変更か。 5.11.5までは,組み…

Strict constructor is available in Mouse

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…

About %DB::sub and NYTProf

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の最適化の概要

Perlコアの最適化をまとめておく。まず,opcodeの最適化を主に行っているのは,op.cのPerl_peep()である。ただし,これは最適化以外の処理,たとえばuse strict 'subs'の下でベアワードに対して致命的エラーを投げる,なども行っている。さて,Perl_peep()の…

XS基礎文法最速マスター

元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありま…

Re: プログラミングについての雑記

プログラミングについての雑記(id:perlcodesample) プログラミングが上達するコツは簡単なプログラミングをできるだけたくさん書いて実行することです。本やインターネットを読むだけではプログラミングは上達しません。読むのは3割、書くのが7割ぐらいにな…

The difference of "return;" and "return undef;"

"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 features

Perl 5.11.4がリリースされた。例によって修正をピックアップ: UNIVERSALモジュールによるisa/canのインポートがdeprecatedになり,警告が出るようになった versionのフォーマットが厳格に定められた。詳細は不明だが,package NAME VERSION 構文では"stric…

それでも私がPerlを使い続ける理由

それでもっていうか I ♥ Perl な私ですが。いろいろ並べたてようとしたものの,Perl以外の(LLな)言語はそんなに詳しくないのであまり比較できないことに気付いた。ただ,use strictの元での変数スコープの在り方はRubyやJavaScriptよりも直観的で好き。ブ…

What's your clone policy? - Data::Clone

複雑なデータ構造のコピーにはStorable::dclone()やClone::clone()がよく使われてきた。しかし,これらのクローンポリシーには疑問がある。そこで,新しいクローンモジュールを書いてみた。 Data::Clone - search.cpan.org Data::Clone - github.org さて,…

File::Spec::Memoized - Makes File::Spec faster

File::Specはファイルパスを扱うために欠かせないモジュールだが,メソッドによっては非常に遅くプログラムのボトルネックになりかねない。 このようなケースでは,メモイズ(Memoize)というテクニックが役に立つ。メモイズは,引数が単純で副作用を持たない…

MouseX::Types 0.04 released with type predicates

MouseX::Typesに著作権情報を付加するついでに、オリジナルに搭載されている型述語関数も追加した。ただし、オリジナルと異なり、明示的に指定しない限りエクスポートはしない*1。 #!perl -w use 5.010; use Any::Moose; use Any::Moose 'X::Types::' . any_…

あけましておめでとうございます

今年もよろしくお願いします。今年の目標: p5pにもっと深く関わる コアの最適化とか拡張とか 標準モジュールをいじったりとか Mooseにも引き続き関わる Mouseで得たものをフィードバックしたい Cygwinに関わりたい Cygwin Perlの一部でWin32APIを直接呼び出…