aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

インタプリタの定期休止の時間とステップ数をホストが指定できるようにする

Open salano-ym opened this issue 1 year ago • 12 comments

一定ステップ毎にsleepを挟む仕組みがあって、現在はステップ数と休止時間は固定だが、ホストが設定できるようにしてもいいかもしれない? https://github.com/aiscript-dev/aiscript/blob/9e618049b5753b26d7527ee736dff10d65289b18/src/interpreter/index.ts#L16 https://github.com/aiscript-dev/aiscript/blob/9e618049b5753b26d7527ee736dff10d65289b18/src/interpreter/index.ts#L253

salano-ym avatar May 14 '24 06:05 salano-ym

休止時間の方はsetTimeout以外(requestIdleCallbackとか)も使えるようにPromiseを返す関数を渡すようにすると良いかも

uzmoi avatar Aug 04 '24 04:08 uzmoi

休止時間の方はsetTimeout以外(requestIdleCallbackとか)も使えるようにPromiseを返す関数を渡すようにすると良いかも

利便性を考えると、数値だけでsetTimeoutの秒数を指定することもできると嬉しいです。 例えばinterpreterのオプションにするとして、

{
  irqCallback: () => Promise<void>;
}

{
  irqRate: number
}

のいずれかを指定できる(両方指定されるとエラー)という形がいいと思います。

FineArchs avatar Aug 04 '24 07:08 FineArchs

easyよりsimpleのほうがいい気もしますが irqRateはステップ数の方だと思うので、そうするならirqSleepとか……?

uzmoi avatar Aug 04 '24 14:08 uzmoi

あっすみません、休止時間のこと忘れてました

{
  irqRate: number;
  irqSleep: number;
}

でどうでしょうか?

FineArchs avatar Aug 04 '24 23:08 FineArchs

easyよりsimpleのほうがいい気もしますが

私としては、使用頻度が高くなるであろう設定を簡易に出来るようにする、という目的に限っては、ある程度簡便を図るべきであると考えています。 そうでないものは容易に内輪ネタと化してしまうからです。

FineArchs avatar Aug 04 '24 23:08 FineArchs

まあこのくらいはできていいかもですね。

コールバックもirqSleepプロパティにしてnumber | (() => Promise<void>)型を受け付けると排他チェックが要らなくていいですかね

uzmoi avatar Aug 05 '24 03:08 uzmoi

排他チェックがなくなる分、型チェックが増えるので性能としてはあまり変わらないような? 言葉の分かりやすさを考えるとirqSleepirqCallbackは別々にしたほうが良いように思います。

FineArchs avatar Aug 05 '24 09:08 FineArchs

排他チェックとかの実行コストは全体から見ればほぼゼロなので性能のことは気にしていなくて、排他なプロパティーがあるとオプションの複雑さが増して良くないかなと思って提案しました。 同じ目的のものを簡単な方法で指定できるだけなので、一つのプロパティで済むならそのほうが良いかなと。

uzmoi avatar Aug 05 '24 14:08 uzmoi

うーん、一つのプロパティが型によって2つの意味を持つのもそれはそれで複雑な気がしますが…

FineArchs avatar Aug 06 '24 11:08 FineArchs

どちらでもいつ再開するかを指定していて同じ意味だと思っています。 数値での指定は() => new Promise(resolve => setTimeout(resolve, irqSleep))のエイリアスなので。

uzmoi avatar Aug 07 '24 15:08 uzmoi

どちらも一長一短ですが、休止にしか使用しないということであれば同じにする方が誤解が少ないような気がします。

salano-ym avatar Aug 07 '24 18:08 salano-ym

うーんまあ確かに

FineArchs avatar Aug 08 '24 10:08 FineArchs