問題タブ [coroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
19 に答える
50873 参照

c++ - C++ でコルーチンをどのように実装しますか?

ポータブルにできるとは思えませんが、解決策はありますか? 代替スタックを作成し、関数エントリで SP、BP、および IP をリセットし、IP を保存して SP + BP を復元することで実行できると思います。デストラクタと例外の安全性は難しいように見えますが、解決可能です。

それは行われましたか?無理ですか?

0 投票する
47 に答える
2829514 参照

python - "yield" キーワードは何をしますか?

yieldPythonでのキーワードの使用は何ですか? それは何をするためのものか?

たとえば、私はこのコード1を理解しようとしています:

そして、これは呼び出し元です:

メソッド_get_child_candidatesが呼び出されるとどうなりますか? リストは返されますか? 単一の要素?また呼ばれますか?後続の通話はいつ停止しますか?


1. このコードは Jochen Schulz (jrschulz) によって書かれました。彼はメートル空間用の優れた Python ライブラリを作成しました。これは完全なソースへのリンクです: Module mspace
0 投票する
7 に答える
15407 参照

use-case - コルーチンのユースケースとは?

コルーチンの概念は非常に興味深いように思えますが、実際の生産的な環境で意味があるかどうかはわかりません。コルーチンの実装が他の方法よりもエレガント、シンプル、または効率的であるコルーチンのユースケースは何ですか?

0 投票する
13 に答える
83628 参照

concurrency - コルーチンとは何ですか?

コルーチンとは何ですか?それらは同時実行性とどのように関連していますか?

0 投票する
5 に答える
8426 参照

python - Pythonの「with」ブロック内から譲歩するのは安全ですか(そしてその理由)?

コルーチンとリソース獲得の組み合わせは、意図しない(または直感的でない)結果をもたらす可能性があるようです。

基本的な質問は、このようなものが機能するかどうかです。

それは何をしますか。(あなたはそれをテストすることができます!)

より深い懸念は、ブロックの最後でリソースが解放されることを保証する、withの代替となるはずであるということです。finallyコルーチンはブロック内から実行を一時停止および再開できますが、競合はどのように解決されますか?with

たとえば、コルーチンがまだ返されていないときに、コルーチンの内側と外側の両方で読み取り/書き込みを使用してファイルを開くと、次のようになります。

アップデート

前の例では書き込みロックされたファイルハンドルの競合を考えていましたが、ほとんどのOSはプロセスごとにファイルハンドルを割り当てるため、競合は発生しません。(例を指摘してくれた@Milesへの称賛はあまり意味がありませんでした。)これが私の修正された例で、実際のデッドロック状態を示しています。

0 投票する
3 に答える
33957 参照

python - コルーチンvs継続vsジェネレーター

コルーチンと継続およびジェネレーターの違いは何ですか?

0 投票する
5 に答える
2291 参照

serialization - コルーチンのシリアル化をサポートする言語

そのようなサポートは現在の言語には存在しないと思います。私がやりたいことは「ワークフローエンジン」で解決できると思います。しかし、私がワークフローで抱えている問題は、一般的に次のとおりです。

  1. 宣言型/冗長性と私は命令型のスタイルがはるかに簡潔だと思います
  2. ヘビー級、私はたくさんのシンプルで多様な小さなステートマシンを持っています

C#でイテレーターをシリアル化することを調査しましたが、それでは目的の場所に正確に到達できません。現在、 BooでDSLを作成することを検討していますが、コルーチンのような動作をBooに取り込み、シリアル化できるかどうかはわかりません。

これが私がやりたいことの限られた架空の例です。主な問題は、ルーチンのどの時点でも、ユーザー入力を取得する必要があるかもしれないということです。入力間の時間が非常に長くなる可能性があるため、サービスの状態をディスクにシリアル化する必要があります。

アップデート

私はCPythonで動作する「エンジン」を持っています。Pythonでのイテレータ/yieldサポートに便乗します。したがって、コードは次のようになります。

どこrollDiceで中断することができます。いくつかのユーザーアクションで。ただし、 CPythonはイテレータをシリアル化しません。

ゲームの状態全体を一連のコマンドとして定義できるため、コルーチンが開始された時点までゲームの状態をシリアル化し、次に残りのコマンドのリストをシリアル化します。したがって、保存/復元するには次のようになります。

現在の調査

私はまだこれが不十分だと思っています。結局、ほとんどすべてのメソッドで「yield」を使用する必要があります。メソッドを特別に装飾する必要はありません。また、シリアル化ではかなり失敗します。

関数型言語はメタプログラミング/DSL作成をよりよくサポートしているように見えるので、現在私は関数型ルートに行くことを調査しています。現在見ている

十分に強力なメタプログラミング機能があれば、状態ストレージメカニズムを自動化できることを期待しています。また、F#ルートを使用すると、イテレータのシリアル化に使用した「テクニック」/(ハック)に頼ることができると確信しています。

0 投票する
2 に答える
1702 参照

scheme - 工夫されたサンプル コードを探しています: 継続!

したがって、コミュニティ スキーム wikiLearn Scheme in Fixnum Daysのおかげで、少なくともある程度は継続を理解していると思います。

しかし、私はもっと練習をしたいと思っています。つまり、頭の中で作業できるサンプルコードがもっと欲しいです (できれば工夫されているので、概念から気を散らす無関係なものはありません)。

具体的には、再開やコルーチンを使用してループなどを終了するのではなく、継続を使用してより多くの問題に取り組みたいと思います (これはかなり簡単です)。

とにかく、上でリンクしたもの以外の優れたチュートリアルを知っている場合、またはあなたが書いたものを投稿して良い演習になる場合は、非常に感謝しています!

0 投票する
9 に答える
58677 参照

multithreading - 糸と繊維の違いは何ですか?

糸と繊維の違いは何ですか?ruby のファイバーについて聞いたことがありますし、他の言語でも利用できると聞いたことがあります。スレッドとファイバーの違いを簡単な言葉で説明してもらえますか?

0 投票する
5 に答える
3860 参照

python - ゲームデザインのコルーチン?

コルーチンはゲームを構造化するための良い方法だと聞きましたが(たとえば、PEP 342:「コルーチンはシミュレーションやゲームなどの多くのアルゴリズムを表現する自然な方法です...」)、コルーチンをラップするのに苦労しています。これが実際にどのように行われるかを考えてみましょう。

この記事から、コルーチンはスケジューラーを使用して相互に遷移するステートマシンの状態を表すことができることがわかりますが、これが複数のプレーヤーからの動きに基づいてゲームの状態が変化するゲームにどのように適用されるかはわかりません。

コルーチンを使用して作成されたゲームの簡単な例はありますか?または、誰かがそれがどのように行われるかについてのスケッチを提供できますか?