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

Perl6とXslateの関係

Xslateのデフォルトテンプレート構文であるKolonは、Perl5とPerl6からいくつかの特徴を借りてきています。そこで、KolonのPerl6ライクな構文をちょっと紹介します。なお、以下のコードは直接端末にコピー&ペーストで実行できます。実行はRakudo Starをビル…

Xslate.org!

[twitter:@tokuhirom]と[twitter:@lestrrat]さんが中心としたShibuya.pmの面々のおかげでxslateのウェブサイトができました!ありがとうございます! http://xslate.org/ 今後のロードマップとしては、八月半ばに安定版*1の0.20000、YAPC::Asiaに向けて1.000…

How fast system calls are?

「システムコールは遅い」とよくいわれるけれども、実際どのくらい遅いのかというのは測定したことがなかった。しかし実際に測ってみると、システムコールだからといって、Perlの他の操作と比較して必ずしも遅いとは限らないようだ。特に、time(2)*1は非常に…

Yokohama.pm#6 x Perl Casual#3でLTしてきました

Yokohama.pm#6 x Perl Casual#3でLT枠をいただきました。三行でまとめると、「Any::Mooseは効率を上げるために使えるツールなので、試してみることをお勧めしますよ!」ってことです! Any::Moose入門 参考文献: Moose - Japan Perl Association ドキュメン…

Oh, Class::Accessor 0.34 has its own import()!

use base qw(Class::Accessor::Fast Exporter);としているコードでエクスポートが利かなくてはまった。既存のコードは動いているので原因を調べたところ、Class::Accessorの最新版を使ったのがよくなかったらしい。つまり、Class::Accessorの最新版(0.34)でM…

Get the width and height from images

Smartyって画像サイズを自動的に<img />に埋め込んだりするんですね。 というわけで、Perlで画像サイズを得るのに何が速いかベンチマークしてみました。 結果: Image::Info/1.30 Image::Size/3.221 Imager/0.75 GD/2.45 Rate GD Imager Image::Info Image::Size GD…

Xslate now cooperates with Data::Section::Simple

[twitter:@typester]さんがText::MicroTemplate::DataSectionを書いて気になっていたところ、[twitter:@kazeburo]さんからもXslateの対応について要求があったので、version 0.1043でData::Section::Simpleと協調するようにしました。 ただし、依存モジュー…

MouseX::StrictConstructor released!

MouseX::StrictConstructorを書きました。 http://search.cpan.org/dist/MouseX-StrictConstructor (coming soon) http://github.com/gfx/p5-MouseX-StrictConstructor strict constructor自体はずいぶん前から実装されていたのですが*1、Mooseとの互換性を…

Clevyに関する覚書

http://github.com/gfx/p5-Text-Clevy XslateのHEADではApp::xslateからも使えるようになってます*1。 コマンドラインから: $ xslate -E Text::Clevy -e 'Hello, {$ARGV.0} world!' Clevy Hello, Clevy world! $ xslate -E Text::Clevy -e '{$smarty.now|dat…

HTML form management on Xslate

@typesterさんの指摘を受けて再考中。確かに、気軽にrawを書くようになると、結局「うっかりraw」をする可能性が生じて安全性が下がります。テンプレートではrawを使うべきではない、ということを前提にドキュメントと記事を書き直しました。 参考: @fujiwa…

Smarty compatible template engine on Xslate

Xlsateの基本機能が安定してきたので、Smarty互換のパーサを書き始めました。 http://github.com/gfx/p5-Text-Clevy "smart" -> "Smarty" からの連想で、"clever" -> "Clevy" という命名です。 Smartyは非常に機能が多く、パーサーだけでは対応できないため…

Perl 5.13.2 released!

Perlの開発版である5.13.2がリリースされた。 http://search.cpan.org/dist/perl-5.13.2/ 今回はかなり意欲的な変更を含んでいる。 文字列置換における/r修飾子の導入。s/foo/bar/r は元の文字列を変更せず、置換後の文字列を返す。これは特に、mapと共に使…

Template Toolkit sucks

Template Toolkitはどういうわけか*1Perlにおける標準のテンプレートエンジンの座にいるが、その仕様は美しいとは言い難い。特にまずいのは、 あるトークンの意味がコンテキストや実行状態によって異なることだ。 記号の意味がコンテキストによって異なる例…

Xslate with Direct Threaded Code

Ruby 1.9が採用しているVMの最適化手法に、Direct Threaded Codeというものがあるらしい。 YARV Maniacs #3 ターゲットコードが大きくなる代わりにVMの実行ループがかなり速くなるようだ。これを、Xslateに採用しない手はない、ということで簡単に実装してみ…

Smartyを調べている

XslateがSmartyをサポートしたらいいのに、という要望があったので、Smartyを調べている。Smartyは極力「プログラミング」をできないようにしているようで、確かに使いやすそうだ。 調べてみるとcycle関数が面白そうなのでとりあえずXslateに似た機能を実装…

Test::LeakTrace has been improved at 0.11

