[Anthy-dev 2892] Re: [r5rs] storage-compact.h 再々編

Back to archive index

YamaKen yamak****@bp*****
2006年 4月 20日 (木) 19:10:23 JST


At Wed, 19 Apr 2006 18:36:14 -0700,
jun.l****@gmail***** wrote:
> 
> YamaKen <yamak****@bp*****> writes:
> > SCM_ENTYPE()はfatty固有のマクロですが、公開APIに見えてもおかしく
> > ありません。やはり機械的に判別できる必要があると思います。
> 
> ではやはり ENTYPE は SAL_ から降格ということで。
> ;; これが SAL_ になってたのは仕様だと思ってました。

いやここで言ってるのはfattyだけで定義されてるSCM_ENTYPE()であっ
て、SALになってるSCM_ENTYPE_*()の事じゃないっす。せめてこれだけ
でもと思ってSALから消した気が。

SCM_ENTYPE_*()の方はcompactで不要になり次第SALから消しましょう。

> ;; ていうか VALUECONS 周りで使われてるんですが。

大丈夫、把握してます。valueconsはfatty専用なんでSCM_ENTYPE(o,
ScmValuePacket)に置き換えれば大丈夫のはずっす。

> >> > 私からの希望としては、[Anthy-dev 2532]とstorage-compact.hの
> >> > SCM_INT_MSB付近のコメントに書いたように、元の実装ではstringや
> >> > vectorのlengthがintegerより無駄に広かったり符号ビットが未使用だっ
> >> > たりすところを最適化して欲しいです。

> 1 bit か…難しいな。STRING と VECTOR の L1 tag を同一にしてそれの一つ
> 上の bit で識別するようにする…とか? Level の概念で対応しきれなくなり
> ますが (元々あんまり長続きするとは思ってないけど)。そうやって 3-bit
> tag を一つ空けると far symbol の tag を 3 bit にして、*un*hygienic
> macro 有効時に任意の env を保存する cost が安くなるので、ほんのちょっ
> とだけウマー…とか…。意味薄そうな気も。

考えてたのはこう↓ですが、tag幅が減ってもあんまり嬉しくないオブ
ジェクトが多いですね。むしろstringとvectorの判別が複雑になるだけ
損か。imm5とかimm7を持つアーキテクチャならいい事あるかもしれない
ですが、マイナーなんで無視して構わないでしょう。どうするかはおま
かせします。

.......|00|1 : Symbol         : symbol name
....|00|01|1 : String         : string length
....|10|01|1 : String (const) : string length
....|01|01|1 : Vector         : vector length
....|11|01|1 : Vector (const) : vector length
....|00|10|1 : Values         : all 0 (for efficiency)
....|01|10|1 : Func           : ScmFuncTypeCode and LSB of stored Func address
....|10|10|1 : Port           : ScmPortDirection
....|11|10|1 : Continuation   : tag
....|00|11|1 : Pointer        : pointer type id
..00|00|11|1 :  - C Ptr       :
..01|00|11|1 :  - C FuncPtr   :
..10|00|11|1 :  - Reserved    :
..11|00|11|1 :  - Reserved    :
....|01|11|1 : Wrapper        : depends on type
..00|01|11|1 : subpat         : metainformation about the wrapped object
..01|01|11|1 : far symbol     : [#if !SCM_USE_UNHYGIENIC_MACRO] env depth
..10|01|11|1 : macro          : [#if !SCM_USE_UNHYGIENIC_MACRO] env depth
..11|01|11|1 : Reserved       :
....|10|11|1 : Reserved6      :
....|11|11|1 : FreeCell       : all 0 (for efficiency)

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



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