F# を使用して関数型プログラミングを学習する最初の一歩を踏み出しましたが、Forward Pipe (|>) 演算子と Forward Composition (>>) 演算子に出くわしました。最初は、最終的な実行コードに影響を与えるのではなく、単なる砂糖だと思っていました (パイプが型推論に役立つことは知っていますが)。
しかし、私はこの SO 記事に出くわしました: 関数型プログラミングにおける「ポイントフリー」スタイルの利点と欠点は何ですか? これには2つの興味深い有益な答えがあります(物事を単純化する代わりに、「ポイントフリー」または「ポイントレス」スタイルを取り巻くワームの缶全体を開いた)これら(および他の読み物)からの私の持ち帰りは、ポイントフリーですが議論されている分野です。ランバと同様に、ポイントフリー スタイルは、用途に応じて、コードを理解しやすくしたり、はるかに難しくしたりできます。意味のある名前を付けるのに役立ちます。
しかし、私の質問は最初の回答に対するコメントに関するものです。
「コンポジションは、パイプライン処理のように中間値を生成する必要がないことをコンパイラーに明らかにすることで、GC の負荷を軽減する可能性があるように思えます。いわゆる「森林破壊」の問題をより扱いやすくするのに役立ちます。」
ガッシュは次のように答えます。
「コンパイルの改善に関する部分はまったく真実ではありません。ほとんどの言語では、ポイントフリー スタイルは実際にパフォーマンスを低下させます。Haskell が最適化に大きく依存しているのは、これらのコストを耐えられるものにする唯一の方法だからです。せいぜい、これらのコンビネータがインライン化され、同等の意味のあるバージョンが得られます。」</p>
誰でもパフォーマンスへの影響を拡大できますか? (一般的に、特に F# の場合) 私は、それが記述スタイルのものであり、コンパイラが両方のイディオムを同等のコードに分解すると想定していました。