i18n

ご多分に漏れず、キャッシング(デコードしたUCS32/WSJIS/other文字列をキャッシュ)に伴う消費メモリ量と実行速度のバランス取りに悩む。現状はキャッシュなし。問題はlexerの実装で、ストリームから文字を取り出すときに、lexer側で泥臭く1文字のbyte数を判定している。1文字が2byteで済まないutf8を同じように実装すると、送られてきたパッチのように、さらに泥臭いソースができあがる(あれはあれで最小限度の変更なので、方針としては正しい)。出来る限り、文字列/ストリームクラス側で隠蔽したいところである。

ctow使用場所リスト:

  • libkawari/
    • kawari_code.cpp: TKVMCodeString::DisCompile()
    • kawari_codeexpr.cpp: TKVMExprCodeMATCH::Evaluate()
  • kis/
    • kis_communicate.cpp: KIS_matchall::Function()
    • kis_split.cpp: tokenizer
    • kis_string.cpp:
      • KIS_substr::Function()
      • KIS_length::Function()
      • KIS_match::Function()
      • KIS_rmatch::Function()
      • KIS_match_at::Function()
      • KIS_char_at::Function()
      • KIS_sub::Function()
      • KIS_gsub::Function()
      • KIS_reverse::Function()
      • KIS_tr::Function()
      • KIS_compare::Function()

iskanji1st使用場所リスト:

  • libkawari/
    • kawari_lexer.cpp: いろいろ
  • kis/
    • kis_escape.cpp: KIS_escape::Function()
    • kis_substitute.cpp: KIS_toupper::Function()
    • kis_substitute.cpp: KIS_tolower::Function()

うーん。やっぱりメモリキャッシュは要らないか。この程度だったら、データサイズが2倍になったとて、32bitのCPUなら、処理スピードには全くダメージを食いそうにない。データ転送量にしたって、1メッセージを処理する時のデータ移動なんて、せいぜい1KB程度でしょ。現状に対して遅くならないなら、それで満足しなければ。
仕方ない、ctow/wtoc的なものは残すことにしよう。ただし、iskanji1st()やlang.moreBytes()は撲滅する方向で。