perl
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を書くことができるようにはなっていません。リファレンスでもありま…
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_…
require()に渡すパスセパレータは、OSに関わらず常にスラッシュ(/)でよい。というのも、require()は必要に応じてスラッシュ区切りのパスをOS固有の形式に変換するからである。つまり、require()に渡すパスを作成するためにわざわざFile::Specのようなモジュ…
マルチスレッド版perlでは,perl.hをincludeする前にPERL_NO_GET_CONTEXTマクロを定義するとXSUBが速くなる。そのかわり,スレッドコンテキスト*1を意識しなければならない分,XSでのプログラミングがやや煩雑になる。 参考:perlgutsところで,Scalar-List-…
次のバージョンのperlの開発版であるperl-5.11.3がリリースされた。今回は5.12へ向けた5.11系列の最後のリリースということもあり,特に興味深い変更は見当たらない。Unicode関連の拡張とバグフィクスが主な変更点であるようだ。過去の記録: Perl 5.11.2 fe…
PSGIスクリプトはコードリファレンスを返さなければならないということで,スクリプトを以下のようなレイアウトにしなければならないと考えがちだ。 #!perl-w use strict; [モジュールのロード] [ユーティリティ関数群] sub { [メインルーチン] }; __END__ …
CORE::もCORE::GLOBALも動かない?組み込み関数すべてがオーバーライドできるわけではありません。printはオーバーライドできないもののひとつです。オーバーライドできるかどうかは,組み込み関数のプロトタイプをサブルーチンプロトタイプで表現できるかど…
インターフェイスベースの型制約を元に面白いことができないかと思い,Mouse 0.44にMouse::Util::TypeConstraints::duck_typeを加えた。もっとも,Mooseにはずいぶん前から実装されているのだが。duck_typeとは,オブジェクトが特定のメソッドを調べるかどう…
JPerl Advent Calendar 2009の8日目を書きました。 Module::Install::XSUtilでXSモジュール用のMakefile.PLを書く 参考: 複数ファイルを使った中規模 XS の開発 - daily dayflower
I have released Mouse 0.42 "Mouse::XS". http://search.cpan.org/dist/Mouse/ From this version, Mouse generates constructors, destructors, and accessors in XS. These generated mehtods are much faster than pure Perl methods, especially in att…
In Shibuya.pm#12, I have proposed a new syntax to Perl, which allows to give a method an extra block like Ruby.For example: File->open('<', $file) { my($io) = @_; $io->grep{ /^foo/ }->each{ say @_ }; }; This is simply interpreted as: File-…
今年のPerl Advent Calendarをまとめてみました。 Perl Advent Calendar 2009 JPerl Advent Calendar 2009 Hacker Track - JPerl Advent Calendar 2009 Casual Track - JPerl Advent Calendar 2009 DBIx::Skinny - JPerl Advent Calendar 2009 Data::Model T…
Shibuya.pm#12の打ち上げでid:moriyoshi & id:tokuhirom とPerl internalsの話をしたので考えたことをメモしておく。 メソッド呼び出しは関数呼び出しと比べ15-20%遅いと言われているので,これを速くできないか まずクラスメソッドの呼び出しが遅い クラス…
Shibuya.pm#12でLTしました。perly.yをハックしてブロック付きメソッド呼び出しを可能にする,という話をしました。 たとえばこんなことができるようになります: File->open('<', $foo){ my($io) = @_; $io->grep{ /foo/ }->each{ say @_ }; }; まとめ: pe…
Perlのこれだけは勘弁!というところを挙げてみる。 scalar context/list contextの区別はいらない void/non-voidだけでよかった メソッド呼び出しと関数呼び出しを区別できない 名前付き引数がないのはDISられてもしかたがない 組み込みのinstanceof演算子…
Mooseのmetaclass compatibilityのルールがとんでもなく複雑だということがわかったのでメモしておく。 コード例: #!perl use strict; use warnings; use Test::More tests => 4; use Moose::Util qw(does_role); { package FooTrait; use Moose::Role; pac…
Perl 5.11.1 featuresの続報。Perl 5.11.2がリリースされた。例によって個人的に興味をもったトピックを紹介する。 qr overloading 文字列,数値,ブール値に加え,正規表現のオーバーロードができるようになった 正規表現中に埋め込まれるときや,=~演算子…
前提:Text::MicroTemplateの速度を簡単にベンチマークText::MicroTemplateを最適化したので,ベンチマークをとってみた。 スクリプトはほぼ同じだが,loop countは-1*1にした。 http://github.com/kazuho/p5-text-microtemplate/blob/master/author/benchma…
Shibuya Perl Mongersテクニカルトーク#12 NoSQL特集Shibuya.pm#12でLTします。タイトルは「Metaprogramming in XS」ということで,Mouse::XSを具体例にXSUBの動的生成について説明するつもりです。
v0.40_06から,Mouseが生成するコンストラクタとデストラクタもXSになった。Mouseが生成するアクセサはすでにXS化しているので,かなりのパフォーマンスが期待できるようになったはずだ。 しかし,いくらコンストラクタやアクセサといった部品が速くても,ア…
Devel::GlobalDestruction はPurePerlでも実装できる。 END{ $in_global_destruction = 1; } sub DESTROY{ return if $in_global_destruction; # do something complex } Perlのソースコードも読んだが,これで完全にDevel::GlobalDestruction::in_global_de…
先日『初めてのPerl 第5版』を少し読んだところ,スマートマッチ演算子についての解説があった。 perlsyn/Smart matching in detailをみると非常に複雑な印象を受けるが,実際にはそれほど複雑ではないようだ。むしろ,うまく使うと非常に便利である。ただし…
警告のためには -w ではなく use warnings を使うべき,という意見がある*1。 perl - use warnings; # -w でなくて - 404 Blog Not Found 現代的なPerlの記述方法一覧 + α - Perl入門〜サンプルコードによるPerl入門〜 しかしそれはある意味では正解だが,あ…