[Anthy-dev 2304] Re: r5rs: SigSchemeへの要望

Back to archive index

YamaKen yamak****@bp*****
2005年 8月 27日 (土) 11:16:46 JST


ヤマケンです。

At Fri, 26 Aug 2005 19:11:27 +0900,
mover****@hct***** wrote:
> sigschemetype.hには「型表現とそれを操作するマクロ群」を記述するとい
> う考えなので、今のままで良いと思うのですが...リスト操作用の便利マクロだ
> けがsigscheme.hにあるのは気持ち悪い気がします。

では見送っておきましょう。作者本人が同意できない理由では設計思想
の一貫性を崩しますし。

でも同意はできなくても理解はして欲しいと思うので私の考えを補足し
ておきます。返答はいらないので頭の片隅に残しといてもらえると嬉し
いです。

・sigschemetype.hは基本型の内部表現とそれを隠蔽し抽象的に操作す
  るマクロ群を定義するものに限定すべき。VM層またはHALに似た役割
  と考えてください。Storage Abstraction Layer?

・内部表現を隠蔽するための最低限のインタフェイスに徹する事で、
  SCM_CADRやScm_NewCons()といった上層APIの変更が内部表現定義ファ
  イルに波及する事を防ぐ

  プラットフォーム毎に最適な内部表現を使い分けたり、実験的な内部
  表現を試す等のために複数のsigschemetype.hを挿し替えて使う場合
  には、高級APIの変更を各sigschemetype.hにコピペして回る代わりに
  sigscheme.h等に一元化してあった方が楽だし問題を起こさずに済む

・listは基本型ではない。基本型であるpairの複合オブジェクトに過ぎ
  ない。よってlist操作APIは内部表現に依らない高級APIである

・SCM_CADR等はlist操作なので高級API

・SCM_CONSは内部表現に依らない高級API

・SCM_CARはSCM_CONS_CARの簡略表記として高級API扱いすべき

  a cons cellのcar partにアクセスする等の基本操作は、
  SCM_STRING_LENのようなSCM_<type>_<member>というアクセサ命名規
  則と一貫性を持たせるためsigschemetype.h内ではSCM_CONS_CARのよ
  うにcanonicalに命名するのが望ましい。一方でSCM_CARという簡略表
  記も欲しいが、上述のコピペ問題を避けるためsigscheme.h等の上層
  のファイルで定義するのが望ましい

> # SCM_LIST_* 系の場所は移動すべきですね。

SCM_LIST_*を移動するならSCM_CADRも移動すべき、というのが私の見解
です。基本操作と高級操作をどこで線引きするかという視点の違いです
ね。

> > At Tue, 23 Aug 2005 23:47:38 +0900,
> > yamak****@bp***** wrote:
> > > ・以下のマクロ群のsigscheme.hへの移動
> > >
> > >   - これらはオブジェクト表現の隠蔽ではなく単なる簡略表記のための
> > >     マクロなのでsigschemetype.hに含めるのは論理的におかしいと思
> > >     います
> > >
> > >   sigscheme.h:
> > >   /* conventional abbreviation for basic operations */
> > >   #define SCM_CAR            SCM_PAIR_CAR
> > >   #define SCM_CDR            SCM_PAIR_CDR
> > >   #define SCM_SET_CAR        SCM_PAIR_SET_CAR
> > >   #define SCM_SET_CDR        SCM_PAIR_SET_CDR
> > >   #define SCM_CAAR(l)        (SCM_CAR(SCM_CAR(l)))
> > >   #define SCM_CADR(l)        (SCM_CAR(SCM_CDR(l)))
> > >   #define SCM_CDAR(l)        (SCM_CDR(SCM_CAR(l)))
> > >   #define SCM_CDDR(l)        (SCM_CDR(SCM_CDR(l)))
> > >   #define SCM_CONS(kar, kdr) (Scm_NewCons(kar, kdr))
> > >   #define SCM_LIST_1(obj1)   (SCM_CONS(obj1, SCM_NULL))

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



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