Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
salano-ym opened this issue May 14, 2024 · 12 comments

Comments

@salano-ym
Copy link
Member

一定ステップ毎にsleepを挟む仕組みがあって、現在はステップ数と休止時間は固定だが、ホストが設定できるようにしてもいいかもしれない?

const IRQ_RATE = 300;

if (this.stepCount % IRQ_RATE === IRQ_AT) await new Promise(resolve => setTimeout(resolve, 5));

@uzmoi
Copy link
Member

uzmoi commented Aug 4, 2024

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

@FineArchs
Copy link
Member

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

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

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

{
  irqRate: number
}

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

@uzmoi
Copy link
Member

uzmoi commented Aug 4, 2024

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

@FineArchs
Copy link
Member

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

{
  irqRate: number;
  irqSleep: number;
}

でどうでしょうか?

@FineArchs
Copy link
Member

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

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

@uzmoi
Copy link
Member

uzmoi commented Aug 5, 2024

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

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

@FineArchs
Copy link
Member

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

@uzmoi
Copy link
Member

uzmoi commented Aug 5, 2024

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

@FineArchs
Copy link
Member

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

@uzmoi
Copy link
Member

uzmoi commented Aug 7, 2024

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

@salano-ym
Copy link
Member Author

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

@FineArchs
Copy link
Member

うーんまあ確かに

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants