XS6日勉強しただけのど素人ですが、CPANにうpまでは行き着いたので、参考になったWebページ・動画など紹介したいと思います。
まず↓の2つでXSってなんぞやというのがなんとなーく分かると思います。
Shibuya Perl Mongersテクニカルトーク#9
- Perl 5 internals の世界にようこそ – daisuke maki先生
- はじめてのXS – ハマりどころはココだ – hirose31先生
ありがたいことに↓にニコニコ動画にテクニカルトークの動画あります。
http://www.nicovideo.jp/mylist/7281253
実際にXSを書き始めるにはひな形があると便利です。
自分は「Module::Setup」のデフォルトのXS flavorを使ってひな形を生成しました。
実際にXS書くにあたってまず参照しまくるのは↓の3つ
- http://perldoc.jp/docs/perl/5.10.0/perlguts.pod
- http://perldoc.jp/docs/perl/5.10.0/perlapi.pod
- http://perldoc.jp/docs/perl/5.10.0/perlxs.pod
C++で書く場合は、http://www.johnkeiser.com/perl-xs-c++.html が参考になります。
XSを書く前に、XSUB, xsubpp, typemap もぞれぞれ何か調べておくと良いです。
あと、興味のあるXSモジュールを適宜参照してお手本にするといいかも。
typemap は最初見たときは「なんじゃこりゃー!」状態でしたが、Livedoor ブログのホームページから「XS site:http://blog.livedoor.jp/kurt0027/」で検索したら出てくるperlxs入門というのを、さっきの3つのperlguts, perlapi, perlxs のpodを参照しつつ確実に理解しながら読んでいくと理解できます。
理解できると、C++の vector< map<string, string> > をPerlのハッシュリファレンスの配列へのリファレンス(であってるかな?)にして返すこともできます。使い回しができるので、Perlの構造体からC構造体への変換、あるいはその逆の変換とかは全部typemapに書いておくと便利。
初めてtypemap書くと多分メモリリークが発生してしまいます。作ったプログラムに大量の入力を食わせつつ、別のとこで「ps u」とかコマンド打てば簡易的にメモリリークのチェックができます。(あまりLinux詳しくないので他にもっといいやりかたがありそう)
メモリリークの発生しない(しにくい)書き方は Xslateでお馴染み(?)の gfx先生の「XS基礎文法最速マスター」や「XSでメモリークを避けるたった一つの方法」が参考になります。
メモリリークの場所の特定法も、gfx先生の「Perlのメモリリークを見つける方法」が詳しいです。
printfデバッグは PerlIO_printf(PerlIO_stderr(), “hoge”); で出来ます。
Makefile.PLを書くときは「Module::Install::XSUtil 」を使うと便利。
なんかよくわからん動作するなというときは、makeしたら生成されるコードとxsのコードを見比べる良いです。
こんなもんか。
他のモジュールに継承されるかもしれない(してほしい)モジュールを作る場合は、さらに魔法を使うといいようです。(詳しくはMAGIC 構造体とかで ggrks です)


