2008-06-25
@ [shibuya.pm] Shibuya Perl Mongersテクニカルトーク#9 (XS Nite)に行ってきました
久々にテクニカルトークに行ってきました。レポートというかまとまっていないログと感想ですが、記録のために残しておきます。
- # はじめてのXS (hirose31さん)
- 10分遅れで参加したので最初のほうを聞けなかったのですが、XSだとメモリリークの問題があるよ〜、と言っていました。malloc/freeのように、New〜したものはSafefree()、newSV〜したものはsv_freeをして解放しないと駄目ですよと。プロファイリングにはgprofは使えないのでvalgrindを使うと良いらしいです。最後のdankogaiさんの質問が厳しかったです。
- # Perl 5 Internalsの世界にようこそ (Daisuke Makiさん)
-
- XS / XSUB: CとPerlの橋渡し
- 実装がわかると世界が変わる→パフォーマンスチューニングがしやすくなる
- 基本的な構造体 - SV,AVなどなど
- 何はともあれSV - スカラー値。なんでも入る入れ物
- SVの種類: IV,UV,NV,PV,RVなど
- SVの構造
- ANY:ポインタ
- REFCNT:参照回数
- FLAGS:文字列かどうかなどのフラグ
- SV以外の型 - AV:配列
- Structural Equivalencce
- 構造体内のバイトオフセットを調節することによってC++ライクなキャストができる
- AVのポインタをSVのポインタにキャストするとか
- REFCNT: 参照回数
- SvMAGIC: Perl内部で何かが起こったときに呼ばれるハンドラを登録することができる
- tieの仕組み - tieするとポインタの型が変わる(MAGICが使えるようになる)
- 'ext' MAGIC
- 一部の人に説明しろってYAPCでいわれた。
- しかし当の本人たちはきていないらしいw
- SV操作をいくらCでやっても意味がない。5%ぐらいしか早くならない
- C Library: Cだけでできることをおこなう
- XS: PerlからCを呼ぶため(またはその逆)のアダプタ
- Perl: XSで定義されたAPI
- XS関数処理の流れ: XS関数->xsubpp->Cプリプロ->コンパイル
- XSセクション: xsubppによって展開される
-
Typemap
- Perl <-> C 型の自動変換
- カスタムコードも差し込める!
- Typemapをうまく使えば、XSコードはほぼ消せる
- Typemapの使用例: Text::MeCabなど
- Devel::Peek: REFCNTなどがわかるのでメモリリークも見つけられる
- # Inside Ruby.pm (藤 吾郎さん)
-
- Ruby.pmの機能
- PerlからRubyの機能を呼び出す
- PerlによるRubyの実装ではない
- Rubyソースコードの基礎知識
- VALUE: XSのSVみたいなもの
- Qnil: Ruby上のnil
- Qtrue,Qfalse: Ruby上のtrue,false
- ID: 文字列に対するユニークな整数値
- 以降、えんえんとRuby.pmの実装の説明
- 単純にRubyのメソッドを動かすのであればすごく簡単にできる
- Rubyには例外がありこれを捕捉するのが難しいのでコードが複雑になっている
- Ruby.pm は現状Cygwinでしか動かない
- Ruby.pmの機能
- # Perlマシン(PerlMachine) (wakaponさん)
-
- PerlMachineとは?: 特定のプログラミング言語を専用に動作させることを目的とした計算機
- PerlMachineの構成
- grub: ブートローダ
- microperl: 組み込み用Perl
- newlib: 組み込み用のlibcライブラリ
- FatFS: 汎用FAT
- Lightning Talks
-
- autobox internals (tokuhiromさん)
- "foo"->length: Syntax上は問題ないがRuntime Errorになる
- →autoboxはVMをハックして実現している。変態的。
- PL_check hacks (yappoさん)
- PL_checkとは?:関数のフックテーブル
- arguments::callee (takesakoさん)
- my $f = sub { $f->(); } がPerlだとできないという問題があったのでarguments::callee を作った
- xs on mod_perl (stanakaさん)
- mod_perlでプログラムを実行中に問題があったときにgdbで原因を調べる
- Abstract Script Engine (higuchiさん)
- 各種スクリプト言語やランタイムを混ぜて使える環境
- Unix,WIndowsで動作
- スクリプト言語
- Perl5VM Golf (tokuhiromさん)
- 1000opを目指す短いコードの数々w
- ループは大量のopコードを生成してくれる
- autobox internals (tokuhiromさん)
全体的にPerlの話というよりかはCとPerlをうまく組み合わせてどうこうするという話だったので、Cを忘れかけている自分にはやや辛い内容でした。ただ、こういう話を聞かないとずっとPerlばっかりでXS使おうとか思わないので、そういう点ではいい内容だったと思います。ちなみにdankogaiさんが異様に突っ込みを入れていたのが一番印象に残りました。あれぐらいの規模だと話中に突っ込んじゃうのですねぇ。
[ツッコミを入れる]