Hatena::ブログ(Diary)

WebService::Blog->new( user => ’hide_o_55’ )

2013-12-05

テンプレートクラスのメソッドをLD_PRELOADで上書きする

動的にリンクされる共有ライブラリの挙動を変える方法として、有名なのがLD_PRELOADで事前に共有ライブラリをロードしておくことです。しかし、C++テンプレートクラスの挙動を変更する必要があったのですが例があまり見当たらないので記録しておきます。

続きを読む

2013-10-05

MinillaでModule::Build::XSUtilを使う

もう先週の話になりますが、拙作 Module::Build::XSUtilがサポートされたMinilla 0.7.0がリリースされました。

Module::Build::XSUtilとは?

Module::Build::XSUtilはModule::Install::XSUtilと同等の機能をModule::Buildで実現するためのモジュールです。以下の機能があります。

MinillaでModule::Build::XSUtilを使用する方法

minil.tomlに以下のようにXSUtilセクションを記述してください。

[XSUtil]
needs_compiler_c99 = 1
generate_ppport_h = 1
cc_warnings = 1

この設定で、コンパイラのC99サポートのチェック、ディストリビューションのトップディレクトリにppport.hを生成、コンパイラの警告の有効化が行われます。

ファイルを生成する 'generate_ppport_h' と 'generate_xshelper_h' はファイルパスを指定することも可能です。(この機能はMinilla 0.7.0の時点ではバグっていて、0.7.3で修正してます。)

[XSUtil]
generate_ppport_h = "lib/Your/XS/ppport.h"

2013-09-26

YAPC::Asia Tokyo 2013に行ってきた

blogに書くまでがYAPCです。

ってことで、9/20, 21に慶應義塾大学日吉キャンパスで開催されたYAPC::Asia Tokyo 2013に行ってきました。

今年も個人スポンサーとして参加です。個人スポンサー用のTシャツがイケてるので満足です。

以下、ざっくりとした感想など。

1日目

2日目

  • 今年の本命トーク、これからのPerlプロダクトのかたちは、期待通り素晴らしかった
  • 昼食は浜虎
  • 午後はPerl入学式 In YAPC::Asiaにサポーターとして参加
  • 個人的ベストLTはまかまかさん
  • 後夜祭は狭くて暑かったけど、同じテーブルになったdannさんと色々話せてよかった

YAPC::Asia\(^o^)/

懇親会や後夜祭でも何人かにつつかれたMinillaのModule::Build::XSUtilサポートのpull-reqも送って、ブログの書いたのでようやく今年のYAPC::Asiaが終わりですかね。

2013-06-23

Module::Build::Pluggable::XSUtil と Minilla の相性が悪いので Module::Build::XSUtil 作りました

Minillaを使い始めたのですが、MinillaとModule::Build::Plaggableは共にModule::Build::subclass()を使用していて、Module::Build::subclass()は多重に使えないという制約のため一緒には使えません。

XSモジュールではModule::Build::Pluggable::XSUtilを使っていたため、Minillaでも同等のことを行うためのモジュール Module::Build::XSUtil を作りました。

GitHub

MetaCPAN

Minilla専用というわけではなく、素のBuild.PLでも使えます。

なお、オプションの名前はModule::Buildの流儀に近いかたちにアレンジしています。

use strict;
use warnings;
use Module::Build::XSUtil;

my $builder = Module::Build::XSUtil->new(
    dist_name            => 'Your-XS-Module',
    license              => 'perl',
    dist_author          => 'Your Name <yourname@example.com>',
    dist_version_from    => 'lib/Your/XS/Module',
    generate_ppport_h    => 'lib/Your/XS/ppport.h',
    generate_xs_helper_h => 'lib/Your/XS/xshelper.h',
    needs_compiler_c99   => 1,
);
$builder->create_build_script();

Minillaと共に使う際は、minil.tomlに以下の記述を行います。

[build]
build_class = "builder::MyBuilder"
[no_index]
directory = ['t', 'xt', 'inc', 'share', 'eg', 'examples', 'author', 'builder']

そして、以下のような builder/MyBuilder.pm を作成します。

package builder::MyBuilder;
use strict;
use warnings FATAL => 'all';
use 5.008005;
use base 'Module::Build::XSUtil';

sub new {
    my ( $class, %args ) = @_;
    my $self = $class->SUPER::new(
        %args,
        generate_ppport_h     => 'path/to/ppport.h',
        generate_xs_helper_h => 'lib/Your/XS/xshelper.h',
        needs_compiler_c99   => 1,
    );
    return $self;
}

1;

最後に、

$ minil build

で Build.PL を生成すればMinillaでModule::Build::XSUtilを使用できるようになります。

素のBuild.PLを使っている場合は自動的にModule::Build::XSUtilがconfigure_requiresに追加されますが、Minillaの場合はcpanfileに以下のような記述を追加してください。

on 'configure' => sub{
    requires 'Module::Build::XSUtil' => '>=0.02';
};

なお、拙作の Algorithm::HyperLogLogDigest::SpookyHashは既にModule::Build::XSUtilを使うバージョンをリリース済みです。

2013-06-17

Digest::MurmurHash3::PurePerl released!

MurmurHash3をpure perlで計算する。Digest::MurmurHash3::PurePerlCPANにリリースしました。

もともと、Algorithm::HyperLogLog::PP用に作っていた murmur32( ) に murmur128() を加えて、独立したモジュールとしました。

CPANTestersでもいまのところ問題が無いようなので、Algorithm::HyperLogLogのmurmur32の実装も、Digest::MurmurHash3::PurePerlに切り替えました。

参考までに、他のpure perlハッシュ関数(128-bit)と共にベンチマーク結果を以下に貼っておきます。

           Rate     sha     md5 murmur3
sha       808/s      --    -92%    -92%
md5     10000/s   1138%      --     -2%
murmur3 10204/s   1163%      2%      --

Hachioji.pm #29 に行ってきた

6/15に開催された Hachioji.pm #29 に行って来ました。

今回のLTテーマは「ホスティング」でした。

自分のLT

いつものごとくテーマ無視で、Digest::MurmurHash3::PurePerl(metacpan, github)を作ったときの、C言語からPure Perlへの移植に関する話をしました。

スライド

LT

以下、他の参加者のLTのメモです。

@akira1908jpさん
@__papix__さん
@ytnobodyさん
@xtetsujiさん
@ichigotakeさん
@ks0608さん
@equinox79さん
@uzullaさん
@maka2_donzokoさん