タグ

xsに関するissmのブックマーク (10)

  • C による Perl 拡張入門(

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

    C による Perl 拡張入門(
    issm
    issm 2013/09/25
  • Data::Dumper が壊れているという惨事 - Islands in the byte stream (legacy)

    あるいは PERL_CPANM_OPT=-n は危険だという話。 それはこのtweetから始まった。 結局これは Data::Dumper 2.143 が壊れていたからなのだが、そこに至るまでがちょっと大変だったので記録しておく。 まず、再現スクリプトは以下のものだった。 # executed in perl 5.10.1 use strict; use warnings; use Data::Dumper; use Text::Xslate; my $tx = Text::Xslate->new({ syntax => 'TTerse' }); my $template = <<TMPL; [% value | dump %] TMPL my $value = +{ 'ab' => 'c', }; print Dumper($value); my $ret = $tx->render_s

    Data::Dumper が壊れているという惨事 - Islands in the byte stream (legacy)
  • 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モジュール作成と、挫折
  • Floating point number decoding in JSON::XS - tokuhirom's blog

    http://d.hatena.ne.jp/hiratara/20121024/1351054828 https://rt.cpan.org/Public/Bug/Display.html?id=80350 In some environment, JSON::XS's floating point number decoder has an issue. Here is code: use v5.16.0; use JSON::XS; my $dat = decode_json( "[0.6]" )->[0]; say int ( 24 / $dat ); say int ( 24 / 0.6 ); Outputs: 39 40Why?? The result of Devel::Peek::Dump($dat) is following: SV = NV(0x26fc7d8) at 0

  • JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai

    JSON::XSを使うと、小数は浮動小数点数にパースしてくれる。 use JSON::XS qw(decode_json); my ($double) = @{decode_json("[0.6]")}; この値、printすると "0.6" なのだけど、0.6とイコールではない。 print $double, "\n"; # 0.6 print +($double - 0.6), "\n"; # 1.11022302462516e-16 なので、直感と違う振る舞いをしたりする。 # 3 / 0.6 == 5 printf "%s / %s == %s\n", 3, 0.6, int(3 / 0.6); # 3 / 0.6 == 4 <- unexpected :( printf "%s / %s == %s\n", 3, $double, int(3 / $double); 仕方ないので

    JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai
  • List::UtilsBy::XSを書いてます。 - Shohei Yoshida's Diary

    XSの勉強ということで, List::Utilや List::MoreUtilsに 似ている List::UtilsByの XS版を書いています。 リポジトリ syohex/p5-List-Utils-By · GitHub ベンチマーク まだすべてが実装できているわけではないんですが、 sort_by, nsort_by, max_byについて見てみました。 ベンチマーク用のコード #!perl use strict; use warnings; use List::UtilsBy; use List::UtilsBy::XS; use String::Random; use Benchmark qw(cmpthese); my $generator = String::Random->new; my @array; for my $i (1..1000) { push @array,

    List::UtilsBy::XSを書いてます。 - Shohei Yoshida's Diary
    issm
    issm 2011/10/06
  • List::UtilsBy::XSが書けました。 - Shohei Yoshida's Diary

    List::UtilsBy::XSを書いてます。 - Life is very short の作業がとりあえずひと通り終わりました。 List::UtilsByのテストユーティリティがなぜか無限ループして しまうことや、Lightweight Callback APIの制限があったり しますが、List::UtilsByから持ってきたテストは概ね通っています。 リポジトリ syohex/p5-List-Utils-By · GitHub ベンチマーク Perl 5.14.1の結果は以下のようになりました。 Benchmarking List::Util and List::UtilsBy::XS Bench: sort_by Rate pp xs pp 7729/s -- -37% xs 12217/s 58% -- Bench: nsort_by Rate pp xs pp 9050/s

    List::UtilsBy::XSが書けました。 - Shohei Yoshida's Diary
    issm
    issm 2011/10/06
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

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

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)

    Perlではメモリリーク検出ツールがいくつか開発されているので、top(1)の結果を眺めるよりそういうツールを使うほうが楽である。 さて、メモリリークが発生しているとき、その可能性としてはだいたい以下の4つが挙げられる。 Perlレベルでの循環参照 グローバル変数に値をどんどん足しているとき*1 XSレベルでリファレンスカウントの管理ミス XSレベルでmalloc()したメモリの管理ミス この1-3についてはすべてPerlインタプリタ内の出来事であり、Test::LeakTraceを使って検出できる。4を検出するのは難しいが、Test::Valgrindが役に立つ。 Test::LeakTraceのSYNOPSISは歴史的経緯によりごちゃごちゃしているが、テストで使うべき関数はno_leaks_ok()とleaks_cmp_ok()だけである。 たとえば、以下のようにして使う*2。 #!p

    Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)
  • C++ で Perl 拡張を書くためのモジュールを書いた - TokuLog 改めB日記

    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

  • 1