タグ

xsに関するTAKESAKOのブックマーク (65)

  • HTTP::Parser::XS - a PSGI compatible, fast http parser - kazuhoのメモ置き場

    んー、と思って、書いた。GitHub - kazuho/p5-http-parser-xs: a fast http parser BLURB は、 PSGI のリクエストオブジェクトを返す 高速 同期 httpd, 非同期 httpd のどちらを実装する際にも使用可能 POST コンテンツのハンドリングはご自分で いったんファイルに入れたり、いろいろ要件があるし、パース作業は発生しないので Perl でもあまり遅くならないため てな感じです。以下ベンチマーク。 $ ./http-parser-vs-xs-benchmark.pl Rate HTTP::Parser HTTP::Parser::XS HTTP::Parser 2978/s -- -95% HTTP::Parser::XS 54348/s 1725% --ベンチマークに使ったコードは、以下のとおり。 #! /usr/bin/

    HTTP::Parser::XS - a PSGI compatible, fast http parser - kazuhoのメモ置き場
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    TAKESAKO
    TAKESAKO 2009/08/10
    >PERL_MAGIC_extはPerlコードからは全く見えず、ユーザー側からは普通の変数にしか見えない。また、Perlが内部的に変更することもない。XS開発者だけがアクセス出来る。
  • XSをモジュールなしでロードするには? - clouder's blog

    よくわかってないんだけど、とりあえず動いたので忘れないようにメモ。 (ただしこれはOSX上でのことなので他のOSだとところどこパスなどで違う部分があると思う) 1. hoge.xsを作る 今回は単純にパッケージ名をPACKAGENAMEで、メソッド名methodnameというのが1つあるだけのhoge.xsだとする。 2. xsubppというコマンドでhoge.xsをhoge.cに変換する typemapが必要なのでExtUtilsのパッケージの中のを使う。 % xsubpp -typemap /System/Library/Perl/5.8.8/ExtUtils/typemap hoge.xs > hoge.c 3. hoge.cをコンパイルする前にppport.hというのを生成しておく % perl -MDevel::PPPort -e 'Devel::PPPort::WriteFil

    XSをモジュールなしでロードするには? - clouder's blog
    TAKESAKO
    TAKESAKO 2009/05/20
    DynaLoader ktkr!
  • 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

  • セキュアな 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のメモ置き場
  • perl - Text::Tx now released! : 404 Blog Not Found

    2009年02月22日00:15 カテゴリ perl - Text::Tx now released! 以前作って放置してあったText::Tx を、CPAN にも Release したのでお知らせします。 /lang/perl/Text-Tx/L/trunk - CodeRepos::Share - Trac Dan Kogai / Text-Tx/ - search.cpan.org http://www.dan.co.jp/~dankogai/cpan/Text-Tx-0.02.tar.gz 404 Blog Not Found:perl - Text::Tx も一応作った CPANにまだ上げない理由その一。txはlibraryとして素直に使うにはちょっと問題があるのです。 もう一つは、なぜか Mac OS X v10.4.11 の gcc 4.0できちんとcompileしないこと。

    perl - Text::Tx now released! : 404 Blog Not Found
  • 『モダンPerl入門』のXSの章がすばらしすぎて吹いた - Islands in the byte stream (legacy)

    『モダンPerl入門』を軽く立ち読みしてきた。 主にXSの章を中心に読んできたのだが,これがすばらしい。私がXSに触れ始めたころは英語をほとんど読めなかったので,XSの習得にはものすごく苦労したのだった。perlxstutのサンプルコードを試したり,Perlのソースコードを読んだり,xsubppが変換したCのソースコードを読んだりしながら試行錯誤してようやくXSを身につけたのだ。そうやって苦労した数ヶ月分の知識が,『モダンPerl入門』を10分立ち読みしただけで俯瞰できてしまった。 いい時代になった。

    『モダンPerl入門』のXSの章がすばらしすぎて吹いた - Islands in the byte stream (legacy)
  • 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

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

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

    Re: XSの勉強を始めるためのエントリーポイントは? - Islands in the byte stream (legacy)
  • XSを書く難しさ - Islands in the byte stream (legacy)

    最近思うが,つくづくXSは難しい。いとも簡単にSEGVを起こし,デバッグが難しく,それゆえモジュール作者のやる気が失われたときのリスクが非常に大きい。そうやって多大なリスクを犯してXSを書いても,肝心の速度がPurePerl以上に遅いことも少なくない。 最近だとClass::MOPにパッチを送ったのだけど,その後幾度かのバグフィクスや修正を経た0.72現在,パフォーマンスがかなり落ちている。 最初のパッチでのパフォーマンス(いずれもPerl 5.8.9 linux multi-thread with -DDEBUGGING): Initialization: Rate pp xs pp 2327/s -- -18% xs 2844/s 22% -- Looking into the stash: Rate pp xs pp 20958/s -- -72% xs 73770/s 252% -

    XSを書く難しさ - Islands in the byte stream (legacy)
  • Perl/XSが得意なこと - Islands in the byte stream (legacy)

    最近ひたすらXSを書いていて思ったのが,XSはやっぱり速いということ。 ただ,いつでも無条件に速いというわけでもなく,何も考えずに書くとPurePerlのコードより遅くなることも珍しくない。実際,最近書いたShikaやMOPのXS版もいきなり高速だったわけではなく,一番最初のコードはPurePerlのほうが10%-30%ほど高速だった。 いろいろベンチマークをとった結果の感触として,XSの得手・不得手が分かってきたのでメモしておく。ちなみに下記で「注意を払う」というのは内部で呼ばれるmalloc()を極力減らすという意味で使っている。SVの生成自体はmalloc()を伴わないことが多い*1が,文字列の生成/連結や配列の生成/push/unshiftでは内部でmalloc()が呼ばれる可能性が高く,速度を落とす原因となる。 得手分野 ループ - XSのループが早いというより,Perlのループ

    Perl/XSが得意なこと - Islands in the byte stream (legacy)
  • wakaponさんの超☆Perl備忘帳: Shibuya.pm#10のLT発表資料

    発表当日に欠席してしまいご迷惑をおかけしました。すみません。 はずかしいことに開催日を1日勘違いしていました…。 スライドを置いておきますのでよろしければご覧ください。

    TAKESAKO
    TAKESAKO 2008/11/30
    発表資料ktkr
  • Islands in the byte stream

    大チェッカーすばらしい。こういうのがほしかった。 Mobile Application Development なおフィードはだれでも追加できるようにしてあります。 http://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/ 2014年10月の話ですが、これのせいで手元のライブラリのアップロードが失敗するようになってました。これからは、依存ライブラリのバージョンは "3.+" ではなく"[3,4)" (3以上4未満)などのような数学的範囲表記(mathematical range syntax)をしなければならない、ということです。詳しくは上記エントリを参照のこと。 変更例: https://github.com/gfx/android-power-assert-plugin/c

    Islands in the byte stream
  • PerlでAssert - Islands in the byte stream (legacy)

    Perl5.9の時点では,assersionsと-Aコマンドラインスイッチという仕組みでCのassert(3)のようなことができるようになるはずだったらしい。しかし,そのメカニズムはPerl5.10には結局採用されなかった。 開発中はassert()が欲しい,しかし,リリース後の実行時パフォーマンスは落としたくない,というのがAssertを考えるときのジレンマというわけだ。そんななかで,CPANのCapr::Assertは関数呼び出しを完全に消し去ることができるので悪くない方法だと思う。 use Carp::Assert; assert($x > 1) if DEBUG; DEBUGはCarp::Assertの提供する定数関数で,その値が偽ならばこの一文はコンパイル時に完全に削除される。 $ PERL_NDEBUG=0 perl -MO=Deparse -MCarp::Assert \ >

    PerlでAssert - Islands in the byte stream (legacy)
  • Hook::BitMask - *Acme::Person::Bonnu

    ふと個人的に欲しくなったので CodeRepos に上げました。 気でこういう処理をしようと思ったら xs で書くのがいいと思った。 lang/perl/Hook-BitMask http://coderepos.org/share/browser/lang/perl/Hook-BitMask/trunk 使い方はこんな感じです: use Hook::BitMask ( FLAG1 => sub { $_[0] .= 'hello ' }, # 0b0001 FLAG2 => sub { $_[0] .= 'world ' }, # 0b0010 FLAG3 => sub { $_[0] .= '!' }, # 0b0100 ); { # 0b0111 my $flag = FLAG1 + FLAG2 + FLAG3; # HOOK を実行するAPI、bitstrap bitstrap(

    Hook::BitMask - *Acme::Person::Bonnu
  • wakaponさんの超☆Perl備忘帳: sv_isaとsv_derived_fromの違い UNIVERSAL::isa

    POOでのパッケージ間の継承関係を調べるPerlAPIはなし。まずはPerlプログラムレベルでの継承関係を調べるメソッドから進めて、その内部で使われているPerlAPIを見ていく。ほげり対象はperl5.10.0となる。 Perl5プログラムでパッケージ(クラス)の継承関係を調べるときは、基底クラスにあるUNIVERSALのisaメソッドを使えばよい。UNIVERSALはすべてのクラスのベースにあるので、特にuseしなくても、各クラス内のメソッドとして使える。以下、isaメソッドの使用例。 use 5.10.0; # use feature.pm (:all) package MY_BASE; sub new { bless {}; } package MY_BASE2; sub new { bless {}; } package HOGE; push @ISA, qw(MY_BASE M

    TAKESAKO
    TAKESAKO 2008/10/07
    【いかにもsv_derived_fromは探索処理が重そうなので、処理結果はキャッシュされている。】
  • V8 (Google JavaScript Engine) を embed した感想とかあれこれ - daily dayflower

    なぜ CodeRepos に登録しないのか べつだん深意や確執があるわけじゃなくて,華々しく 500 人めのコミッタになろうと思ったら,現在 461 人だったからです。ということで 38 人の方々,コミッタ登録してください ;P 冗談はともかくおまえの書いた汚いコードを早く添削したいんじゃという方がいらっしゃったら,代理でいれといて構いません。 Acme::JavaScript::V8(Perl XS)を書くときに苦労したこと New ていうのが XS での define 値だったので困りました。V8 側だと,new / delete するんじゃなくて Class::New() する流儀なので。 ですから,#undef New してあります。他のマクロで使われていたらマズいなぁと思いますが,動いたからよしとします。 エンベッダーズガイド V8 JavaScript engine を読む s

    V8 (Google JavaScript Engine) を embed した感想とかあれこれ - daily dayflower
    TAKESAKO
    TAKESAKO 2008/09/09
    >【New ていうのが XS での define 値だったので困りました。V8 側だと,new / delete するんじゃなくて Class::New() する流儀なので。ですから,#undef New してあります。】
  • 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
  • wakaponさんの超☆Perl備忘帳: PL_modglobal お試し

    PL_modglobalを使ってみた。perlのバージョンは5.10.0。 1. PL_modglobalとは PL_modglobalとはインタプリ内グローバルなハッシュである。apidocの説明によると、XS(extensionsとあるのでおそらくXS)でインタプリタ毎に必要な情報をキープするために使うためのものらしい。一意なキーとその値にデータ構造へのポインタを渡すことにより、モジュール固有のデータを管理することが可能になっている。PL_modglobalを使うことでスレッドセーフになるかどうかは特に言及されていないが、インスタンスごとにもたれる変数ならばセーフな気がする。intrpvar.h中で、PL_modglobalは以下のように定義されている。 PERLVAR(Imodglobal, HV *)  /* per-interp module data */ my_perl->I

  • wakaponさんの超☆Perl備忘帳: Perl setjmp longjmp

    threads.xsを見ていて、JMPENVまわりのマクロが気になったのでほげってみる。どうやらJMPENVマクロはevalやPerl_croakに関係するようだが、今回はそのあたりには触れずに、純粋にJMPENVマクロの中身と使われ方を見てみる。 1. setjmpとlongjmp Perlにおけるsetjmpとlongjmpを見る前に、まずはsetjmpとlongjmpの使い方を思い出すためにちょっとだけ手を動かす。環境はVC9。 sj.c #include <stdio.h> #include <setjmp.h> jmp_buf env; void aa (void) {    int i = 0;    while (1)    {       if (i == 100)       { longjmp (env, i); }       i++;    } } int main