Kazuki Ohta
mover****@hct*****
2005年 8月 21日 (日) 20:50:54 JST
太田です。 頂いたパッチはr1267でコミット致しました。 # このパッチのどこが影響したのかは分かりませんが、ひらがな入力は出来るように # なりました!漢字入力をするとmap_eval -> eval -> map_evalと無限ループに # 陥るっぽいですが。 > operations.c と datas.c で、TODO 潰しと、バグ潰し、ついでに「ここはこう > した方がストレートなんじゃないか」という箇所の変更、をしています。 > これで 2/3 ぐらい。おもな変更箇所は、 > * datas.c > - (add_heap, allocate_heap) memset の除去と条件判定のループからの追い > 出し →観測できるほど速くなりませんでしたが… > * operations.c > - 四則演算の脱 FUNCTYPE_2N 化。意外かも知れませんがこれは現時点では速 > 度は *低下* しています。これは FUNCTYPE_L しかないためで、一つずつ eval > してそのまま使えばいいのに、map_eval() がいちいち引数の数だけ cons して > くれてるためだと思われます。これらの関数や append などは、多分 > FUNCTYPE_RAW_LIST なり FUNCTYPE_RAW_ARGS なりを導入すれば速度は向上する > はず。コードサイズは肥大化しますが。いずれにしても早いとこ FUNCTYPE 整理 > してくれませんかねぇ… (と、プレッシャーをかけてみる > > - (ScmOp_equal) 演算子の引数チェックの順番が逆。 > - 比較演算子の関数の名前が逆。普通 > が「大なり」でしょう…あと多分数値 > の大小をいうときは "greater than", "less than" の方が一般的だと思いま > す。*思います*。R5RS にあるとおりに [non]increasing, [non]decreasing で > もいいかも知れませんが。 > > - max, min の中間生成物を排除。 > - (ScmOp_number_to_string) radix を実装。っていうか前に uim-db のため > に siod 用に書いたやつを引っ張ってきただけ。string->number も、strtol() > で簡単に実装できそうなんですが、string オブジェクトのもってる文字列デー > タは NUL-terminated と仮定して良いんでしょうか。copy-on-write shared > string ができなくなりますが。 > > - (ScmOp_string_to_number) atof → atoi (多分こっちの方が速い) > > - (ScmOp_c_length) 多分最初の if 文は無駄。 > > - (ScmOp_append) append はもらったリストを破壊してはいけません。(テスト追加) > > - (ScmOp_reverse) listp 排除。 > > - (ScmOp_listtail_internal) なんて schemer なコードなんだ! と思ってし > まいました。(笑) ループに変換。 > > - (ScmOp_memq) 冗長なテストを簡略化 > - (ScmOp_assq, ScmOp_assv, ScmOp_assoc) STRICT_R5RS 時に非 > alist の チェック > - (ScmOp_symbol_to_string, ScmOp_string_to_symbol) エラー処理、コピー > 処理の簡略化 > * test/bigloo-list.scm > ヤマケンさんの eq? hack で通らなくなったテストがあったので一時的に変更 > * test/io.scm > 前よりちょっと親切に。(笑) > * test/test-list.scm > append のテスト追加。 > * test/unittest-bigloo > 引数を xcons > > ちなみにヤマケンさんの比較関数周りの commit とかと一部競合するかもしれません。 -- ------------------------------------------------- Kazuki Ohta : mover****@hct***** -------------------------------------------------