タグ

xsに関するnuraiのブックマーク (10)

  • 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

    nurai
    nurai 2009/04/08
  • 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

    nurai
    nurai 2009/04/03
  • PerlのXSからPerlの関数を簡単に呼び出せるようにしてみた (C++で) - moriyoshiの日記

    Perlの謎APIをwrapして、Perlスクリプトの関数をC++から簡単に呼び出せるようにしてみた。 てか、 リファレンスカウントを透過的に行えるようpimpl形式のコンテナを使ってみる mortalを透過的に行えるようcall_sv()による関数呼び出しを完全にブラックボックス化する って実験をやりたかっただけなのにDevel::BindPPとは完全に別プロダクトになっちゃいました。 test1() は、任意の数の引数を取り、引数の合計値を返す add()という関数 *1 を C++ から呼び出す例。 test2() は、MIME::Base64::encode_base64() を呼び出す例。 test3() は、複数個の値を返す関数を処理する例。 test4() は、perl::value() の演算子オーバロードのテスト。 #include <iostream> #include

    PerlのXSからPerlの関数を簡単に呼び出せるようにしてみた (C++で) - moriyoshiの日記
    nurai
    nurai 2009/04/03
  • セキュアな XS ローダー - id:kazuhookuのメモ置き場

    perl のプロセス内でサンドボックスを作ろうと思うと、少なくとも以下の2点が必要です。 オプコードの制限 DynaLoader::dl_install_xsub を利用したネイティブコード注入 このうち、オプコードの制限については、ops モジュールで行うことが可能です。一方、DynaLoader::dl_install_xsub 関数については、これを単純に使えなくしてしまうと、XS モジュールをロードできなくなってしまうので、一定の条件下でのみ、これが実行されるような仕組みを作ってやる必要があります。 というわけで私案。クロージャーを使って、以下のような形にするのはどうでしょう? 「strict::import とか書き換えられちゃうとダメじゃね?」ということで没ネタですorz #! /usr/bin/perl use strict; use warnings; use DynaLo

    セキュアな XS ローダー - id:kazuhookuのメモ置き場
    nurai
    nurai 2009/03/17
  • Test::LeakTrace 0.07 - Islands in the byte stream (legacy)

    Devel::LeakTraceもそうだが,0.07以前のTest::LeakTraceは不可解な値を報告することがあった。 $ perl -MDevel::LeakTrace::Fast -e 'my $a; my $b = \$a' leaked SV(0x0x8f87dd8) from -e line 1 leaked SV(0x0x8f87c94) from -e line 1 $ perl -MTest::LeakTrace::Script -le -e 'my $a; my $b = \$a' leaked SCALAR(0x9f4cdd8) from -e line 1. $ 「Test::LeakTraceをCPANにあげた」の記事でも,目的の相互参照だけでなく,空のハッシュが報告されている。 長らくこれが何なのか分からなかったのだが,この現象のメカニズムをどうやら特定でき

    Test::LeakTrace 0.07 - Islands in the byte stream (legacy)
    nurai
    nurai 2009/03/05
  • 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

  • [Perl] 高速&省メモリ perl-xs版 split モジュール

    大量の csv ファイルを読み込んで処理をするとき、カンマやタブ区切りのレコードを split や正規表現を使って文字列を分割して配列に入れて処理・・・なんて事は良くやります。mysql 等のデータベースに入っているデータなら速度的に問題が発生することは少ないのですが、どうしても csv のまま処理をしなければならない場合、文字列の分割のコストがバカになりません。 perl の split はかなり優秀で正規表現で分割するよりも高速に文字列を分割することが可能です。しかしながら、split でさえ用件によっては遅い場合もあります。実際、1 レコードあたり 300 カラム程度のデータが 20 万件ほど存在する場合、split で分割して配列に格納するコストが Pentium-4 2.8G + メモリ 2G ですら、30 〜 40 秒ほどかかってしまいます。 そこで、僅かながらではありますが、

    nurai
    nurai 2009/01/23
  • Re: XSの勉強を始めるためのエントリーポイントは? - Islands in the byte stream (legacy)

    Re: XSの勉強を始めるためのエントリーポイントは? あまり参考にならないかもしれませんが,私がXSを勉強するにあたっては,CPANのモジュールのソースコードを読むより実際に書いてみるのが一番だと思います。ただし,何か特定の目的があって,そのために関係がありそうなコードを探して読む,ということは非常によくあります。 以下,思いついたことを適当に並べてみます。 自分でコードを書いてみて初めて分かることが少なくない 学ぶのに適した理想的なコードは,そう簡単には見つからない 古い書き方やおかしな書き方をしているコードも大量にあるので,そういうコードをフィルタリングするためにも,いろいろな作者のコードを読んだほうがいい 多くのコードの中から理想的な部分を抜き出して,それを身につけていく 目的とまったく関係ないコードから閃きを得ることも多い perlのソースコードをすぐ参照できるようにしておくのは

    Re: XSの勉強を始めるためのエントリーポイントは? - Islands in the byte stream (legacy)
    nurai
    nurai 2009/01/22
  • 私的 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戦記
    nurai
    nurai 2009/01/16
  • モダンな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)
    nurai
    nurai 2009/01/16
  • 1