1

js_of_ocamlを使用してOcamlからJavascriptにコンパイルされたコードがあります。さて、Web Workerスレッドで動作するようにそのコードを移動すると、私はStackOverflowを取得し始めました。なぜ `enable-javascript-harmony`がWebワーカーのStackOverflowを防ぐのですか?

しかし、メインスレッドでコードを実行した場合、またはchrome://flags/#enable-javascript-harmonyをワーカーバージョンで有効にすると、コードは正常に実行されます。

何が起こっているのでしょうか? enable-harmonyフラグは正確に何をしていますか?

私はテールコールの最適化を有効にする可能性があると推測しますが、まだ有効になっていないのは私にとっては奇妙なことです。また、テール・コールだけでは、メイン・スレッドで実行された場合にコードがオーバーフローしない理由が説明されていません。

実際のコードの例については、下のリンクを参照してください。最初のリンクでは、コードは、第二に、コードの主要な部分が労働者に委任され、メインスレッドで実行されます:

我々が到達optimize_0plus_sound補題上の最初の誘導は、スタックオーバーフローがワーカーバージョンで発生します。メインスレッドでCoqを実行しているバージョンはまったく問題ありません。奇妙な。

ありがとうございます!

答えて

1

これは実際にテールコール除去です。これはES6の機能であり、まだV8ではやや実験的な機能なので、現時点ではフラグによってのみ有効になっています。

私は、フラグを変更した後にChromeを再起動しなかったため、ワーカーには影響がないと思われます。

+0

確認していただきありがとうございますAndreas!しかし、私は別のブラウザを使用しています。実際には、ワーカーと非ワーカーの間の動作は異なるようです。私はより詳細なテストを行う必要があります。 – ejgallego

+0

実際、私はワーカーとメインスレッドとの間のさまざまな動作を確認します。質問は更新されました。 – ejgallego

関連する問題