perl

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を書くことができるようにはなっていません。リファレンスでもありま…

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_…

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…

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をみると非常に複雑な印象を受けるが,実際にはそれほど複雑ではないようだ。むしろ,うまく使うと非常に便利である。ただし…

Use -w in applications, use warnings in modules

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