Test::LeakTraceは、主にXSコードのメモリリークを追うために書いたライブラリだが、誤検出(false positive)が多く使いにくかった。今回RTチケットを受け取ったのを機に、検出アルゴリズムを再考したので、誤検出はほぼなくなったはずだ*1。 新しいアルゴリ…

How to collect exportable functions

モジュールがエクスポートする関数を集めたい、と思うことがある*1。 すべてのモジュールがExporterを使っているなら、 @EXPORT_OK を見るだけでいいのだが、実際にはそうはいかない。しかたがないので、一旦他のパッケージにエクスポートし、その後コードリ…

Xslate vs. JSON::XS

(追記あり) Xslate 0.1033ではsort/mapにブロックを渡せるようになった。 <: $a.sort( -> $a, $b { $a.title cmp $b.title } ).join(", ") :> <: $a.map( -> $x { $x + 1 } ).join(", ") :>ところで[twitter:@xaicron] さんによれば、JavaScriptが使える端末向けの場合は、テンプレート</:></:>…

How and when Xslate escapes html special characters

Xslate のエスケープポリシーについて考えたので、ここでまとめておく*1。 Xslate のエスケープ処理について、覚えることは以下の三つである 'none' のもとでは挙動が異なるが、これはメールなどの非HTMLテキストを出力するために用意されているモードであり…

Xslate supports binding

Xslateが束縛(binding)をサポートし、値に名前をつけることができるようになった。ただしそれらは定数扱いであり、代入はできない。 <: # constantはベアワードを要求 constant LANG = "Xslate"; # myは変数名を要求 my $lang = "Perl"; -:> Hello, <: LANG :> world! Hello, <: $lang :> world!myで宣言した定数も、定数なので代入を禁止している。その代わり、コンパイル時に決定でき</:></:></:>…

Xslate 0.1025 works on 5.8.1

Xslateが5.8.1でも動くようになりました。 また、makamakaさんの努力により、pure Perl版が高速になりました。Text::MicorTemplateを少し上回るスコアを出しています*1。 benchmark/others.pl $ XSLATE=pp perl -Mblib benchmark/others.pl Perl/5.10.1 i686…

Tsukuba.xs #1 無事終了!

Tsukuba.xs #1 Beer Talksですが、主催者が遅刻*1したりマック勢がプロジェクターへつながらなかったりといろいろハプニングはあったものの、無事終えることができました。 会場を提供していただいたリクルートさんありがとうございました! 無茶ぶりにも関…

Crazy module end markers

先日Classic::Perlというモジュールで奇妙なモジュール終末値*1を見た。 # snip __THE__ => __END__ =head1 NAME この発想はなかった。=>演算子の左辺は裸のワードでよく、しかも演算子の右辺は省略できる)という構文が許される。,演算子から類推すると理解…

来年から株式会社ディー・エヌ・エーで働きます

文系・不況・経歴に傷ありと三重苦を負っての就職活動でどうなることかと心配でしたが、無事就職活動を終えることができました。DeNAに就職します。Perlができると就職できるというのは本当でしたね。今回の就職活動においては、竹迫さんと牧さんには具体的…

XSでメモリークを避けるたった一つの方法

XSでメモリリークを避ける基本原則は、それほど難しくない。すなわち、作ったSV(およびSVファミリ)はすぐsv_2mortal()するのである。mortalなSVはスコープ*1から抜けるときに解放されるため、メモリリークは起こらない。つまり、あるスコープ内で新しく作っ…

Tsukuba.xs Beer Talks #1 を開催します!

Sartakが日本に来ているという事で、Perl/XSを話題にカンファレンスを行うことになりました。XS Niteに続いて二度目のXSオンリーの会です。楽しみですね!! 参加申し込みはATNDからどうぞ。 Tsukuba.xs Beer Talks #1 いつものShibuya.pmと違い、飲食物が出…

Xslate now work without C compilers

Xslateですが、pure Perlで動くようになりました。makamakaさんが一週間でやってくれました!複雑なXSコードを移植するのは大変だったと思います。ほんとありがとうございます。また、lestrratさんがttree(1)ライクなxslate(1)を作ってくれました。すばらし…

Xslate error handling policy will be changed

Xslateはいままで $SIG{__WARN__} = \&croak 相当のことをして、すべての警告で致命的エラーにしていた。しかし、これは非プログラマが使うには厳しすぎるということで、エラー制御のポリシーを変更することにした。 次のリリースでは以下のようにするつもり…

Top Down Operator Precedence is awesome!

『ビューティフル・コード』に演算子優先順位解析法という構文解析法が載っていた。これが面白そうだったので、Xslateのパーザに採用してみたところ、なるほど素晴らしい。『ビューティフル・コード』に載せるだけのことはある。手書きのパーザ読みにくいこ…

Xslate, as of 0.1009

id:tokuhirom の助言を受けて、APIの見直しなどをした*1。 キャッシュディレクトリのデフォルトが、テンプレートファイルと同じディレクトリからFile::Spec->tmpdirへ。これはcache_dirオプションで変更もできる 一引数の render(\%vars) は混乱を招くため廃…