関数型言語:それらが何であるか、それらがどこに向かっているのか

それが何であるかを正確に主張する人もいますが、関数型プログラミングは開発者を引き付け続けています。そして、最も人気のある3つの関数型言語(Clojure、F#、Scala)が改善のために利用されています。

関数型プログラミングは、一部の開発者にとって中核的な魅力を持っています。Scalaの創設者であるMartin Oderskyは、次のように述べています。しかし、関数型プログラミングはソフトウェアの効率を低下させると主張する人もいます。

関数型プログラミングには、新しい方法でプログラミングについて考える必要もあります、とMicrosoftの.NetのプログラムマネージャーでF#のスポークスマンであるDavidStephensは言います。抽象化が問題になる可能性があります。「コードをより抽象化する場合、ビットの操作から離れて明示的にループを通過する場合、これらの抽象化を理解するのに時間がかかる可能性があります。」

関数型言語とは正確には何ですか?

最も基本的な用語では、関数型プログラミングは計算を数学関数として扱うことです。最初から機能的であると請求された言語に加えて、JavaやC#などは、ラムダ式のサポートを追加することで、より機能的になりました。

しかし、関数型プログラミングの正確な定義を特定するのは難しい場合があります。Clojurefunブログは、関数型プログラミングを高階関数やラムダをサポートする言語で関数型スタイルを有効にするものとして定義するなど、正しくないと思われるいくつかの定義を引用しています。正しい定義は、関数と不変のデータを強調する言語であると書かれています。

しかし、Clojureブログの推奨される定義は必ずしも正しいとは限りません、と他の人は言います。「著者は、偶然にもClojureに最もよく合うものを選びます。当然のことながら、これはClojureのブログです」とScalaのOderskyは言います。「私には彼に近い解釈がありますが、同じではありません。」

Odersky氏によると、関数は入力を出力にマッピングするコードであり、それ以外の効果はありません。「これは、ここで使用している関数の数学的定義です。これらの関数は、たとえばCの関数と区別するために、「純粋」と呼ばれることもあります。」関数型言語は純粋関数を使用したプログラミングに重点を置いているため、簡単かつ強力に実行できます、とTypesafeJVMアプリケーション開発プラットフォームのプロバイダーであるTypesafeを設立したOderskyは言います。

関数型プログラミングは他のパラダイムと組み合わせることができると彼は述べています。「たとえば、関数型はオブジェクト指向と非常によく合います。Scalaはその意味で関数型言語です。ラムダがあるだけでは関数型言語にはならないことに同意します。必要ですが、十分ではありません。」

システム開発者CognitectのCTOでもあるClojure開発者のRichHickeyは、Clojureブログの主な論争に同意しています。「この記事は、一流以上の関数が関数型プログラミングのすべてではないことを正しく指摘しています。関数型プログラミングとは、プログラミングを数学のようにすることです」と彼は言います。つまり、関数型プログラミングの定義にはまださまざまなものが残っている、とHickey氏は言います。

MicrosoftのStephensは、機能機能が言語だけにとどまらないと考えています。「世界で最も人気のある関数型プログラミング言語はExcelです」と彼は言います。単純なExcelワークシートには、A1 X 2など、一連の値を含む列が含まれている場合があります。「これはA1の純粋関数であり、A1は変更​​されないため、既存のデータから値を計算しています。」

Microsoftの統合言語クエリ(Linq)テクノロジは、関数型プログラミングも提供します、と彼は言います。「現在、ほとんどすべてのプログラミング言語が関数型言語の機能を採用しています。」

Stephensは、関数型プログラミングにとって重要なものとして不変データを挙げています。並行性(複数のスレッドがデータを同時に操作するプログラム)も、不変のデータの恩恵を受けていると彼は述べています。「[F#]は他の言語の遺産に由来するため、機能第一言語と呼んでいます。」また、オブジェクト指向プログラミングをサポートし、C#とVisualBasicで動作しますと彼は言います。

ClojureのHickeyは、関数型言語の採用を、最近より大きな問題に取り組む必要のある開発者が直面するプレッシャーの高まりへの対応と見なしています。「そうするためには、プログラムの偶発的な複雑さを軽減する必要があります。現在、蔓延する状態と副作用がプログラムの複雑さとバグの主な原因であることが広く認識されています」とHickey氏は言います。「関数型でない言語で書かれたプログラムの状態の量を減らすことは可能ですが、関数型プログラミングを慣用的でデフォルトにする言語でそうすることは劇的に簡単で速いです。」

3つの上位関数型言語の次は

13歳のScalaはデータサイエンスの第一言語である、とScalaの創設者であるOderskyは言います。JVMでサポートされており、推定40万から50万のユーザーがいます。短期的な計画では、Java 8向けに最適化する必要があります。この場合、最新の標準Javaアップグレードからのバイトコード命令により、Scalaはより効率的なコードを生成できます。

長期的には、Scalaは、クリーンアップされた型システム、より安全なマクロ、およびより多くのプラットフォームサポートを取得し、LLVMコンパイラーのバックエンドを検討しています。ScalaをJavaScriptにコンパイルするためのScala.jsの使いやすさを改善するために、さらなる改善が計画されています。

同じくJVMをベースにした9歳のClojureは、金融、小売、ソフトウェア、エンターテインメントで使用されてきたとHickey氏は言います。「これは、トランザクション処理と分析、ビッグデータ、ネットワーク運用、予測分析、検索、セキュリティ、消費者向け製品など、さまざまなアプリケーション分野に適用されています。」

11歳のF#は、DonSymeによってMicrosoftResearchによって設立され、F#Foundationによって監督されています。幅広いアプリケーションで使用され、Linux、OS X、Android、iOS、Windows、およびブラウザーで実行されます。「私たちが現在取り組んでいるのは、.Net Coreで動作するようにすることです」と、.NetFrameworkのオープンソースのクロスプラットフォームモジュラーバージョンであるとStephens氏は言います。文字列を書きやすくする文字列補間は、設計図にあります。