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

2009年を振り返る

今年の総括として、Perlとの関わりを振り返ってみる。Perl Modules Pure PerlによるPerl5 Virtual Machineの実装がなんといっても思い出深い。おかげでPerlプログラムの実行が具体的にイメージできるようになった。 B::Foreach::Iteratorでforeachイテレータ…

The path separator which CORE::require requires

require()に渡すパスセパレータは、OSに関わらず常にスラッシュ(/)でよい。というのも、require()は必要に応じてスラッシュ区切りのパスをOS固有の形式に変換するからである。つまり、require()に渡すパスを作成するためにわざわざFile::Specのようなモジュ…

How effective PERL_NO_GET_CONTEXT?

マルチスレッド版perlでは,perl.hをincludeする前にPERL_NO_GET_CONTEXTマクロを定義するとXSUBが速くなる。そのかわり,スレッドコンテキスト*1を意識しなければならない分,XSでのプログラミングがやや煩雑になる。 参考:perlgutsところで,Scalar-List-…

Perl 5.11.3 features

次のバージョンのperlの開発版であるperl-5.11.3がリリースされた。今回は5.12へ向けた5.11系列の最後のリリースということもあり,特に興味深い変更は見当たらない。Unicode関連の拡張とバグフィクスが主な変更点であるようだ。過去の記録: Perl 5.11.2 fe…

Set the entry point in PSGI

PSGIスクリプトはコードリファレンスを返さなければならないということで,スクリプトを以下のようなレイアウトにしなければならないと考えがちだ。 #!perl-w use strict; [モジュールのロード] [ユーティリティ関数群] sub { [メインルーチン] }; __END__ …

Re: CORE::もCORE::GLOBALも動かない?

CORE::もCORE::GLOBALも動かない?組み込み関数すべてがオーバーライドできるわけではありません。printはオーバーライドできないもののひとつです。オーバーライドできるかどうかは,組み込み関数のプロトタイプをサブルーチンプロトタイプで表現できるかど…

Mouse 0.44 released with duck_type

インターフェイスベースの型制約を元に面白いことができないかと思い,Mouse 0.44にMouse::Util::TypeConstraints::duck_typeを加えた。もっとも,Mooseにはずいぶん前から実装されているのだが。duck_typeとは,オブジェクトが特定のメソッドを調べるかどう…

How to use Module::Install::XSUtil - JPerl Advent Calendar 8th

JPerl Advent Calendar 2009の8日目を書きました。 Module::Install::XSUtilでXSモジュール用のMakefile.PLを書く 参考: 複数ファイルを使った中規模 XS の開発 - daily dayflower

Mouse 0.42 "Mouse::XS" released

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…

RFC: A new syntax to give a method an extra block

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 Calendars 2009

今年の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…

A note at December first

Shibuya.pm#12の打ち上げでid:moriyoshi & id:tokuhirom とPerl internalsの話をしたので考えたことをメモしておく。 メソッド呼び出しは関数呼び出しと比べ15-20%遅いと言われているので,これを速くできないか まずクラスメソッドの呼び出しが遅い クラス…

Shibuya.pm#12でLTしました

Shibuya.pm#12でLTしました。perly.yをハックしてブロック付きメソッド呼び出しを可能にする,という話をしました。 たとえばこんなことができるようになります: File->open('<', $foo){ my($io) = @_; $io->grep{ /foo/ }->each{ say @_ }; }; まとめ: pe…

Perlのこれだけは勘弁!というところ

Perlのこれだけは勘弁!というところを挙げてみる。 scalar context/list contextの区別はいらない void/non-voidだけでよかった メソッド呼び出しと関数呼び出しを区別できない 名前付き引数がないのはDISられてもしかたがない 組み込みのinstanceof演算子…

Moose metaclass compatibility is too complex!

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.2 features

Perl 5.11.1 featuresの続報。Perl 5.11.2がリリースされた。例によって個人的に興味をもったトピックを紹介する。 qr overloading 文字列,数値,ブール値に加え,正規表現のオーバーロードができるようになった 正規表現中に埋め込まれるときや,=~演算子…

Now Text::MicroTemplate is even faster than HTML::Template::Pro

前提:Text::MicroTemplateの速度を簡単にベンチマークText::MicroTemplateを最適化したので,ベンチマークをとってみた。 スクリプトはほぼ同じだが,loop countは-1*1にした。 http://github.com/kazuho/p5-text-microtemplate/blob/master/author/benchma…

