[Anthy-dev 1118] Re: uim_get_default_im_name()の選択アルゴリズム

Back to archive index

YamaKen yamak****@bp*****
2004年 10月 5日 (火) 08:02:14 JST


At Tue, 5 Oct 2004 07:06:52 +0900,
tkng****@xem***** wrote:
> 
> On Tue, 05 Oct 2004 05:34:17 +0900
> YamaKen <yamak****@bp*****> wrote:
> 
> > At Tue, 5 Oct 2004 05:22:48 +0900,
> > tkng****@xem***** wrote:
> > > 
> > > On Fri, 01 Oct 2004 11:15:23 +0900
> > > YamaKen <yamak****@bp*****> wrote:
> > > > それと、pinyin-big5のlangは"zh"になっていますが、"zh_TW"の方が良
> > > > くないですか? これがuimに入った時の経緯を把握してないので何か事
> > > > 情があるのかもしれませんが。
> > > 
> > >  これはzh_HKでも使うと思うので、単純にzh_TWとはできないのです。(私
> > > も確信はないのですが、たぶんそのはずです。)対応するロケールを
> > > zh_TW:zh_HKみたいに複数指定できるようにした方がいいのかな…。
> > 
> > 私もメールを投げた後調べてそれを知ったので、"zh_TW:zh_HK"にする
> > つもりでいました。投げる前に調べろよって感じですが。コロン区切り
> > で複数の言語を指定するのはポピュラーな書式のようなので問題ないと
> > 思ってます。
> 
>  では、0.4.5あたりを目標でコロン区切りができるようにしましょう。

他の作業の進み具合にもよりますが、これは何とか0.4.4に間に合わせ
たいと思ってます。もちろんテストを書けるだけの余裕がある場合に限
りますが。

> > > > ・bug #1477の修正 (blocks #1502)
> > > > 
> > > >   helper-clientの仕様バグです。かなり致命的でuim-im-switcherの動
> > > >   作不良を引き起こしてます。socketプログラミングを経験してみたい
> > > >   方とか練習にどうでしょうか。
> > > 
> > >  ふと思い付いたのですが、read_proc内で一気に全部読み込んでしまうよ
> > > うにしてしまえば仕様を変更せずにバグを解決できるような気がします。固
> > > 定長のバッファでは困る部分があるのでめんどくさいですが、ちょっとやっ
> > > てみます。
> > 
> > read_proc()内で"\n\n"を検出するという事ですよね? 変更が最小限に
> > 抑えられるので良い方法だと思います。お願いします。
> 
>  いえ、問題は長すぎるメッセージの読み込みが途中できれる(read_proc内で
> 一回しかreadしてない)事なので、read_proc内で読み込めるだけデータを読み
> 込むようにしました。

コードを見ましたが、私の認識ではこれではまだまずいです。

1回しかread()しないのが問題なのはその通りですが、問題は1メッセー
ジ分のデータを確実にバッファに取り込むための終端判定にあります。

read(2)では第3引数で指定したバイト数が全部読み込まれる事は保証さ
れていませんが、この点は今回の徳永さんのコードでも繰り返しreadが
導入されたので解決しています。が、メッセージの終了判定に
uim_helper_fd()、つまりselect(2)を使っているので確実な終端判定は
できません。

・case 1

  OSの実装や動作状態によってはメッセージの一部だけread(2)可能状
  態になるのが遅れる事があり得る。その場合はselect(2)でready状態
  のfdが無かったからといってメッセージの終端まで読み終えたわけで
  はなく、旧実装と同様にメッセージ切れの問題を起こす

・case 2

  複数のメッセージが立て続けに送信された場合、今回の実装はそれら
  のメッセージをひとつながりの文字列として読み出す可能性がある。
  uim_helper_get_message()内でメッセージ終端("\n\n")を検出してい
  るので論理的には問題にはならないが、複数の大メッセージが連続し
  た場合のバッファの消費量を抑えられず、最大消費量を見積る事もで
  きない

これらを踏まえての「read_proc()内で"\n\n"を検出する」という発言
でした。

> (それを後からget_messageが呼ばれるたびに細切れにして返す)

これはちょっと意味が取れないんですが、旧実装も今回の実装も1メッ
セージ分の文字列を丸ごと返しているし、そうしないとまずいですよね?

-------------------------------
ヤマケン yamak****@bp*****



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