2008-01-01から1年間の記事一覧

m17n が何か,って説明がなかった気がするなぁ

完全に忘れてました。 L10N (Localization) (地域化) それぞれの地域・言語に適したようにすること ある言語に対応すること cf. nls (national language support) I18N (Internationalization) (国際化) 地域化しやすいように、あらかじめソフトウェア側を抽…

Ruby M17N follow up 1

というわけで、RubyKaigi で話せなかったことを書き連ねる連載のはじまりはじまり(ぱちぱち

RubyKaigi 2008 Ruby M17N

発表資料置き場 概論や変更点の話が多かったせいで難しい印象をもたれてしまったかも。 もっと実例を増やしたほうがよかった気もするけれども、現時点ではこんなものかなぁという気も。何はともあれ、おいおい情報を追加していかねば。

仮引数名のリスト用のテスト

使い方代わりのテストケース。 #!/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

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

Shift_JIS 風 UTF-8 と CP932 風 UTF-8 の正規化

str.gsub!(/\xC2\xA2/, "\xEF\xBF\xA0") str.gsub!(/\xC2\xA3/, "\xEF\xBF\xA1") str.gsub!(/\xC2\xAC/, "\xEF\xBF\xA2") str.gsub!(/\xC2\xA6/, "\xEF\xBF\xA4") str.gsub!(/\xE2\x80\x94/, "\xE2\x80\x95") str.gsub!(/\xE2\x80\x96/, "\xE2\x88\xA5") str…

Ruby 1.9 の magic comment

magic comment ですが、端的に言えば Python と同じです。異なるのは、emacs 風の -*- coding: euc-jp-unix -*- の -unix をちゃんと捨ててくれる点くらいでしょうか。これもあくまで現在の実装になります。

Ruby 1.9 の string literal encoding

string literal encoding とは文字列リテラルのエンコーディングです。文字列リテラルはさらに、通常のスクリプトファイル内のものと、-e や stdin から与えられるスクリプト内のものに分けられ、両者でデフォルトの値が異なります。この辺の詳細は [ruby-de…

Ruby 1.9 における replica と alias の違い

端的にいえば以下の通り。 replica 「encoding」を定義する alias 「encoding *名*」を定義する 図にすると以下のような感じ。 鬼車(CES) OnigEncodingSJIS │←────────────────┐ ───┼─────────────────┼────────────── │ │ Encoding (文字集合+CES) │ │ #<Encoding:Shift_JIS> ─(</encoding:shift_jis>…

RubyM17N について

RubyM17N は現在「コードが仕様」な面が多いため、わたしが知っていることについて書き残しておくことにする。と言っても、わたしも追いかける身なので間違ってる点はあるだろうので、そこはご了承を。