uim系のIMを使ったことがないだけじゃ、あれなんで、そのうち使ってみるとして、まずはソースを軽く読んでみることにした。知らないままにいろいろ書いても仕方がない。
まずは変換エンジンの切り替え関連。
Cのソースはuim直下。scheme系はscm直下にあるのか。簡単な変換はschemeだけで実装して、複雑なものはCの方でライブラリを読むと。
だが、この作りだと、変換エンジンがpluggableにはなってないようだ。新たに(複雑な)変換エンジンを作っても、uimの再コンパイルがいるのか。この辺りのインターフェースは中途半端だな。Anthyはどうせuim専用みたいなものなんだから、uimのソースにAnthyに依存する部分なんかなくてもすむような作りにしておいた方がいいだろうに。
ところで、uimはライブラリでのIMの実装であるため、Anthyなどもライブラリの形で実装されているようだ。(こちらのソースは未読)
ということは辞書は複数プロセスのメモリ空間に読み込まれる?辞書の学習内容のプロセス間の同期はどうなってる?
と思ったら、anthy-agentとか、anghy-dic-toolとかあるのか。この辺、内部構造をまた調べておこう。
さて、uimに戻るけど、全体的な構造としては、ライブラリでの実装にするツケがヘルパーアプリやanthyのコマンドとかに出てきていると言えるのだろうか。このあたりはもうすこしよく勉強してからか。
とりあえず、気になった点。コーディングしている人が、get_c_string()関数の仕様をよく把握していないような。
たとえば、uim-util.cの「return strdup(get_c_string((LISP)str));」なんてのはもろメモリーリークに繋がるコーディングだし、
uim-func.cのim_register_im()あたりも動作的には問題なさそうだが、効率的には気になるなぁ。まあ、こちらはそうたくさん呼ばれる関数ではなさそうなのでパフォーマンスにも大きな影響はないだろうけど。
Warning: count(): Parameter must be an array or an object that implements Countable in /home/asaki/www/wordpress/wp-includes/class-wp-comment-query.php on line 405