[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2097] Re: for adarrel3.



  こんにちは、川合です。


Solid さんは 2001/09/10 11:29:20 の「[OSASK 2092] Re: for adarre
l3.」で書きました:

>ベータ版時点での変更は、全然構わないと思います。
>APIの互換性のために、より良い改良ができなかったり、
>古い API を残したり、フラグ等による拡張よりも
>すっきりするならその方が良いと思います。

  これはありがたいご意見です。そういっていただけると助かります。

>また、固定的な値は極力シンボル参照として、
>ソースレベルの互換が取れれば正式版であっても互換性の取れない
>変更が入ったとしても構わないとさえ思います。

  これはよほど致命的な問題がない限りはやりません(設計ミスが原因
のバグがあるとか)。僕はソースレベルでの互換を互換だとは思ってい
ないのです(笑)。

  しかし、固定的な値をシンボルで参照できるようにする、という方針
は可読性の観点から嫌いではありません。小柳さんが[OSASK 2095]で提
案なさっている件がうまくいってシンボル名のリストができれば、それ
はguigui00.hに組み込みたいと思っています。

>APIの互換性のために拡張機能フラグとか、
>バージョン情報取得とか、何か互換性の「維持拡張」のための
>仕組みを用意しておくのもいいかもしれませんね。

  よくありません。僕はこの手の仕組みが失敗の始まりになると信じて
います。僕がこういうAPIを設計することはありません。誰かが設計す
る分にはとがめたりはしませんが、川合秀実推奨は付けないでしょう。

  API自身は互換性を維持する義務を負わないし、アプリがAPIのバージ
ョンを区別する手段すら提供すべきではない、というのが僕の主張です
。

  仮にAPIが10バージョンあって、これをバージョン情報取得で区別し
なければいけないとしたら、それは悪夢のような状態です。これはアプ
リの肥大化を促し、実行速度が遅くなり、プログラマーへの負担も増え
ます。

>DirectXは最新の SDKでも旧バージョン指定コンパイルができたり、
>最初のバージョンで初期化を行い(入り口はいっしょ)、その後で
>新バージョンへインターフェースの変移 APIで移行する
>といった特殊な吸収の仕方をしていました。

  これは言うなれば、アプリがバージョンによる差違を吸収するのでは
なくAPIが差違を吸収したといえるでしょう。APIバージョン取得よりは
前進していると思います。

  しかしOSASKでは、この方法すら採りません。

  アプリケーションから見れば、OSASKのAPIはDLLのファンクションで
しかありません。アプリケーションが自分の使いたいDLLを指定するの
はいたって当然のことですが、それと同じ感覚でOSASKアプリはAPIその
ものを指定します。指定されたAPIを用意するのはシェルの責任で、ア
プリはそれがどんな実装なのか知ることはできません。

  今のOSASKアプリにはオフセット+0x8〜+0xfに、"GUIGUI00"という8バ
イトが必ずあるようになっています。これはAPI名を示していまして、
シェルはこの部分を読むことで、このアプリがどんなプロトコルでシス
テムを利用しているのかを知ります。そして、実行に際して必要な環境
を整えて、アプリを起動します。

  たとえば5年くらい先には、今のぐいぐい00仕様はそのいい加減な設
計方針のせいですたれるでしょう(笑)。その頃にはぐいぐい01仕様が
提唱されているかもしれません。しかしこの時代になってもぐいぐい00
仕様のアプリは全て無修正で動きます。それは、ぐいぐい00仕様-ぐい
ぐい01仕様ブリッジがシェルの責任で提供されるからです。このブリッ
ジの実態は、アプリケーションからは「GUIGUI00」そのものに見えるDL
Lで、内部は「GUIGUI01」のファンクションを呼び出す関数の集まりで
しかありません。

  ブリッジはエミュレーターではないので十分に軽く、コンパクトにな
るでしょう。このブリッジもDLLとして提供されるので、必要なければ
ロードされません。

  この機能のおかげで、ぐいぐい01仕様やそれ以降のバージョンが主流
になってもぐいぐい00仕様でアプリケーションを作り続ける人がいるで
しょう。それは僕の想定の範囲ですし、認められる行為です。

  ブリッジは多段にすることもできます。まあ、10段とかにするとさす
がに重くなりそうなのでやめてほしいですが(笑)。

  僕はAPIの乱立を望んでいます。僕の提唱するぐいぐい00仕様以外に
も多くのAPIが提唱され、相互にブリッジが用意され、プログラマーが
使いやすいAPIを選べればこれはかなりよい状態だと思います。

  ブリッジを提供するのはAPI提唱者です。自分のAPIを普及させたいと
思うならブリッジをそろえなければいけません。

  このAPIの取り扱いはAPIの精練だけをもたらすわけではなく、OSがAP
Iに縛られることなく拡張していけることも保証していると思います。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/