aiscript-dev / aiscript

🔋 A lightweight scripting language runing on JavaScript
https://aiscript-dev.github.io/aiscript/
MIT License
186 stars 33 forks source link

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

Open salano-ym opened 5 months ago

salano-ym commented 5 months ago

一定ステップ毎に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

uzmoi commented 2 months ago

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

FineArchs commented 2 months ago

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

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

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

{
  irqRate: number
}

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

uzmoi commented 2 months ago

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

FineArchs commented 2 months ago

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

{
  irqRate: number;
  irqSleep: number;
}

でどうでしょうか?

FineArchs commented 2 months ago

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

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

uzmoi commented 2 months ago

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

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

FineArchs commented 2 months ago

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

uzmoi commented 2 months ago

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

FineArchs commented 2 months ago

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

uzmoi commented 2 months ago

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

salano-ym commented 2 months ago

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

FineArchs commented 2 months ago

うーんまあ確かに