タグ

xsに関するyappoのブックマーク (14)

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    yappo
    yappo 2009/04/07
  • XS code template - 動的にXSUBを生成する - エキスパートPerl - Perl-users.jp

    XSコードはふつうPerlコードよりも多機能で高速ですが,書くのが難しいため敷居が高いことも事実です。また,いちいちコンパイルしなければならないのも煩わしい点です。 ところで,Perlにはクロージャという仕組みがあり,動的にコードを生成することができます。したがって,XSでクロージャに等しいことを実現できれば,XSコードの煩わしさを避けつつXSの利益を享受することができます。 なお,この文書はXSによるコード例を解説していますが,XSそのものについては解説しません。 XSについてはperlxstutやperlxs,perlapiを参照してください。 クロージャの分析 まず,Perlのクロージャを分析します。Perlのクロージャは以下のようなものです。 sub make_accessor{ my($name) = @_; return sub{ $_[0]->{$name} }; } my

    yappo
    yappo 2009/01/28
    すばらしい
  • モダンなXSの書き方 - Islands in the byte stream (legacy)

    PerlのソースコードはPerl言語以上に変化が大きく,それに伴ってXSの書き方もだいぶ変わってきている。新しいAPIを使ったほうが可読性がよかったり高速だったり使いやすかったりする。 たとえば,スカラー(SV)から文字列(PV: pointer valueつまりchar*)を得るAPIの変遷は次のようになっている。 /* SV*からPVを得る古い書き方 */ STRLEN len; const char* pv = SvPV(pv, len); # pvとlen両方ほしいとき const char* pv_only = SvPV(pv, PL_na); # pvだけほしいとき /* その後SvPV_nolen()が追加され,PL_naはdeprecatedに */ const char* pv_only = SvPV_nolen(pv); /* 今は*_constが追加されたのでcons

    モダンなXSの書き方 - Islands in the byte stream (legacy)
    yappo
    yappo 2008/12/19
    期待age
  • 私的 XS メモ - IT戦記

    参考にしたサイト集 perlxs - perldoc.perl.org perlxstut - perldoc.perl.org perlguts - perldoc.perl.org perlapi - perldoc.perl.org http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 Perl XS メモ - typemap と MAGIC をからめて - daily dayflower http://pub.ne.jp/wakapon/?entry_id=1109553 http://pub.ne.jp/wakapon/?entry_id=1109664 準備 $ h2xs -A -n MyXSS Makefile.PL CC => 'g++', 型 SV スカラー AV 配列 HV ハッシュ CV コード GV グロブ RV リ

    私的 XS メモ - IT戦記
    yappo
    yappo 2008/12/13
  • Perl XS メモ - typemap と MAGIC をからめて - daily dayflower

    id:tokuhirom さんが http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 で下地をつくってくださったので(perl-users.jp むけまとめも期待してます),ちょっとアドバンスドな話題を。 例題 http://www.sra.co.jp/people/m-kasahr/eb/ http://www.sra.co.jp/people/m-kasahr/eb/ の Perl binding を開発するとしましょう。 http://www.sra.co.jp/people/m-kasahr/eb/ の使い方は,たとえば次のような感じです。 EB_Book *book_pointer; book_pointer = (EB_Book *) malloc(sizeof(EB_Book)); eb_initialize_book(bo

    Perl XS メモ - typemap と MAGIC をからめて - daily dayflower
    yappo
    yappo 2008/12/10
  • warnings::methodのメカニズム - Islands in the byte stream (legacy)

    warnings::method なぜかスレッドが無効になっている環境ではテストが通らないようだが,とりあえず公開した。 さてメカニズムだが,まずどんなOPコードが生成されるのかを目視したうえで,どのようにOPコードツリーを走査するのか考える。 $ perl -MO=Concise -e 'foo()' 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 5 <1> entersub[t2] vKS/TARG,1 ->6 - <1> ex-list K ->5 3 <0> pushmark s ->4 - <1> ex-rv2cv sK/1 ->- 4 <#> gv[*foo] s/EARLYCV ->5 $ perl -MO=Concise -e 'Foo->foo(

    warnings::methodのメカニズム - Islands in the byte stream (legacy)
  • v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower

    やはりやっつけで。Joke module です。 いろいろ書きたいことがあるけど,そのうち(追記するかも)。 libv8 と XS の間をとりもつ bridge.cc。 /* bridge.cc */ #include <v8.h> #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" /* harmful macro!, but, but, ... */ #undef New #include "bridge.h" using namespace v8; class V8Context { public: V8Context() { HandleScope scope; Handle<ObjectTemplate> global = ObjectTemplate::New(); Handle

    v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower
    yappo
    yappo 2008/09/05
    coderepos!!!
  • use Safe; # XS知らなくても大丈夫! : 404 Blog Not Found

    2008年06月30日16:45 カテゴリLightweight Languages use Safe; # XS知らなくても大丈夫! さすがにこの目的のためだけにXS Hackというのは、ハエ退治にパトリオットミサイル撃つようなものなので、キンチョールも紹介しておきたく。 PL_check hack - daily dayflower ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 そのためには、Safeモジュールを使います。Perl 5.02からCOREに入っている由緒あるモジュールです。Malcolm Beattie がBのフレームワークを作った理由の一つが、これを可能にすることでした。

    use Safe; # XS知らなくても大丈夫! : 404 Blog Not Found
    yappo
    yappo 2008/06/30
    元エントリとこのエントリもまだ読んでないけどマジレスしてるって事だけはなんとなくわかった
  • PerlGuts Illustrated

    PerlGuts Illustrated PerlGuts Illustrated Version 0.06 This document is meant to supplement the perlguts(1) manual page that comes with Perl. It contains commented illustrations of all (eventually?) major internal Perl data structures. Having this document handy hopefully makes reading the Perl source code easier. It might also help you interpret the Devel::Peek dumps. I'll try to expand it as I l

    yappo
    yappo 2008/06/04
    lestrrat++
  • Perl5 C Functions You Don't Know About - D-6 [相変わらず根無し]

    Perl5 C Functions You Don't Know About Perl5は実にさまざまな環境で動く。すると当然だが、C/XSでコードを書くときはその辺りも考慮にいれつつコードを書くのが良い。 File::MMagic::XSはApacheもmod_mime_magicをXSから直接使えるようにポートした物だ。これをPerl用にポートするとなると当然APRが使えないので環境の差を吸収してくれるレイヤーがなくなってしまう。んじゃあそのままCの関数使えばいいのかというと・・・Perl5がすでに吸収してくれるところが結構おおいのだな。 perldoc perlclibとすると、その辺りのC関数→Perlの内部関数の対応表を出してくれる。 が。書いてないものもある。そういうのはperlのソースコードを展開したところで.hファイルを色々grepしてるとでてくるので積極的に使っていくとい

    yappo
    yappo 2008/04/24
  • libcsv 1.0.0、Text::CSV::LibCSV 0.10リリース - spiritlooseのはてなダイアリー

    http://sourceforge.net/forum/forum.php?forum_id=671902 http://search.cpan.org/~jiro/Text-CSV-LibCSV-0.10/ libcsv メジャーバージョンリリース。 libcsvのインターフェースを変更してもらった。 libcsv使ってた方はスミマセンがインターフェースが変わってるので注意です。 コールバックに任意のデータを渡せないのが不便だったので、voidポインタを受け渡しできるようにしてもらった。 で、オブジェクト指向なインターフェースが作れるようになったので早速実装した。 従来のインターフェースはもちろんそのまま使えるけど、 my $parser = Text::CSV::LibCSV->new; $parser->parse($data, $callback); $parser->parse

    libcsv 1.0.0、Text::CSV::LibCSV 0.10リリース - spiritlooseのはてなダイアリー
  • XSモジュールでプロトタイプ宣言 - spiritlooseのはてなダイアリー

    http://subtech.g.hatena.ne.jp/yappo/20070302/1172797971 XSでどう書くか分からないけど use Text::CSV::LibCSV; csv_parse { my @cols = @_; # なんか処理 } $data; とか書けるようになると、どうなんだろう。 宣言部分を void csv_parse(callback, sv_data, opt = 0) SV *callback; SV *sv_data; int opt; PROTOTYPE: &$;$ # 以下略 こう変更すればいけますです。詳細は perldoc perlxsにて。 うーん。何も考えずにライブラリの関数と引数の順番同じにしたけれど、、、 プロトタイプ宣言はすっかり忘れてたなぁ。 まぁいいかぁ。

    XSモジュールでプロトタイプ宣言 - spiritlooseのはてなダイアリー
    yappo
    yappo 2007/03/02
    あざーーーっす!
  • Client Challenge

    A required part of this site couldn’t load. This may be due to a browser extension, network issues, or browser settings. Please check your connection, disable any ad blockers, or try using a different browser.

    yappo
    yappo 2006/11/21
    レポート期待age
  • 2006-05-02 - D-5 出張版

    ■[日常] のんべぇ横丁 13:23 すんげディープ。通います。 ■[開発] Text::MeCab (和製ライブラリの問題?) 09:53 一般的に和製のCライブラリインターフェースが気に入らない。Text::Kakasiもそうなんだけど、initializerでコマンドラインツールの引数と同じ物を渡すのが気に入らない。それのPerlラッパになると、 my $object = SomeObject->new("-O", "-i", "-o", "-Lhoge"); なんてことんいなりやがる。こんなん嫌だ!これはPerlじゃない。嫌い嫌い嫌い!ってことで昨日書いたText::MeCabなんだけど、こんなインターフェース: my $mecab = Text::MeCab->new({ rcfile => $rcfile, dicdir => $dicdir, uuserdic => $

    yappo
    yappo 2006/05/08
    Rastのxmlrpc serverの判別で参考にする
  • 1