関数型プログラミングの初心者向けの質問の種類:
私はリッチヒッキーの講演の筆記録をいくつか読んでいますが、彼の有名な講演のいくつかでは、関数を相互に呼び出す代わりにキューを使用することをお勧めしています。(例:デザイン、構成、パフォーマンス、シンプルで簡単)
私はこれを多くの点で完全に理解していません:
彼はデータをキューに入れ、各機能にそれを使用させることについて話しているのですか?したがって、関数Aが関数Bを呼び出して独自の計算を実行する代わりに、関数Bが出力をキューにスラップし、関数Aがそれを取得するようにしますか?または、代わりに、関数をキューに置き、その後それらをデータに順次適用することについて話しているのです(確かにそうではありません。大規模な変更が含まれるためです。そして、マルチアリティ関数のキューの乗算や、ツリーのようなものですか? )
どうすれば物事が簡単になりますか?私の直感は、キューが一種の状態になるため、この戦略はより複雑になると思います。そして、「他の関数がスキューしてデータをキューの上に置くとどうなるか」を心配する必要があります。
SOの実装に関する質問への1つの答えは、アイデアがさまざまなキューの束を作成していることを示唆しています。したがって、各関数はその出力を独自のキュー(??)に入れます。しかし、それも私を混乱させます。なぜなら、関数を一度実行している場合、その出力を取得し、その名前を(var、atom、big inハッシュテーブルなど)。対照的に、関数が複数回実行されていて、その出力をキューに貼り付けている場合は、再び自分に状態を課しているため、すべてが呼び出される順序を心配する必要があり、ダウンストリーム関数は純粋ではなくなります。等
明らかに私はここでポイントを理解していません。誰かが少し説明できますか?
Job
オブジェクトにパックし、それをキューにプッシュして、そのキューで1つ以上のワーカースレッドを動作させます。次にJob
、はJob
完了時にさらにsをキューにディスパッチします。その概念では、戻り値はコールバックに置き換えられます。コールスタックがないためデバッグと検証を行うのは悪夢であり、同じ理由で効率的で柔軟です。