2019-12-22-01-fistのguile拡張からREPL機能を除去するかも - project-enigma

2019-12-22-01-fistのguile拡張からREPL機能を除去するかも

>> Site top >> weblog >> 月別アーカイブ >> 2019年12月のlog >> 2019-12-22-01-fistのguile拡張からREPL機能を除去するかも

最終更新日付:2019/12/22 01:00:00


fistのguile拡張からREPL機能を除去するかも

2019 年 12 月 22 日

いや、これ絶対にないと困るんだけど、機能として提供するのが微妙と判断せざるを得ないかな‥‥‥という話。まだ実際に除去したわけではないのだけど、おそらくは今後そうすることになる。

何が微妙かというと、fist の guile コマンドが提供する REPL もまたプロンプトを表示してシェルのように振る舞うため、使っているうちに過剰な期待をしてしまうのが問題なのだ。fist のインターフェースは、シェルのようにプロンプトを表示して入力を待機してはいるが、裏ではイベントの発生を監視し続けており、アラームの着火や編集セッションの終了などを検知すると各種の反応を起こすようになっている。編集セッションの終了なら、更新データをチェックしてデータとして取り込んだりする。実際にデータの更新が発生すれば、オートセーブなんかも実行する。記憶が間違っていなければ、そのインターバルは 0.1 秒だ。1 秒に 10回、それらのイベントをチェックしている。だから、プロンプトが出ている状態でもアラームなどの割込みに反応できるのだ。

一方で、guile コマンドが提供する REPL 機能はあくまで「コマンドの実行中」であり、コマンドとして終了するまでは前述のイベントチェックは一切行なわれない。fist からみれば「異常に時間がかかるコマンド」でしかないワケだ。その意味でも guile の REPL は fist が提供するプロンプトの代わりになるものではないし、代わりになることはできない。自分でそのようにデザインして使っているにもかかわらず、自分でそれを忘れてしまうことが何度もあって、地味に問題になっていた。実害が発生することはほとんどないにせよ、実際に問題になるシナリオは存在するのだ。

例えば、編集セッションが存在する状態で guile の REPL を起動し、そのまま編集セッションを終了させたとしよう。guile コマンドの実行中だから、それが終了するまでは編集セッション終了の後処理は実行されない。つまり、fist が抱えているデータは更新されないことになる。その状態のまま同じデータを、今度は guile のコマンドから参照すれば、編集前のデータにアクセスすることになるだろう。実際には、編集セッションが完全に終了はしていない状態なので、「そのデータは編集中だぜ」などの警告が表示されるかもしれない。いずれにせよ、混乱をきたすことは間違いない。

まだ結論は出ていないのだけれど、おそらくは guile コマンドから REPL 機能を除去することになると思う。もちろん REPL は必要なのだけれど、guile コマンドからスクリプトを実行できる機能さえあれば、「REPLを提供するスクリプト」を用意すれば良い話だからだ。それが何の解決になるのかという話はさておき、ひとまずはそういう方向で考えている。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : fist

 

 


Copyright(C) 2005-2020 project-enigma.
Generated by CL-PREFAB.