2008-03-01から1ヶ月間の記事一覧
使い方代わりのテストケース。 #!/usr/local/bin/ruby19 require 'test/unit' def foo(a, b);end class TC_ProcParams < Test::Unit::TestCase def test_proc assert_equal([], proc{}.parameters) assert_equal(["a", "b"], proc{|a,b|}.parameters) assert…
Ruby においてキーワード引数の話は定期的に出るネタで、先日某 IRC でもその辺について話していたのですが、その中で、とりあえず method.arity みたいな感じで仮引数名のリストを取れたらいいんじゃないかという流れになったので、パッチにしてみました。 …
こちらも search non ascii 同様にワード単位で見れば早くなります。具体的には、そもそも UTF-8 は trail byte が [\x80-\xBF] に限定され、またこの範囲は lead byte には出現しません。つまり、バイト列の中から、0b10xxxxxx 以外のバイトの数を数えれば…
前回はこれの枕のはずだったのに間があいてしまった・・・。さて、まぁ、UTF-8でエンコードされたバイト列に含まれる文字数を数えたい場合、やり方はいくつかあります。 一つはUTF8の文字数を数える手法の検討にあるように最初のバイトを table にいれて文字…
最近はほとんどの x86 CPU が SSE と SSE2 をサポートしているので、SSE2 も使ってみましょう。やってることはワード単位の場合と大して変わりません。ちなみに、速度は 10000 文字を 1000 万回で、上記のワードごと 25 秒に対し 20 秒・・・、あまりかわり…
通常上のようなケースではベクトル化されないので自分でやります。具体的にはバイト列を 1 バイトごと調べていたのを、ワード単位で判定するようにします。アライメントを揃えないと落ちたり遅くなったりするので前処理と、端数対策で後処理を。これで 1000 …
ASCII Compatible な encoding の文字列に、ASCII 文字以外が含まれているかどうか検索するという問題。Ruby においては ASCII のみの文字列は ASCII 互換 encoding の文字列と結合できるので重要な問題です。普通に書くと以下のようになるでしょうか。しか…
最近の趣味は文字列処理の高速化なんですが、それについてメモがてら。