[Anthy-dev 2694] Re: r5rs: コード再編

Back to archive index

Kazuki Ohta mover****@hct*****
2005年 12月 13日 (火) 01:19:17 JST


太田です。

> それと最後に、ちゃんと見てないので外しまくってるかもしれませんが、
> compact header で使ってる macro が
> ・名前長すぎ
> ・抽象化の階層深すぎ
> な気がします。(あと、80 桁に納めてください)
>
> あれだけ長いものがずらずら並んでると icon 性が失われているので読みにく
> く、bug の原因になります。Compaction 周りでは専用 header から一歩も外
> へ出ることのない概念が色々あるので、それに短い名前を付けたり名前を
> abbreviate したりして見通しをよくした方が、長く「きっちり」書くより有
> 益だと思います。外から見えるものについては多少長くなっても仕方無いかも
> 知れませんが。
>
> 例えば SCM_TAG_OTHERS_VALUE_OFFSET_STRING というのがありますが、
> OTHERS_VALUE という部分は完全に冗長です。というかこの名前を見ても code
> を見ても何してるのか私にはよくわかりません。未だにわかってません。集中
> して読まないとわからないから。発案者なのに。OFFSET て何? これを
> SCM_YTAG_STRING とかすれば、読んだ人は "YTAG て何?" と思って grep か何
> かするでしょう。そこで適切な comment が出てきて解決します。一般的な単
> 語でない分、hit 数も絞られます。
昔Yamakenさんのコードが有ったんですが、あれはさらに抽象度高すぎ & 名前長す
ぎで僕の頭が完全にオーバーヒートして捨ててしまった経緯が有ります。なので見通し
を良くするという方針には賛成です。

Compactのコードを見るのには書いた僕ですら相当の集中力が要るので、とりあえず
その敷居を下げるような作業を率先して行う方針で行きます。発案者が読めないと
いうのは痛いですし...

SCM_TAG_OTHERS_VALUE_OFFSET_STRINGは確かに分かりづらい。TAGも冗長
で、SCM_STRING_VALUE_OFFSETが一番わかり易いですね。変更しておきます。

# それとytagって何の abbreviation ですか?


P.S.

一応現状のコードの説明をしておきます。
マクロのおおまかな分類としては次のような感じになっています。

* 定数
各オブジェクト用のタグと、各オブジェクトが保持している値を取得する為のmask or
offset。

* Type Predicate Macros

* Entyping Macros

* Accessor Macros
(1-1) GC bit を除去してアクセスする為のマクロ群(*DISCARDS_GCBIT)
(1-2) GC bit を保存して値を代入する為のマクロ群(*REMAIN_GCBIT)

(2-1) Primary Tagを除去してアクセスする為のマクロ群(*PRIMARY_GET*)
(2-2) *PRIMARY_SET*はレイヤー化する為のバイパス

この2つの層は連結してしまおうと思います。

(3-1) car, cdrのそのままの値(GC bit, Primary Tag付き)にアクセスする為のマクロ群
(SCM_GET_DIRECT_*)
(3-1) car, cdrに値をそのまま代入するためのマクロ群(SCM_SET_DIRECT*)

(4-1) GC bit を取り除いたcar, cdrを取得するためのマクロ群
(SCM_GET_C[AD]R_VALUE_AS_*)
(4-2) GC bit を保存しつつcar, cdrに値を代入するためのマクロ群
(SCM_SET_C[AD]R_VALUE_AS_*)

(5-1) 各オブジェクトのデータにアクセスする為のマクロ群。基本的には(4-1)のマクロを
使用する。
(5-2) 各オブジェクトのデータを代入する為のマクロ群。基本的には(4-2)のマクロを使
用する。


-------------------------------------------------
Kazuki Ohta : mover****@hct*****
-------------------------------------------------



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