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***** -------------------------------------------------