本当の問題は状態です。
関数型言語にはグローバルな状態はありません。ほとんどの産業上の問題は、小規模の一部の機能が実際にそれを必要としない場合(元帳の処理)でも、大規模な状態(元帳または一連のトランザクションをどのように表すか)を必要とします。
ただし、本質的にステートフルなVon-Neumanアーキテクチャマシンでコードを実行しています。したがって、私たちは実際に状態を取り除くことはしていません。関数型言語は、状態の複雑さを開発者から隠すだけです。これは、言語/コンパイラが舞台裏の状態を処理し、管理する必要があることを意味します。
したがって、関数型言語にはグローバルな状態はありませんが、それらの状態情報はパラメーターと結果として渡されます。
それでは、言語は感覚の背後にある状態を効率的に処理できるのでしょうか?特に、データサイズがアーキテクチャのサイズをはるかに超える場合。
ハードウェア側から見る
OSは、ここ数年でアドレス空間を視覚化するのに大いに役立ちました。そのため、アプリケーションは公式に心配する必要がありません。ただし、メモリの負荷が激しくなると、心配しないアプリケーションはハードウェアをスラッシングするトラップに陥ります(ハードウェアをスラッシングすると、プロセスのクロール速度が低下します)。
プログラマーは関数型言語の状態を直接制御できないため、これを処理するためにコンパイラーに依存する必要があり、これをうまく処理する関数型言語を見たことはありません。
コインの反対側では、ステートフルプログラマーが状態を直接制御できるため、メモリ不足の状態を補うことができます。私は実際にそうするのに十分賢いプログラマーをあまり見ませんでしたが。
産業側から見ると:
業界には、非効率的なステートフルプログラマがたくさんあります。
しかし、これらのプログラムの改善を長期にわたって測定するのは簡単です。開発者のチームに、プログラムが状態を処理する方法を改善することでコードを改善できる問題を投げかけます。
関数型プログラムの場合、プログラムを改善するツールを改善する必要があるため、改善を測定するのはより困難です(ここでは、プログラムの全体的な改善ではなく、アプリケーションが根本的な状態を効率的に処理する方法を検討しています)。
業界にとっては、コードの改善を測定する能力に帰着すると思います。
雇用の観点から
雇用できるスタットフルプログラマーがたくさんいます。関数型プログラマーを見つけるのは難しいです。したがって、業界が機能的なスタイルのプログラミングに切り替わった場合、基本的な需要と供給のモデルが作動しますが、それは望んでいることではありません(プログラマーはそれなりに高価です)。