[Anthy-dev 2505] Re: r5rs: portの抽象化

Back to archive index

Jun Inoue jun.l****@gmail*****
2005年 10月 8日 (土) 09:37:09 JST


On Sat, 08 Oct 2005 01:55:36 +0900
YamaKen <yamak****@bp*****> wrote:

> ヤマケンです。
> 
> SigSchemeにstring portが追加されましたが、インタプリタ側がこれを
> 認知して個別対応する必要があるのでメンテナンス性や今後の拡張に難
> があると感じています。また、Schemeで書かれたportへの対応が不十分
> です。
> 
> そこで以下のような抽象化によりタイプ依存コードを隠蔽する事を提案
> します。どうでしょうか。

大体賛成。細かい点をいくつか。


> enum ScmPortDirection {
>     SCM_PORTDIR_NONE   = 0,
>     SCM_PORTDIR_OUTPUT = 1 << 0,
>     SCM_PORTDIR_INPUT  = 1 << 1
> };
> 
> struct ScmPortCell {
>     enum ScmPortDirection direction;
>     ScmCPort *cport;
> } port;

> struct ScmCPortVTbl {
>     ScmObj (*type)(ScmCPort cport);  /* returns a symbol */

変数にした方がいいでしょう。途中でコロコロ変わる必要は無いし、変わられて
も困る。


>     int (*finalize)(ScmCPort cport);
>     int (*close_input)(ScmCPort cport);
>     int (*close_output)(ScmCPort cport);

全部 close 一つでまとめたらいいのでは? 入出力 port の一方向だけ塞がなく
てはいけない場面というのを思いつかないんですが。


>     /* input */
>     int (*getc)(ScmCPort cport);
>     int (*peek_char)(ScmCPort cport);
>     int (*char_readyp)(ScmCPort cport);
>     /* output */
>     int (*vprintf)(ScmCPort cport, const char *str, va_list args);
>     int (*display)(ScmCPort cport, const char *str);
>     size_t (*ndisplay)(ScmCPort cport, size_t size, const char *str);

ndisplay は要らないと思う。Port の許容量は無制限が普通 (ですよね?)。

-- 
Jun Inoue
jun.l****@gmail*****



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