YamaKen
yamak****@bp*****
2005年 10月 12日 (水) 05:52:33 JST
At Tue, 11 Oct 2005 12:50:43 -0700, jun.l****@gmail***** wrote: > > On Tue, 11 Oct 2005 23:12:31 +0900 > YamaKen <yamak****@bp*****> wrote: > > > まずい表現でした。「抽象portそのもの」と読み替えてください。info > > やdesc(page descriptorのようなものを想定)では内部情報に直接アク > > セスする事を示唆しているように取れてしまうので避けたいです。 > > > > 一方UNIXのfile descriptorのように実体を間接指定するインデックス > > と取られるのも面白くないです。ここに収められているのが抽象インタ > > フェイスを備えたオブジェクト本体だと明示したいという事です。 > > それこそ descriptor です。そもそも Unix の "file descriptor" という名前 > が間違ってます。実際の table に入ってる構造体こそが descriptor (記述子) > であって、何を記述しているかといえば file の interface (Linux だとその > stream に責任を負う VFsys の module) の情報です。整数値はただの handle。 うーむ。どうもうまく伝わらないですね。 私は井上さんの言うような本来の意味のdescriptorというものは理解し てるつもりで(その例として"page descriptor"と書きました)、それが ちっとも抽象的でない事を問題視してるわけです。descriptorと言えば 普通変数インタフェイスで直接読み書きですから。今回の件で言えば ScmStdCharPortのrbufやbportがdescriptorのフィールドとして直接触 れる設計だとプログラマに誤解させてしまう。 それとは別にUNIXのfdに倣った単なるhandleと取られる事も、これもま た避けたいと。 実態はpolymorphic functionのみをインタフェイスとして持つ純粋な抽 象オブジェクトとして変数は全て隠蔽されているわけで、それを暗示す る名前にしたいわけです。 これで疑問が残るようなら、続きはコードが上がってからにしましょう か。 > と、ここまで書いて「抽象 port の実体」という CPort もおかしくないかと思 > い直しました。でもそれならもう ScmPort *port; にしてしまった方がいいです > ね。 ScmPortCell というのは実際には名無しの cell さんとしてしか登場せ > ず、 accessor 経由で触るだけですから。(つまり ScmPortCell なる構造体は > source 中には登場しない) cellに格納されるのはScmCharPortなんで、それを考慮するとchportと かですかね。この名前が登場するのはstructとアクセサマクロの定義中 だけなんでそこで理解しやすい事が重要ですが… SCM_AS_PORT(obj)->cell.port.port SCM_AS_PORT(obj)->cell.port.chport SCM_AS_PORT(obj)->cell.port.impl やっぱ私はimplを推しときます。でもportやchportでもdescやinfoのよ うな誤解は生まないので実装する人の趣味という事で。 > > 数字で始まるコードもあり得るようなので安全側に倒して文字列にしと > > いた方がいいと思います。canonicalizeすればいいという意見もあると > > 思いますが、canonicalizationの責任はこれより上の層に負わせたいで > > す。 > > 上層で canonicalize するならなおさら SigScheme 側では何の名前で用意して > もいいのでは? …と思いますが、これ以上机上で議論を交わすのは効率悪そうな > ので code を書くのを先決します。…あれ? これって私が書くんですか? (汗) 多分伝わってないので一点だけ補足すると、file, string以外の独自 portの実装で外部から渡ってきた名前をそのまま横流しするような命名 権が無い場合を想定してます。あとはコードできた後に。 …うひゃ。てっきり実装者としてバリバリ意見出ししてくれてるんだと ばかり。じゃあ気分転換したくなった人が書くって事でどうでしょ。私 も参戦して。 ------------------------------- ヤマケン yamak****@bp*****