[Anthy-dev 2279] Re: r5rs: SigSchemeへの移行方針

Back to archive index

YamaKen yamak****@bp*****
2005年 8月 24日 (水) 13:26:36 JST


At Wed, 24 Aug 2005 13:10:41 +0900,
mover****@hct***** wrote:
> r1274の変更でテストしてみたら動くようになりました。
> ただ、そこに渡ってきているデータ'(())をtrunkの方で試しても無限ループに陥りません
> でした。気持ち悪いです...

'(())というのはlistsの内容ですよね? それが渡ってくる状況というの
は以下のようなフォームが評価された場合なので何もおかしくないです。

(filter positive? ())

行き違いがあるような気がするんで補足説明しますが、

1) 元々の以下のコードではsingle_listpの評価ロジックに間違いがあ
   り、常に低速実行パスのみが有効になっていました。ただし遅いだ
   けで実行はどんな場合でも正常でした。

   single_listp = (uim_scm_length(lists) == 1) ? UIM_TRUE : UIM_FALSE;

2) 以下の太田さんの修正によって、リストが1つだけの場合は高速実行
   パスが実行されるようになりましたが、その高速実行パス内にバグ
   があり正常に動作しませんでした。

   single_listp = (uim_scm_c_int(uim_scm_length(lists) == 1)) ? UIM_TRUE : UIM_FALSE;

3) r1274でsingle_listpの評価ロジックと高速実行パス内のコードの両
   方を修正したので、リストが1つだけの場合高速に実行されるように
   なりました。1)との違いは実行速度だけです。


> > > 予想以上にSIOD依存が激しいようですね。基本的な方針には賛成なので
> > > すが、util.scmのSRFI-1互換関数を復活させるのには少し躊躇しています。
> > > iterate_listsが空リストをうまく扱えていないような気がします。以下のような
> > > バグも有ったり。こう変更すると動かなくなるのですがね...という訳でtrunkの方
> > > のiterate_listsをもう一度見直して頂けると嬉しいです。
> >
> > こりゃ恥ずかしいバグですね。r1274で修正しておきました。どうもです。
> >
> > しかし、この修正は以下のようなリストが1つだけのケースを高速化す
> > るだけの影響しか与えません。
> >
> > (filter positive? '(0 -1 2 -3 4))
> >
> > 元の(uim_scm_length(lists) == 1)のコードではこの高速実行パスがい
> > つでも無効になっていただけで、実行自体は正常でなければおかしいで
> > す。コードを見直してtest-uim-utils.scmにもテストを追加してみまし
> > たが、特におかしなところは見つかりませんでした。
> >
> > 確実におかしな結果になるテストケースはありますか?
> >
> > > Index: uim-util.c
> > > ============================================================
> > >======= --- uim-util.c  (リビジョン1271)
> > > +++ uim-util.c  (作業コピー
> > > @@ -508,7 +508,7 @@
> > >    uim_lisp elms, rest, rests, mapped, res, termp, pair,
> > > form; uim_bool single_listp;
> > >
> > > -  single_listp = (uim_scm_length(lists) == 1) ? UIM_TRUE :
> > > UIM_FALSE;
> > > +  single_listp = (uim_scm_c_int(uim_scm_length(lists) ==
> > > 1)) ? UIM_TRUE : UIM_FALSE;
> > >    res = seed;
> > >    if (single_listp) {
> > >      rest = uim_scm_car(lists);

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



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