[Anthy-dev 2734] Re: r5rs: 小整理

アーカイブの一覧に戻る

YamaKen yamak****@bp*****
2005年 12月 19日 (月) 01:49:05 JST


At Sat, 17 Dec 2005 17:31:11 -0800,
jun.l****@gmail***** wrote:
> 
> YamaKen <yamak****@bp*****> writes:
> 
> >   scm_current_input_port  → scm_in
> >   scm_current_output_port → scm_out
> >   scm_current_error_port  → scm_err
> 
> scm_cur_* でもいいんでは?

私もそれは検討しましたが、'current'に情報量があるかと言えば、こ
の場合はほとんど無いんじゃないかと思います。

'cur'が無くてもSchemeレベルの標準portを指す事はわかるし、不変標
準portとは別に可変標準portが存在するとも考えにくい。

初見でSigSchemeのコード片を読んだ場合はcurrent-input-port等との
関係を確信できないかもしれませんが、こう書いておけば終了です。

ScmObj scm_in;   /* current-input-port */
ScmObj scm_out;  /* current-output-port */
ScmObj scm_err;  /* current error port */

したがって'cur'の意義はコード片の初見でcurrent-input-port等との
関連性の確信度を上げる事だけです。

これと'cur_'の4文字短縮を天秤にかけて、後者の方が視認性や
scm_error_printf()等の廃止に繋がる利点が大きいと判断しました。

> > ・sizeof((char)'\0')をsizeof("")に
> >
> >   終端文字分のサイズである事を明示するために使ってますが短かい方
> >   が見やすいので。
> 
> +1 ではいけませんか? 使いどころは主に strlen(foo) + sizeof((char)'\0') 
> だったと思いますが。こういうときの +1 は完全に idiom 化してるし。

+1だと意図が不明確になる場合があるので明示したいです。

実コードを引用します。

char buf[CHAR_LITERAL_LEN_MAX + sizeof("")];

  これは+1でもその意図はほぼ確信できますね。イディオムに従う事に
  問題はないと思いますが、他のコードとの統一性からsizeof("")とし
  たいです。

path_len = lib_path_len + sizeof((char)'/') + filename_len + sizeof("");

  この場合も変数の並び順から終端を+1としても誤認はないでしょう。
  ただし、+1を目でスキャンしてから脳内で解析器にかけて意味層レベ
  ルの表現を再構築する必要があるので思考ステップと短期記憶を浪費
  します。

  また、sizeof((char)'/')も+1とするとさらに脳内リソースを浪費す
  る事になるし、そうしないなら終端の+1に対して表現の統一性が失わ
  れます。

if (p == &buf[buf_size - sizeof("")])

  この辺になると、+1ではコードの文脈も踏まえないと意味を取れませ
  ん。脳内リソースの浪費はさらに大きくなります。

if (port->buf_size - port->cur < len + sizeof("")) {
    if (!port->buf_size)
        port->buf_size = sizeof("");

  これも同様。

これらを+1にすると流し見レベルで検証できないコード範囲が増えてバ
グを見逃す元になります。何より本質的問題に向けるべき貴重な脳内リ
ソースを削られる事になります。特に若くて脳の馬力がある内はそのぐ
らい大した事ないように感じられると思いますが、脳負荷の大きな問題
に取り組んでいる時にはこれらの干渉があるかないかは結構効いてくる
んじゃないでしょうか。

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



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る