A REPL command for golang

Go をちょっと試すのに便利な wrapper 二題(by id:sfujiwara)に触発されて,REPLを行うラッパースクリプトを書いてみた。http://github.com/gfx/golang-interpreter/blob/master/g以下のように,mainなどを書くことなく実行できる。 $ ./g go> fmt.Print("He…

Shibuya.pm#12でLTします

Shibuya Perl Mongersテクニカルトーク#12 NoSQL特集Shibuya.pm#12でLTします。タイトルは「Metaprogramming in XS」ということで,Mouse::XSを具体例にXSUBの動的生成について説明するつもりです。

How fast Mouse-XS in applications

v0.40_06から,Mouseが生成するコンストラクタとデストラクタもXSになった。Mouseが生成するアクセサはすでにXS化しているので,かなりのパフォーマンスが期待できるようになったはずだ。 しかし,いくらコンストラクタやアクセサといった部品が速くても,ア…

An implementation of Devel::GlobalDestruction in pure Perl

Devel::GlobalDestruction はPurePerlでも実装できる。 END{ $in_global_destruction = 1; } sub DESTROY{ return if $in_global_destruction; # do something complex } Perlのソースコードも読んだが,これで完全にDevel::GlobalDestruction::in_global_de…

A note on smart match op: $var ~~ constant vs. $var1 ~~ $var2

先日『初めてのPerl 第5版』を少し読んだところ,スマートマッチ演算子についての解説があった。 perlsyn/Smart matching in detailをみると非常に複雑な印象を受けるが,実際にはそれほど複雑ではないようだ。むしろ,うまく使うと非常に便利である。ただし…

Re: Perlさんはどんな人なんだろう?

Perlさんはどんな人なんだろう? - 武蔵の日記でMontana Perl - もしPerlが実際の人物だったらにつっこみをいただきました。ありがとうございます。原作者はPerlの慣習を踏まえて書いているので,Perlになじみのない方にとってはわかりづらいところが多かっ…

Montana Perl - もしPerlが実際の人物だったら

If Programming Languages Were Real Personsを一部だけ訳してみました。私が大好きなのはPerlなのでその部分しか訳しません:) Montnana PerlPerlは37才の若い女性で,Devel Cityの言語学部門でデータアナリストとして働いてる。彼女はセクシーで,同僚たち…

Use -w in applications, use warnings in modules

警告のためには -w ではなく use warnings を使うべき,という意見がある*1。 perl - use warnings; # -w でなくて - 404 Blog Not Found 現代的なPerlの記述方法一覧 + α - Perl入門〜サンプルコードによるPerl入門〜 しかしそれはある意味では正解だが,あ…

Shared strings in XS

XSで共有文字列を活用するの続き。スクリプトを変えて再計測を行った。 http://github.com/gfx/Perl-B-Shared git clone git://github.com/gfx/Perl-B-Shared.git いろいろ試した結果,まとめとしては以下のようになる。 共有文字列の生成と破棄は通常の文字…

Mouse type constraints in XS

MouseのXS化*1が進みつつあります。0.40_04ではtype constraintsを全面的にXSで実装しました。生成されるコードを徹底的にXS化したため,かなり高速になりました。以下はTC付きアクセサに値をセットする場合のベンチマークの結果です。Mouse/benchmarks/type…

A note about ClassName type

以前 id:Craftworks さんとMooseのClassName型について話した件*1で思うところがあったのでメモしておく。 まず,現在のClassName型の定義は以下のようになっている。 sub ClassName { return Class::MOP::is_class_loaded($_); } これは確かにおかしい。ク…

Type as State, Coercion as Hook

MooseのTypeConstraintは,型というよりはあるデータの性質を表現したものだと考えられる。また,TypeCoercionは,ある型(=あるデータの性質)に対してフックを掛けるメカニズムと考えられる。 このように考えると,Coercionを利用していろいろと面白いこ…

Shipped Scalar::Util::Instance

Data::Util::is_instance()をベースに,MooseのTypeConstraint::Classに似たコードジェネレータを書いた。 http://search.cpan.org/dist/Scalar-Util-Instance/ http://github.com/gfx/Perl-Scalar-Util-Instance #!perl -w use strict; use Test::More test…