タグ

xsに関するdannのブックマーク (78)

  • Digest::BLAKE2作成で学ぶモダンPerl XSモジュール作成と、挫折

    Perlを3行書くと死ぬ奇病にかかってはや数年、毎日青息吐息で出社している僕です。一番好きな言語はC言語です。裏切らないから。 というわけで、裏切らないC言語でPerlのモジュールがかければ死ぬ可能性が低まるのではないか、という仮説のもとに、XS module作成を習作してみよう。 BLAKE2というとよさげなハッシュアルゴリズムがあるので、それをPerl module化してみた。 https://github.com/gunyarakun/p5-Digest-BLAKE2 http://search.cpan.org/~gunya/Digest-BLAKE2/ ベンチマーク まずはベンチマークから。 BLAKE2には4つのアルゴリズムがあるが、マルチプロセス版はセグフォしたので、BLAKE2bとBLAKE2sのみ。 BLAKE2bは64bit CPUで高速に動き512bit出力。BLAK

    Digest::BLAKE2作成で学ぶモダンPerl XSモジュール作成と、挫折
    dann
    dann 2013/02/10
  • XSにまつわる話

    Hokkaido.pm #8

    XSにまつわる話
    dann
    dann 2012/12/24
  • YAPC::Asia 2011 - unknownplace.org

    なんだか今年は身内の訃報がかさなったりして、フル参戦できなかったのですが、少しでも行くとモチベーションが上がるのが YAPC ですね。 Hacking Mac OS X Cocoa API from Perl っていうニッチな発表をしました。補足エントリーは別でかきます。 あと、発表中に似非XSっていう言葉を使ってたんだけど、以外とこの方法で XS 入門するってのはあるなーっておもっているのでいつか(Advent Calendarとか?)まとめたいところ。 感想 見たかったトークの大部分を見ることができず、懇親会にも出られず、だいぶ不完全燃焼ではあるのですが、見ることができた gdb のトークや、組み込みPerlの話、あとたまたま通りがかったmotemenのトークがとてもおもしろかったです! motemen さんのは普通にメインであってもだいぶおもしろかったとおもうけど、たぶんこれはトーク

  • Every XS authors should use Test::Valgrind - tokuhirom's blog

    Test::Valgrind is a perl wrapper for valgrind(1). T::V helps to find invalid memory operation. You can use it by command line like following: prove --exec 'perl -Iblib/lib -Iblib/arch -MTest::Valgrind' t/*.tOr use it as test script. You can put it on xt/. use Test::More; use Test::Requires 'Test::Valgrind'; leaky();Latest stable version of valgrind is not supported OSX 10.6, yet. But, you can inst

  • XSでCの文字列操作関数を使用するべきでない理由 - Islands in the byte stream (legacy)

    またはRe: PerlとC言語の型に対応する値への相互変換 XSでCの文字列操作関数の使用はなるべく避けるべきです。Cの文字列操作関数は危険で使いにくいものです。その代わりに、Perlが提供する安全で使いやすいSV APIを使ったほうが余計なことを考えずに済みます。 まずC言語でプログラミングする際の一般論として、strcat()やsprintf()などの文字列長を制御できない関数を使用するべきではない、というものがあります。これらの関数を使用して安全なプログラミングをするのは非常に困難であり、代わりにstrncat()やstrlcat()、あるいはsnprintf()といった文字列長を制御できる関数を使うべきです。 またPerl/XSに関して言うならば、そもそもCの文字列操作関数を使う必要はほとんどありません*1。char*の代わりにSV*を使うようにし、なるべくPerl API で文字

    XSでCの文字列操作関数を使用するべきでない理由 - Islands in the byte stream (legacy)
    dann
    dann 2010/09/10
  • 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)
    dann
    dann 2010/05/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)
    dann
    dann 2010/02/02
  • perlapiのctags用ファイルを作るスクリプト - walf443's blog

    あけましておめでとうございます。今年もよろしくおねがいします。 正月ということでふだんなかなかできないことをやろうかなということでXS勉強中です。 XSにはあまり詳しくないのでCPANにある実例を色々読んだりしてるとperldoc引きまくりな刑になるわけですが、perlapiperldocはとても長いのでperldocで読むのはあまり効率がよくないなぁと思ったのでvimからctagsでjumpするようにしてみました。キーワードの下でC-wC-]とかでjumpできるので個人的にはだいぶ効率あがる気がします。 他によい方法があるのかもしれないですが、 use strict; use warnings; use Path::Class; my $perlapi = `perldoc -ml perlapi`; chomp $perlapi; my $io = file($perlapi)->o

    perlapiのctags用ファイルを作るスクリプト - walf443's blog
    dann
    dann 2010/01/05
  • Module::Install::XSUtilでXSモジュール用のMakefile.PLを書く - JPerl Advent Calendar 2009

    前置き こんにちは,gfxです。好きなソースはタルタルソースとsv.cです。JPerl Advent Calendar 2009 Hacker Trackも8日目ですね。そろそろTipsを読むだけでは飽き足らず,モジュールを書きたくなってきたんじゃないでしょうか。そんなわけで,今日はModule::Install::XSUtilを紹介します。 題 皆さんの中にはよくXSを書く方もいらっしゃると思いますが,XSモジュールを含むディストリビューションはビルド環境の設定が結構大変ですよね。build_requiresにExtUtils::ParseXSやXSLoaderを指定したり,make_maker_argsにOBJECT => '$(O_FILES)'を指定したりする必要がありますし,Cコンパイラは使えるか,Cコンパイラの警告を有効にしたい,ppport.hは十分に新しいか,などなど考え

    dann
    dann 2009/12/08
  • おさかなラボ - [XS]XSのおさらいとtypemapについて

    前回のXSをとにかく作ってみる編の続編である。どこかに目次のエントリを作るか、Wikiにした方がいいような気がしてきた。今後、自身の学習・復習もかねてXSについて解説していく。対象は取り急ぎperl-5.8.8以上とする。なお、今回は話が思いっきりあさっての方向にそれたので、先にお詫びしておく。 XSとは何か。XSはPerlが用意したAPIに、C/C++でアクセスするためのマクロ言語である。そしてマクロ言語の記述フォーマットの名前である。「PerlAPIを叩くCプログラム」を総じてXSと呼ぶ向きもあるが厳密にはこれは正しくないことは前に述べた。 XSファイルは主に3つのパートに分けられる。Perlから関数として呼び出された時の引数を受け取る処理、そして核となるルーチン、そして演算結果をPerlに返す部分である。しかし引数と戻り値に関しては最初はあまり神経質になる必要はない。これらは大抵

    dann
    dann 2009/10/06
  • おさかなラボ - PerlでXSを使ってみよう

    と思う人は多いと思う。気になっている人は多いだろう。しかし、XSに関する詳細なドキュメントは、ググってみると驚愕するくらい少ない。そして読みにくい。理由は後述する。 私もXSに関するドキュメントを書きたいのだが、カバーする範囲が広大すぎてどこから手を付けたらいいのか全く分からない。が書けそうな勢いだ。エントリを分けて書くのか、既存とは別のチュートリアル文書のようなものを書くのか、悩んでいるところである。その代わり、今回はXSってえる?って人には有用なエントリにしたいと思う。そして簡単なサンプルを書いてみたいと思う。 少々のことなら分かるしググるし大丈夫だぜ!という人は、以下のエントリ、およびリンク先を参照すると良いと思う。 XS by id:naoya まずはXSって何?ってことだが、この時点で何がなんだかさっぱり分からない人が多いと思う。それもそのはず、XSという言葉が包括的

    dann
    dann 2009/10/03
  • bin/xs-coverage at master · potyl/bin

    dann
    dann 2009/09/27
  • 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

  • My document for YAPC::Asia 2009 - Islands in the byte stream (legacy)

    まもなくYAPC::Asia 2009が開催しますね。私の発表の資料は以下の場所に置き,順次更新する予定です。 git://github.com/gfx/YAPC-Asia-2009-gfx.git よろしくお願いします。 (12日 追記) 順次更新とはいきませんでしたが,発表に使ったスライドを二つ(PerlMaigicIntroとMooseHackingGuide),MS Power Point形式でアップロードしました。

    My document for YAPC::Asia 2009 - 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日(金)に決定しました - はてなの告知
    dann
    dann 2009/08/29
  • Module-Install-XSUtil-0.45 - Utility functions for XS modules - metacpan.org

    The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

    dann
    dann 2009/08/09
  • PL_runops

    I'm going to try to do a series of posts about learning Perl internals. I am still a beginner, I have trouble remembering the many macros, or keeping everything in my head all at once, so hopefully I will be able to make some sense of this stuff in a way that is accessible to other beginners. While I'm definitely diving right in to the deep end, I think PL_runops is a good place to start as any, t

  • SV *

    In my last internals post I mentioned that most of the data in Perl revolves around the SV struct. The excellent PerlGuts Illustrated describes these structures in great detail, and of course there's the two main documents in Perl's own reference, perlguts which tells you about them and perlapi which tells you what you can do with them. This post is sort of like PerlGuts for dummies, intended to l

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

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

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    dann
    dann 2009/07/28
  • Module::Install::XSUtil - Manages XS modules - Islands in the byte stream (legacy)

    Makefile.PLを書くためのビルドユーティリティの一つであるModule::Installは非常に便利だが,XSモジュールのサポートが弱い。 そこで,Module::InstallのプラグインとしてModule::Install::XSUtilを書いてみた。 http://search.cpan.org/dist/Module-Install-XSUtil/ (CPAN) git://github.com/gfx/Perl-Module-Install-XSUtil.git (github) XSモジュールを利用は,Perlから利用する場合とXSから利用する場合の二つの状況がある。ほとんどのXSモジュールはPerlから利用するが,まれにXSからの利用するモジュール(メタXSモジュール)もある。XSUtilはこの二つを両方サポートする。 通常のXSモジュールの場合 XSモジュールでは一

    Module::Install::XSUtil - Manages XS modules - Islands in the byte stream (legacy)
    dann
    dann 2009/07/27