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

Back to archive index

Jun Inoue jun.l****@gmail*****
2005年 10月 9日 (日) 13:51:31 JST


On Sun, 09 Oct 2005 12:14:49 +0900
YamaKen <yamak****@bp*****> wrote:

> Schemeのコード上でportの実装を識別したい場合があるという事ですか?

Schemeのコード上でportの実装を識別したい場合があるという事じゃなかったん
ですか?

Soft port の実装が同じ (Scheme level) 関数を使いまわすことを想定してるの
かなと思ったんですが、それは soft port 実装側が user data に tag を置い
とけば済みますね。


> 私はCレベルでのダウンキャスト向け型情報としか考えてなかったんで
> すが(get-output-string等で必要)。

う〜、それなら enum でいいような。STRING ^ FILE ^ SOFT の三つで十分。こ
れなら cell も消費しないし、簡単。


> これはSchemeのportオブジェクトレベルでやっとけば十分でしたね。
> 
> close_input_port(ScmObj port)
> {
>     SCM_PORT_DIRECTION(port) &= ~SCM_PORTDIR_INPUT;
>     if (SCM_PORT_DIRECTION(port) == SCM_PORTDIR_NONE)
>       SCM_PORT_CLOSE(port);  /* also frees port->cport */
> }

そういうネタ元だったのね。そうそう、それは bit mask で十分。
あ、ところで member 変数名は cport より info か desc の方がよいでする。


> > これは get_byte(), peek_byte(), byte_readyp() or number_of_bytes_ready
> > () にしましょう。Multibyte port を読むとき次の文字が何 bytes 含むかの判
> > 定は SigScheme 側で書きたいところです。
> 
> その方がいいですね。3つ目の関数名はbytelen_ready()なんてどうでしょ
> う。

意味はわかるけど何か変ですねぇ…
;; number_of_bytes_ready はわかりやすくするためだけの名前だから、
;; とか言い訳してみる
私としては
-bytes_ready() 
-nbytes_ready()
-available_len()
あたりを考えているんですが、ちょっと補足。
bytes_ready (port, SCM_MB_MAX_LEN);
=> SCM_MB_MAX_LEN 以下の非負整数
みたいな使い方を想定しています。File port に毎回 file 終端までのサイズを
返させるわけにはいきませんので。


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



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