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 みたいな感じで仮引数名のリストを取れたらいいんじゃないかという流れになったので、パッチにしてみました。 …

Counting UTF-8 characters with word

こちらも search non ascii 同様にワード単位で見れば早くなります。具体的には、そもそも UTF-8 は trail byte が [\x80-\xBF] に限定され、またこの範囲は lead byte には出現しません。つまり、バイト列の中から、0b10xxxxxx 以外のバイトの数を数えれば…

Counting UTF-8 characters

前回はこれの枕のはずだったのに間があいてしまった・・・。さて、まぁ、UTF-8でエンコードされたバイト列に含まれる文字数を数えたい場合、やり方はいくつかあります。 一つはUTF8の文字数を数える手法の検討にあるように最初のバイトを table にいれて文字…

Search Non ASCII with SSE2

最近はほとんどの x86 CPU が SSE と SSE2 をサポートしているので、SSE2 も使ってみましょう。やってることはワード単位の場合と大して変わりません。ちなみに、速度は 10000 文字を 1000 万回で、上記のワードごと 25 秒に対し 20 秒・・・、あまりかわり…

Search Non ASCII with words

通常上のようなケースではベクトル化されないので自分でやります。具体的にはバイト列を 1 バイトごと調べていたのを、ワード単位で判定するようにします。アライメントを揃えないと落ちたり遅くなったりするので前処理と、端数対策で後処理を。これで 1000 …

Search Non ASCII with bytes

ASCII Compatible な encoding の文字列に、ASCII 文字以外が含まれているかどうか検索するという問題。Ruby においては ASCII のみの文字列は ASCII 互換 encoding の文字列と結合できるので重要な問題です。普通に書くと以下のようになるでしょうか。しか…

String Optimization

最近の趣味は文字列処理の高速化なんですが、それについてメモがてら。