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