タグ

xsに関するblueleのブックマーク (9)

  • C による Perl 拡張入門(

    現状、稿ははげしくかきかけです。フィードバックをおまちしております。 はじめに† Perl で C の拡張がスラスラと書けたら……。C の拡張がスラスラ書けたら、ネイティブのバインディングもスラスラ書けるし、ホットスポットを C で最適化するなんてこともお手の物。書けたらいいけど、XS ってなんかむずかしそう……。 ちがうんです! 今までの XS の教え方がまちがっていたんです!この教材をつかえば、誰でも簡単に今すぐに XS を書けるようになるんです。Perl の C 拡張を書いて同僚や上司を アッー! と言わせちゃおう! この教材では XS のややこしい機能をつかわずに、Perl の C 拡張を書く方法を伝授!初心者でもすぐに C 拡張が書けるようになるぞ! 前提知識† 稿では一般的な C の知識および Perl の知識を読者がもっていることを想定しています。XS の知識や Perl

    C による Perl 拡張入門(
    bluele
    bluele 2014/06/26
  • 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モジュール作成と、挫折
    bluele
    bluele 2013/03/05
  • perlXSでSTLのstd::mapを使ってみる - download_takeshi’s diary

    ここのところC++でコードを書いているんですが、やっぱりそいつをperlから使いたい。 ということでXSについてお勉強中です。 ごく簡単なものなら書けるようになってきましたが「perlから渡したハッシュをC++側でstd::mapとして受け取りたい」といった特殊なケースではまってしまったのでメモっておきます。 いろいろ悩みはしましたが、結論から言うと「hollyなblog」さんのところでまさにドンピシャな記事を書いてくれていたので、これを参考に頑張ってみました。 以下、サンプルコードと実践手順です。 C++コード hashを渡してstd::mapを返すというケースを想定しているので、以下のようなクラスを準備しました。コサイン類似度を計算するコードです。 vector_tool.hとして以下を用意します。 #include <iostream> #include <map> #include

    perlXSでSTLのstd::mapを使ってみる - download_takeshi’s diary
  • perlXStut - XSUB を書くためのチュートリアル - perldoc.jp

    This tutorial will educate the reader on the steps involved in creating a Perl extension. The reader is assumed to have access to perlguts, perlapi and perlxs. このチュートリアルは読者にPerlのエクステンションを作るのに必要な ステップを教えるものです。 読者が perlguts, perlapi, perlxs にアクセスできるということを 仮定しています。 This tutorial starts with very simple examples and becomes more complex, with each new example adding new features. Certain concepts may

    bluele
    bluele 2011/08/06
  • おさかなラボ - [XS]XSのおさらいとtypemapについて

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

    bluele
    bluele 2011/08/06
  • perlxstut - Tutorial for writing XSUBs - Perldoc Browser

    CONTENTS NAME DESCRIPTION SPECIAL NOTES make Version caveat Dynamic Loading versus Static Loading Threads and PERL_NO_GET_CONTEXT TUTORIAL EXAMPLE 1 EXAMPLE 2 What has gone on? Writing good test scripts EXAMPLE 3 What's new here? Input and Output Parameters The XSUBPP Program The TYPEMAP file Warning about Output Arguments EXAMPLE 4 What has happened here? Anatomy of .xs file Getting the fat out o

    bluele
    bluele 2011/08/05
  • 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)
  • http://argrath.ub32.org/perldocjp/5.10.0/perlguts.html

    bluele
    bluele 2011/08/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

  • 1