Open salano-ym opened 5 months ago
休止時間の方はsetTimeout以外(requestIdleCallbackとか)も使えるようにPromiseを返す関数を渡すようにすると良いかも
休止時間の方はsetTimeout以外(requestIdleCallbackとか)も使えるようにPromiseを返す関数を渡すようにすると良いかも
利便性を考えると、数値だけでsetTimeoutの秒数を指定することもできると嬉しいです。 例えばinterpreterのオプションにするとして、
{
irqCallback: () => Promise<void>;
}
か
{
irqRate: number
}
のいずれかを指定できる(両方指定されるとエラー)という形がいいと思います。
easyよりsimpleのほうがいい気もしますが irqRateはステップ数の方だと思うので、そうするならirqSleepとか……?
あっすみません、休止時間のこと忘れてました
{
irqRate: number;
irqSleep: number;
}
でどうでしょうか?
easyよりsimpleのほうがいい気もしますが
私としては、使用頻度が高くなるであろう設定を簡易に出来るようにする、という目的に限っては、ある程度簡便を図るべきであると考えています。 そうでないものは容易に内輪ネタと化してしまうからです。
まあこのくらいはできていいかもですね。
コールバックもirqSleepプロパティにしてnumber | (() => Promise<void>)
型を受け付けると排他チェックが要らなくていいですかね
排他チェックがなくなる分、型チェックが増えるので性能としてはあまり変わらないような?
言葉の分かりやすさを考えるとirqSleep
とirqCallback
は別々にしたほうが良いように思います。
排他チェックとかの実行コストは全体から見ればほぼゼロなので性能のことは気にしていなくて、排他なプロパティーがあるとオプションの複雑さが増して良くないかなと思って提案しました。 同じ目的のものを簡単な方法で指定できるだけなので、一つのプロパティで済むならそのほうが良いかなと。
うーん、一つのプロパティが型によって2つの意味を持つのもそれはそれで複雑な気がしますが…
どちらでもいつ再開するかを指定していて同じ意味だと思っています。
数値での指定は() => new Promise(resolve => setTimeout(resolve, irqSleep))
のエイリアスなので。
どちらも一長一短ですが、休止にしか使用しないということであれば同じにする方が誤解が少ないような気がします。
うーんまあ確かに
一定ステップ毎に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