Gauche:Textual/Binary Ports

Gauche:Textual/Binary Ports

Shiro(2012/01/08 06:16:28 UTC):

R6RSでもR7RSでもtextual portとbinary portの区別がある。Gaucheのportはどちらでも使えるので、安直なadaptationとしてはどちらのモードでopenしても1種類のportを返し、それはbinary-port?にもtextual-port?にも#tと応える、とする手がある。

けれどtextual portとbinary portを分けるというのは設計としては綺麗だし、性能の点からどちらかに特化したportが将来作られるのはあり得る。また、portからジェネレータを生成する時に、textual-portならデフォルトで文字のジェネレータ、binary-portならデフォルトで数値のジェネレータ、となると自然かもしれない。

すると、portの属性として次の2種類を備えておく必要がありそうだ。

このうち、capabilityがbinary only / textual only なら preferenceは自動的に固定されるので、以下4通りの組み合わせを持っておけば良い。

Type Capability Preference
binary-only binary binary
textual-only textual textual
binary-preferred binary/textual binary
textual-preferred binary/textual textual

(2012/01/08 09:52:14 UTC): いや、しばらく考えてみたが、portの種別(textualかbinaryか)をほとんど意識する必要のない現状で、どちらがpreferredかによって振る舞いが変わるのはむしろ混乱のもとでしかない、と思い直した。ジェネレータインタフェースについても、どちらかをcallerに明示させるか別々のAPIを用意するかして、capableでなければエラーで弾く、としておいた方が良さそうだ。 ということでここでの分類の考察は一時棚上げとしておく。


Last modified : 2012/01/08 09:52:14 UTC