んー、と思って、書いた。kazuho’s p5-http-parser-xs at master - GitHubBLURB は、PSGI のリクエストオブジェクトを返す 高速 同期 httpd, 非同期 httpd のどちらを実装する際にも使用可能 POST コンテンツのハンドリングはご自分で いったんファイルに入れ... 続きを読む
■ PERL_MAGIC_extの使い方 PERL_MAGIC_extの使い方を覚えたので、詳しく紹介する。PERL_MAGIC_extはXS開発者向けに用意されているMAGICの一つで、XS(C言語)側でPerlの変数に情報を格納することが出来る。PERL_MAGIC_extはPerlコードからは全く見えず、ユーザ... 続きを読む
よくわかってないんだけど、とりあえず動いたので忘れないようにメモ。(ただしこれはOSX上でのことなので他のOSだとところどこパスなどで違う部分があると思う)1. hoge.xsを作る今回は単純にパッケージ名をPACKAGENAMEで、メソッド名methodnameというのが1つあ... 続きを読む
XS レベルで undef がわたされたかどうかを確認するには SvOK() をつかえばいいです。 SvOK Returns a U32 value indicating whether the value is an SV. It also tells whether the value is defined or not. U32 SvOK(SV* sv) これをつかって、 #define MYAS... 続きを読む
perl のプロセス内でサンドボックスを作ろうと思うと、少なくとも以下の2点が必要です。 オプコードの制限 DynaLoader::dl_install_xsub を利用したネイティブコード注入このうち、オプコードの制限については、ops モジュールで行うことが可能です。一方、Dyn... 続きを読む
小飼弾(こがい だん、1969年8月17日 - )は日本のオープンソース開発者。ディーエイエヌ有限会社代表取締役。歌代和正開発のjcode.plの発想を基にJcode.pmを開発したことで知られ、その後、プロジェクトEncode Module(Encode.pm)のメンテナンスとPerlバージ... 続きを読む
Perl, Book『モダンPerl入門』を軽く立ち読みしてきた。主にXSの章を中心に読んできたのだが,これがすばらしい。私がXSに触れ始めたころは英語がほとんど読めなかったので,XSの習得にはものすごく苦労したのだった。perlxstutのサンプルコードを試したり,Per... 続きを読む
XS code template - 動的にXSUBを生成する XSコードはふつうPerlコードよりも多機能で高速ですが,書くのが難しいため敷居が高いことも事実です。また,いちいちコンパイルしなければならないのも煩わしい点です。 ところで,Perlにはクロージャという仕組みが... 続きを読む
PerlRe: XSの勉強を始めるためのエントリーポイントは?あまり参考にならないかもしれませんが,私がXSを勉強するにあたっては,CPANのモジュールのソースコードを読むより実際に書いてみるのが一番だと思います。ただし,何か特定の目的があって,そのために関... 続きを読む
Perl最近思うが,つくづくXSは難しい。いとも簡単にSEGVを起こし,デバッグが難しく,それゆえモジュール作者のやる気が失われたときのリスクが非常に大きい。そうやって多大なリスクを犯してXSを書いても,肝心の速度がPurePerl以上に遅いことも少なくない。最... 続きを読む
Perl最近ひたすらXSを書いていて思ったのが,XSはやっぱり速いということ。ただ,いつでも無条件に速いというわけでもなく,何も考えずに書くとPurePerlのコードより遅くなることも珍しくない。実際,最近書いたShikaやMOPのXS版もいきなり高速だったわけではな... 続きを読む
発表当日に欠席してしまいご迷惑をおかけしました。すみません。 はずかしいことに開催日を1日勘違いしていました…。 スライドを置いておきますのでよろしければご覧ください。 続きを読む
Dartのクラス機構はどんなものか調べた記録。DartはCoffeeScriptよりも遥かに複雑だが、継承メカニズムはほぼ同一だった。DartからJSにコンパイルされた結果は長いので肝心なところだけ。 function $inherits(child, parent) { if (child.prototype.__proto__) ... 続きを読む
Perl, IdeaPerl5.9の時点では,assersionsと-Aコマンドラインスイッチという仕組みでCのassert(3)のようなことができるようになるはずだったらしい。しかし,そのメカニズムはPerl5.10には結局採用されなかった。開発中はassert()が欲しい,しかし,リリース後... 続きを読む
ふと個人的に欲しくなったので CodeRepos に上げました。本気でこういう処理をしようと思ったら xs で書くのがいいと思った。lang/perl/Hook-BitMaskhttp://coderepos.org/share/browser/lang/perl/Hook-BitMask/trunk 使い方はこんな感じです: use Hook::BitM... 続きを読む
POOでのパッケージ間の継承関係を調べるPerlAPIはなし。まずはPerlプログラムレベルでの継承関係を調べるメソッドから進めて、その内部で使われているPerlAPIを見ていく。ほげり対象はperl5.10.0となる。 Perl5プログラムでパッケージ(クラス)の継承関係を調べ... 続きを読む
c, js, memo なぜ CodeRepos に登録しないのかべつだん深意や確執があるわけじゃなくて,華々しく 500 人めのコミッタになろうと思ったら,現在 461 人だったからです。ということで 38 人の方々,コミッタ登録してください ;P冗談はともかくおまえの書いた汚い... 続きを読む
perl, jsやはりやっつけで。Joke module です。いろいろ書きたいことがあるけど,そのうち(追記するかも)。libv8 と XS の間をとりもつ bridge.cc。 /* bridge.cc */ #include #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" ... 続きを読む
PL_modglobalを使ってみた。perlのバージョンは5.10.0。 1. PL_modglobalとは PL_modglobalとはインタプリ内グローバルなハッシュである。apidocの説明によると、XS(extensionsとあるのでおそらくXS)でインタプリタ毎に必要な情報をキープするために使うための... 続きを読む
threads.xsを見ていて、JMPENVまわりのマクロが気になったのでほげってみる。どうやらJMPENVマクロはevalやPerl_croakに関係するようだが、今回はそのあたりには触れずに、純粋にJMPENVマクロの中身と使われ方を見てみる。 1. setjmpとlongjmp Perlにおけるsetj... 続きを読む