パスワードを忘れた? アカウント作成
451271 journal

mishimaの日記: イベントディスパッチその2

日記 by mishima

いつの間にやらタレコまれていたり、といろいろあったが、
その結果他の人の意見を読むことができたので有益であった。

で、まず最初に訂正。先日「今Lispによく似てると気付いた」と書いたが、
2ヶ月ほど前に同様のことを日記に書いていたのを忘れていた。
忘れっぽいな俺。

そして本題。イベントディスパッチの問題は全然解決していない。
今重要だと考えている点を書き出そう。

1. xgsh 以外の言語(つまり子プロセス)でのイベント処理がかんたんであること
      (つまり、標準入出力やコマンド呼び出しで何もかもできなければならない)
2. 繰り返し使うコマンドがある場合、
      プロセス生成のオーバヘッドをできる限り抑えること
3. 複数の子プロセスが並列に動けるようこと

例えば、ファイル内容をテキストとして表示する xgsh で動くファイラを考えよう。

        #! /usr/local/bin/xgsh
        _import_ /home/mishima/.xgsh/libexec xgsh/

        xgsh/openwindow ROOT --size=640x480 --layout=flow
        xgsh/openmenu ROOT/MENU --size=640x24 --src=file:hoge/menu.txt
        xgsh/opentree ROOT/LIST --size=160x456
        xgsh/openeditor ROOT/VIEW --size=480x456

        find . | xgsh/readtree ROOT/LIST

        _setsource_ SIMPLE_EVENT xgsh/simple_event_reader

        _while_ @SIMPLE_EVENT :

                _switch_ $_ :

                        _case_ "ROOT/MENNU:Quit" :
                                _last_;

                        _case_ "ROOT/LIST:Select:(.*)" : #
                                echo "file:$1" | xgsh/readeditor ROOT/VIEW

        xgsh/closeeditor ROOT/VIEW
        xgsh/closetree ROOT/LIST
        xgsh/closemenu ROOT/MENU
        xgsh/closewindow ROOT

        _exit_ 0

こんなものか。
xgsh が起動したと同時に、
本物の標準入出力は別のファイルデスクリプタにコピーされて、
xgsh の標準入出力はバックエンドの GUI マネージャと繋がる。

_import_ は特定のディレクトリに置いてあるコマンドを指定した名前空間へ読み込む。

xgsh/openwindow ROOT は、
標準出力を通してウィンドウ生成イベントを出力し、
標準入力から結果が成功したかどうかを読み込むだけの処理。

まずこんなものをたたき台にして、いろいろと穴をあげつらってみよう。

    a. _ を予約語につけるのはウザい。まあそれはいいや。

    b. xgsh/openmenu コマンド。menu を作るぞー、というイベントを送った後、
          標準入力から結果を読もうとするのだが、そのときウィンドウ ROOT
          のイベント(WindowCloseとか)が送られてきたらどうするの?
          イベントが捨てられちゃうじゃん。

    c. もひとつ、別のイベントソース(例えば…ネットワークとか)が
          加わったとき、どうやってイベントを待てばいい?

    d. 逆に、複数の子プロセスに同じイベントを分配したいときは?

で、b. が先日からずっと考えてる問題なのだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...