[Anthy-dev 2479] Re: gcanna.ctd の頻度について

Back to archive index

Yusuke TABATA yusuk****@w5*****
2005年 10月 1日 (土) 16:22:12 JST


田畑です。

Yusuke TABATA wrote:
> 前も言った気がするのですが、ツールで解決するのが正しいと思います。
> たとえば、メーラーや2ch viewerのようなフロントエンドや一般的な
> Bug Tracking Systemのようにウェブブラウザから操作できる
> ユーザインタフェースをもったソフトを作り、送られてきた差分を
> ほかの単語での扱いと比較しながらGUIで決めれるというのが欲しいです。
欲しいですと言ってるだけでは、アレなので、現在までに検討してみた
内容と技術的な余談を書いてみます。

辞書ファイルの情報を全てメモリに読み込んで、どの辞書の何行目に
どの単語がどの品詞と頻度で定義されているかを出力するコードを
Cで書いて、手元の辞書にかけてみました。
40万語があって、出てきたファイルは25MBで、このコードを
実行する時に消費したメモリは50MBでした。

できればRuby等のスクリプト言語のハッシュか何かで
扱いたいのですが、メモリ消費のオーバヘッドが大きい
(数十倍)ので、今時のPCでやるのは現実的では無さそうです。
また、Cのままやるとしても、GtkTreeViewに突っ込んだりすると
悲惨なことになりそうですし、複数バージョン読んだり、検索用の
データ構造も付けたいところですので現状では辛いです。

SQLサーバを使ったら良いと言われることもありますが、依存関係を
増やしたくないのと、開発者およびユーザの手間が増えるのとで
避けています。(もっと言うと勉強するのが手間←そんなんだから
ソフトウェア開発技術者試験に落ちる)
色々な手法や工夫が考えられるのですが、再来年ぐらいには大抵の
PCは数GBのメモリを積んでそうな気がするので、ここで手間を
かけずにすましたい所です。

--
余談ですが、僕がanthyの開発をはじめたころに使ってたPCは
メモリが32MBで、辞書ファイルの生成するのにswapが発生しまくって
他の作業が何もできない状態で10分ぐらいかかってました。
そのヒマな時間は読書等でつぶしていて、省メモリのための
工夫とかはせずに今に至り、今のanthyをコンパイルする時は
50MB程度の空きメモリが必要です。
使うときはもっと少なくても大丈夫です。

もっと古い話をすると、先日、10年以上前に変換エンジンを
扱ってた人とCannaやWnnがサーバ・クライアント方式で作られた
理由について議論したんですが、90年頃までのUnix系の
OSではプロセス間の共有メモリがまともに使えなかったのが
大きな理由であろうという話になりました。
そして、凄い人がそれをなんとかするために、凄いハックを
やった話を嬉しそうに語ってくださりました。
#DOSでさえプロセス間でメモリを共有できたのに…
#(非共有が無いとも言いますが)
#DOSって何か知ってますか > 若い人 ;)

時代によってソフトウェアの作りは変化するという余談でした。
10年後にはanthyも「1プロセッサでヘビーなループ回すな」とか
あるいはもっと予測の付かない文句を言われたりするのが
楽しみです。

-- 
--
 CHAOS AND CHANCE!
  Yusuke TABATA



Anthy-dev メーリングリストの案内
Back to archive index