タグ

xsに関するtyruのブックマーク (15)

  • Perl XSにおけるデータ操作のためのAPI - サンプルコードPerl入門

    Perl › XS › here perlapiとはXSでPerlのデータを操作するための公式APIで、C言語で書かれたマクロや関数のことです。 出力、スカラ、標準入出力 PerlとXS(C言語)のAPIの対応がわかるとXSがわかりやすそうだ。 標準出力への出力 #Perl print "Hello"; # XS PerlIO_printf(PerlIO_stdout(), "Hello"); PerlIO_printfはC標準ライブラリのprintfにあたる関数。第一引数はPerlIO*型の変数、第二引数はchar*型の変数。標準出力はPerlIO_stdout関数で取得できる。XSでは標準入出力Cの標準ライブラリは使わずに、Perlで用意されている関数を使う。これはperlapioというドキュメントに詳しく乗せられている。 文字列 #Perl my $str = "Hello"; #

    Perl XSにおけるデータ操作のためのAPI - サンプルコードPerl入門
  • XSでメモリークを避けるたった一つの方法 - Islands in the byte stream (legacy)

    XSでメモリリークを避ける基原則は、それほど難しくない。すなわち、作ったSV(およびSVファミリ)はすぐsv_2mortal()するのである。mortalなSVはスコープ*1から抜けるときに解放されるため、メモリリークは起こらない。つまり、あるスコープ内で新しく作ったすべてのSVをmortalな状態にしておくということだ。 この原則のもとでコードを書くと、誤ってリファレンスカウントを増やさなかったケースでは警告が頻繁に起きる。しかし、少なくともメモリリークは起こらない*2。メモリリークの検出は難しいので、警告が出るのは福音であろう。 もちろんこれは原則で、メモリリークにまつわることで覚えなければならないことは決して少なくない。 たとえば、XSUBの戻り値をSV*にするとき、sv_2mortal(RETVAL)してはいけない。これはPerlの仕様ではなくxsubppが勝手にsv_2mort

    XSでメモリークを避けるたった一つの方法 - Islands in the byte stream (legacy)
    tyru
    tyru 2010/06/18
  • DO NOT write XS

    DO NOT write XS Tatsuhiko Miyagawa Tsukuba.XS #1

    DO NOT write XS
  • LL脳な人でもこれぐらいは覚えておくとうれしいgdbのつかいかた。または猫でもわかるgdb講座 - tokuhirom's blog

    LLつかってても「ばすえらーになるー」っていう状況ってたまにあるわけですが、LL しか普段つかわないゆとりは、ここでお手あげになってしまったりすることがままあります。 で、「ばすえらーになるんですが」ってときの最低限これだけはやってみたらどうか、という話。「えー、わたし gdb とかわかんないしー」とかいってる人でもこれぐらいならできるんじゃないかなーっと。 perl t/00_load.tというコマンドで segv するという場合、gdb をつかって % gdb --args perl t/00_load.tとうつ。 すると、以下のようにプロンプトがでるので、"run" とうつ。これでスクリプトがはしりはじめる。 % gdb --args perl t/00_load.t GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software

    tyru
    tyru 2010/02/19
  • XS基礎文法最速マスター - Islands in the byte stream (legacy)

    元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありません。 XSとは,狭義ではPerlでエクステンションを書くためのマクロ言語の名前ですが,広義ではエクステンションを書くための技術の総称です。ここでは,広義のXSを俯瞰します。 XSはいろいろと特殊なのでテンプレは無視で行きます。 目次: h2xsで空のディストリビューションを作る XSファイルの構成 スレッドコンテキスト SVファミリ GCとスコープ さらなる学習のために h2xsで空のディストリビューションを作る 以下のコマンドで空のXSディストリビューションを作ることができます。 h2xs -A -b 5.8.1 -n

    XS基礎文法最速マスター - Islands in the byte stream (legacy)
    tyru
    tyru 2010/02/03
  • wakaponさんのよく☆ある☆ふつーの備忘帳: おすすめの1本

    acmポータルでPerlネタの論文を探していたら,Perl5 Internalsに触れている論文を発見しましたので紹介いたします.Perlの内部構造について知りたい方は目を通しておくとよいかもしれません.処理系の内部仕様と実装(5.8.8)の話が文章としてまとまっており,分かりやすい内容となっております.Extracting Facts from Perl Code (acmポータル内のリンク)Daniel L. Moise, Kenny WongReverse Engineering, 2006. WCRE '06. 13th Working Conference上のリンクからですとお金払ってみてくださいーとか出てくるので,「Extracting Facts from Perl Code」でぐぐると著者の方が原稿をpdfで公開なさっています.PerlGuts IllustratedやPe

    tyru
    tyru 2009/11/09
  • eval "use $module" in Perl_call_sv() could segmentation faults - Islands in the byte stream (legacy)

    Data::Utilのmethod modifiersが落ちる件は,Perlコアのバグであるようだ*1。perlPerl_call_sv()でサブルーチンを呼び出すときに,そのサブルーチンがディレクティブを含んだeval()を実行し,そのuseディレクティブが例外を放出すると*2,setjmp(3)がSEGVを起こしたり黙って落ちたりするようだ。 この問題はPerl_call_sv()を使っているXSコードで起きやすいが,以下のコードで示すようにPure Perlでも発現する可能性がある。 再現コード: #!perl -w use strict; use Test::More tests => 3; { package T; use Tie::Hash(); use base qw(Tie::StdHash); sub FETCH{ my($self, $key) = @_; # XXX

    eval "use $module" in Perl_call_sv() could segmentation faults - Islands in the byte stream (legacy)
  • YAPC::Asia 2009で発表してきました - Islands in the byte stream (legacy)

    YAPC::Asia 2009で発表してきました。 XS書きのためのPerl MAGIC 入門 Moose Hacking Guide (Lightning Talks) Introduction to Perl MAGICView more presentations from guest6b8f09. Moose Hacking GuideView more presentations from guest6b8f09. ひとつはXSを書く際のMAGICメカニズムにまつわる注意点についての解説で,これはあとでもう一度まとめます。もうひとつはMooseのソースコードの読み方です。なにかジョークを仕込めればよかったんですが,余裕がありませんでした。スライドはあとでWebからも見れるようにするつもりです。 slideshareで見られるようにしました。 今回のYAPCに参加するにあたり,id

    YAPC::Asia 2009で発表してきました - Islands in the byte stream (legacy)
  • 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

    tyru
    tyru 2009/07/31
  • About optimazation: inclusive time and exclusive time - Islands in the byte stream (legacy)

    NYTProfを使うと,inclusive time*1とexclusive time*2を調べることができる。 XS化というのはこのexclusive timeを減らすためのものだと言える。実際私は,今までは高速化というとexclusive timeしか見ていなかった。ところが,実際にはexclusive timeが10%を超えることはまれで,ホットスポットを集中的にXS化してそのサブルーチン自体が数倍高速になったとしても,プログラム全体からすると普通は数%の高速化にしかならない。 つまり,プログラム全体を10%,20%と高速にするには,inclusive timeを見る必要があるのだ。この場合,特定のサブルーチン呼び出しが30%や40%もの時間を消費していることがある。そういうホットスポットこそ最適化に値する。 これを痛感したのが,最近行ったClass::MOPのget_method_

    About optimazation: inclusive time and exclusive time - Islands in the byte stream (legacy)
  • PL_check hack - daily dayflower

    (あとでかく) XS くらいいじれないと Shibuya.pm に加入できないらしいので,とりあえず書きましたー。今回は実践編なので,あまりわかりやすい内容&たいした内容ではないです。わっふるさせてごめんなさい。 ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 というのは冗談で,eval の実行主体となる OPCODEが,システム内で「完結」してます(んーうまく表現できない)。なのでサンプルとしていじりやすく,この題材をとりあげました。 評価型 eval はどのような OPCODE に変換されるのか まずは単純なコードを書いて,OPCODE がどのようになるのかたしかめてみます。 use st

    PL_check hack - daily dayflower
    tyru
    tyru 2009/04/15
    unimport() という関数は,no モジュール とした場合に呼び出される関数です
  • Perl 5 internals の世界にようこそ - daisuke maki

    Shibuya Perl Mongersテクニカルトーク#9マイリスト: mylist/7281253発表資料など: http://mt.endeworks.jp/d-6/2008/06/shibuyapm-9.html

    Perl 5 internals の世界にようこそ - daisuke maki
  • http://www.johnkeiser.com/perl-xs-c%20%20.html

  • 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)
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

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

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • 1