タグ

ブックマーク / gfx.hatenadiary.org (9)

  • 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)
  • each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)

    特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに対し、each()は代入しないとその値を使えないからです。 ベンチマーク: #!perl use strict; use warnings; use Benchmark qw(cmpthese); my %hash = map { $_ => $_ } ( 1 .. 10000 ); cmpthese -1, { each_k => sub { while(my $key = each %hash) { } }, each_kv => sub { while(my($key, $value) = eac

    each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
  • DeNAに入社しました - Islands in the byte stream (legacy)

    既に2週間ほど経過していますが、4/1付けでDeNAに入社しました。なかなか刺激的な毎日を送っています。 さて、これからは忙しさが増す一方でしょうから、今のうちに初心を振り返っておきます。 私はこの数年間、コードを書きながら、自分の人生の中でやりたいことはなんだろうかを考えてきました。私は主にソフトウェアのパフォーマンスに興味があります。プログラミング言語やツールに興味があります。また、テストや開発手法にも興味があります。エンジニアのコミュニティのあり方や、ハッカー文化にも興味があります。これらの興味を導きだすもの、それは以下のような考えだと思い至りました。 ソフトウェアエンジニアがもっと幸せになれるような技術を提供する この考えは、以下のid:TAKESAKOさんのインタビューを読んでから鮮明になりました。 Webエンジニア武勇伝 第29回 竹迫良範氏 (2008) 竹迫 日ITエン

    DeNAに入社しました - Islands in the byte stream (legacy)
  • 「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)

    (追記あり) How to Identify a Good Perl Programmer (by chromatic) が面白かった*1ので、27の質問を訳してみました。chromatic氏によれば、いずれも単純明快な質問でPerlの哲学や特徴をよく現しており、優れたPerlプログラマであれば少なくとも80%は答えられるべきだそうです*2。あなたは全ての質問に答えられますか? Perl5において変数のシジル*3が示すものは何か 配列のアクセスする際の $items[$index] と @items[$index] の違いは何か == と eq の違いは何か ハッシュをリストコンテキストで評価すると得られるものは何か Perlドキュメントからキーワードを検索するにはどのようにするのか Perl5における関数とメソッドの違いは何か Perl5が変数のメモリを再利用するのはいつか 変数のスコー

    「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)
  • Don't use base.pm, use parent.pm instead! - Islands in the byte stream (legacy)

    「使っちゃいけない標準モジュール」*1の反響を見ていると、baseが非奨励ということに驚かれた方が少なくありませんでした。そこで、baseについて補足します。 まずbase.pmのドキュメントの最初の文は以下のようになっています。 Unless you are using the fields pragma, consider this module discouraged in favor of the lighter-weight parent. (拙訳: fieldsプラグマを使用しているのでないかぎり、このモジュールは勧められない。かわりに軽量なparent.pmを使う方がよい。) fieldsプラグマは、ハッシュリファレンスのキーを固定したオブジェクトを作成するための機能ですが、あまり一般的ではないためここでは解説しません。特に理由がない限り、ここは素直に忠告に従った方がいいでし

    Don't use base.pm, use parent.pm instead! - Islands in the byte stream (legacy)
  • YAPC::Asia 2010 Tokyoで発表しました - Islands in the byte stream (legacy)

    至らない点は多々ありましたが無事発表を終えることができました!ありがとうございました! How Xslate WorksView more presentations from gorof.ちょっと捕捉します。 まず会場の質疑応答から(スライドにも簡単に追記しました)。 Q. テンプレートをPerlコードに落とし込んでperlに実行させるというモデルもあると思うが、敢えて独自VMを実装した理由は? A. たしかに、Perlコードに落とし込むテンプレートエンジンはあり、Template::ToolkitText::MicroTemplateなどはそうしています。しかしPerlは汎用のインタプリタであり、テンプレートのレンダリングに特化しているわけではりません。Xslateは汎用性を犠牲にし、高速化を図っています。特に、出力バッファに対する文字列の連結に大きな差があります。なので、独自VMの

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