[Anthy-dev 2726] Re: コードの抽象化 (was: to 太田さん )

アーカイブの一覧に戻る

YamaKen yamak****@bp*****
2005年 12月 17日 (土) 12:06:54 JST


At Sat, 17 Dec 2005 11:04:27 +0900,
mover****@hct***** wrote:
> > > 確かにSymbolだけを見れば綺麗です。それは認めます、はい。しかしですよ、String や
> > > CFunc、Pointer、Int等はこの抽象化の範疇に収まりきらず、かなり複雑な操作になっ
> > > てしまいます。結局下の層の中身を見てしまいますよね?
> >
> > いや綺麗に収まる事を期待しちゃってるんですけど、下の方の層を書い
> > ただけなんで問題を把握できてません。具体例出してもらえますか?

なるほど、色々ありますね。「結局下の層の中身を見てしまう」の部分
が、場合によりbit幅やoffsetを参照する必要があるという意味ならそ
れはそうです。ただし、その参照はあくまでも統一された形式の抽象的
なシンボルを通して行われるだけで、直接「tagが5bitで…」とか考え
る事はありません。

もちろんエンコーディング形式を決める時には直接bit数を認識してい
るわけですが、一旦それが格納可能な事がわかった後は何が何bitかと
いった情報は隠蔽して楽にコードを扱えるようにしたいわけです。実際
この前までcompact representaionの詳細はきれいさっぱり忘れてまし
たが、r1857のコードを読んだらすらすらと思い出せました。

> まず、Stringについては immutable or mutable flag を 1 bit だけ car の2 
> bit目に確保しています。

valueフィールドをさらに2つに分割して使う事になりますね。下層のイ
ンタフェイスに対して出し入れするvalueがpacked形式になっただけの
話です。

そして、flagをエンコーディングするbit位置は「2bit目に…」といっ
た直接的な構成を意識する事なく、valueのLSBとだけ認識していれば
bit幅が足りている限りは下層の構成を無視できます。

> Pointerについては、alignedなポインタが入ってくるとは限らないので、LSB
> だけを cdr の一部に退避させる必要があります。(carのLSBはGC bitに使
> われています)

これも同様。「LSBだけをcarに…」ではなく、「cdrのvalue幅から溢れ
た分をcarのvalueに格納」とすれば下層の構成を無視できます。

> 。int については符号を意識する必要があります(そういえば井上さんが案を
> 出してくれたのまだ見てないや...)。

これも取り出したvalueをどうshiftするかの問題であって、出し入れの
手順については抽象化されてた方がいいんじゃないでしょうか。

> > それと、単に記述を短かくするのではなく「タグ幅に関係なくvalueを
> > 読み書き」という単純な概念に抽象化する事を重視しているつもりです。
> なるほど、これはかなり成功していますが、やはり例外が気になりますね。

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



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