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

[OSASK 2256] Re: ASKA ver1.0β17



  こんにちは、川合です。


今原 修一郎 さんは 2001/10/01 00:57:16 の「[OSASK 2241] Re: ASK
A ver1.0 β 17」で書きました:

>>  ところで、今原さんのページをみて思い出したんだけど、GWLの次バ
>>ージョンの開発はどうなっているの?やめちゃったの???
>すみません、やることが多すぎて中断していたのと、シグナルの
>いい解決法が見つからないのとで更新していませんでした。

  これについてですが、僕の見解を挙げておきます。

  そもそも、GWLの目的は、

>このライブラリはぐいぐいライブラリをラッピングし、OSASKにある
>「スロット指定」と「シグナル定義」を隠蔽します。
>
>この2つはWindowsの「ハンドル」とUNIXの「シグナル」に相当するもの
>ですがそれらよりもより低レベルな指定が出来るため非常に高度でわかり
>にくいと思います。

にあるわけです。

  まず、シグナル定義についてです。

  シグナル定義が初心者になじまない概念であることは僕も認めます。
しかしこれは更なる難解さや諸問題を解決するスマートな方法であると
僕は考えています。これを隠蔽することは不可能ではないと思いますが
著しく拡張性や汎用性が損なわれるとか、かえって難解になったりする
のではないかと思われます。

  したがって、GWLの主旨に沿うには、拡張性や汎用性を諦めて(=扱
えるウィンドウ数を最大4つまでに制限するとか(そうしてシグナルが
どのウィンドウに対する入力であるのかを固定してしまう)、シフトや
コントロールキーとの組み合わせ入力などの全てを諦めて)、限られた
目的にのみ特化するか、もしくはシグナル定義の意義を大いに評価して
、これを隠蔽することなく、定義作業を簡潔にする支援に徹するという
二択のうちのどちらかしかないと僕は考えます。

  次にスロット指定についてです。

  僕はスロットを困難な概念だとは思っていません。たとえば、F-BASI
Cでファイルをオープンしてアクセスする場合、

    OPEN "O", #1, "FILE.TXT"
    PRINT #1, "This is a test."
    CLOSE #1

などとやっていたと思います(OPEN文のパラメーターには自信がありま
せん。「AS」とかを記述しなければいけなかったような気もします。間
違っていてもとがめないでください・・・笑)。それが、C言語時代に
なって、

    FILE *fp = fopen("FILE.TXT", "w");
    fputs(fp, "This is a test\n");
    fclose(fp);

になりました。ファイルを指定するための番号を「こちらから指定する
」か「処理系・ライブラリ側から教えてもらう」の違いです。

  僕にとっては、BASIC方式はC言語方式に比べて優れているように思い
ます。なぜなら、変数を一つ不要にしているからです。UNIXでも下位ル
ーチンのopenでは、ファイル番号を直接指定するようですが。

  ぐいぐい00のスロットに難解な点があるとすれば、それは値が1飛び
ではなく16飛びになっていることくらいではないでしょうか。そしてそ
れを改善するだけなら、適当なマクロを書けば済みます。

  例:

#define gwl_opensoundtrack(mini_slot) \
    lib_opensoundtrack((mini_slot) << 4)

#define	gwl_controlfreq(mini_slot, freq) \
    lib_controlfreq((mini_slot) << 4, freq)

  ぐいぐい00やOSASK全体に貫かれている理念は、「リソースや情報を
識別するための番号や値は、システムから与えてもらうのではなく、ア
プリから指定するのだ」というものです。

  これは、システム側の負担が増えているのではないかと思われるかも
しれません。もしシステム側が値を決定してよければ、システムは自分
の管理の都合の良い番号を割り振ることができます。たとえば、

  タスクAには、ファイル管理番号1とファイル管理番号3
  タスクBには、ファイル管理番号2
  タスクCは、ファイルを使っていない
  タスクDには、ファイル管理番号4

こうやってグローバルな番号を容易に振ることができて、そして話がこ
れだけで済むなら、まことに楽なのは事実です。

  しかしタスクDにバグがあり、ファイル管理番号を間違って覚えてい
たらどうなるでしょう。そして、自分がオープンしたファイル番号は4
なのに、1を指定して入出力をしてしまえば、タスクDのバグはタスクA
を巻き込んでしまいます。・・・このようなことが起こりうるのは、OS
として失格です。

  これを避けるには、システム側がどの番号をどのタスクに伝えたのか
を管理し、必要に応じてチェックしなければいけません。・・・そして
この管理の負担と、アプリ側に自由な設定を許すための負担はほぼ同等
です。

  なお、lib_openwindow()やlib_opentextbox()は、fopen()のように値
を返すではないかとおっしゃる方がいるかもしれないので先回りしてお
きますが、それはAUTO_MALLOCを指定した場合の特別な挙動であり、そ
うしなければその値をアプリから自由に指定できるのです。

  もし可能なら、以上のような理念を理解した上で、初心者に対してど
のような仕様がもっともふさわしいのかを熟慮し、より高度な方法で不
便さを隠蔽していただけたらと思います。


  それでは。

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