21 ふりかえり

F# の起源と初期の歴史を語る際に、1990年代半ばに産業界を巻き込んだJavaとオブジェクト指向プログラミングの波、そしてJVMと.NETの台頭に対する、 強く型付けされた関数型プログラミングを経験した人々による「反応」の1つとして位置づけました。 この観点から、関数型言語をどのように提供するかを変えることに先駆的だったのがF# でした。 F# とScalaは、JVMや.NETなどの産業界標準の仮想マシン基盤を想定して明示的に設計および実装された最初の言語です。 後になって考えれば、この決定は良いものでした。 そしてその後Clojure、Nemerle、KotlinとSwift(Swiftは基盤としてObjective-Cランタイムをターゲットにしており、言語設計にも影響が及んでいますが)を含む多くの言語が続きました。 最近の言語の波は、JavaScriptを基盤としています(例:Elm、TypeScript、PureScript)。 このアプローチは今や非常に一般的になり、新しい言語の取り組みにおいて産業界標準となっています。

プログラミング言語は多くの目的に使われるようになり、人々がF# を使って行った多くの魅力的なことを公平に評価することは不可能です。 FSSFの初期の作業の重要な側面は、利用者の声を通してF# の有効性についての「社会的実証」を収集し伝達することでした[FSSF Contributors 2020]。 しかしながら、3つの用途は特に印象的です。 まず、LIQ𝑈𝑖|⟩( "Liquid" )の実装にF# が使われました。 これはF# の量子シミュレーターで、Dave WeckerとMicrosoft Quantum Computingの手によるものです[Wecker 2019]。 次に、F# とRhinoceros 3Dとを組み合わせて使うことで、Louvre Abu Dhabi Domeの外装の製造に使用されるデジタル3Dモデルが構築されました。その写真を図8に示します。 第3に、F# はJet.comで使用される主要言語です。 Jet.comは、その後Walmartが30億ドル以上の評価額で買収したスタートアップ企業で、Azureクラウドプラットフォームを使用して構築された最初の「ユニコーン」です。 これらだけでも、強く型付けされた関数型プログラミングの成功は1998年の規模を超えます。

図8. The Louvre Abu Dhabi -- 屋根を製造するためのデジタル3DモデルにF# が使用されました。(権利者: Wikiemirati, Wikimedia, 2018年4月29日, CC BY-SA 4.0ライセンス, トリミング加工済)

2007年頃から、強く型付けされた関数型プログラミングは、無名の存在からプログラミングの中心的なパラダイムへと移行しました。 C# 、Java、C++ 、Scala、Kotlin、Swift、Rust、およびTypeScriptには、すべて強く型付けされた関数型プログラミングの要素が含まれています。 そしてAppleの幹部らは、2014年のSwiftのローンチ時にパターンマッチング、ジェネリクス、オプション型、型推論、タプル、クロージャーといった関数型の機能を称賛しましたが、 それは2005年だったら考えられないことでした[Apple 2014]。 Haskell、F# 、OCamlはいずれも普及してきており、そしてElmやReasonMLのような新参もまた採用が進んでいます。

この変化の原因は何だったのでしょうか? 本稿ではいくつかの要因について説明しました -- ウィジェットベースのGUIプログラミングが相対的に減少し、それに対応してWebプログラミング、 クラウドコンピューティング、マルチコアプログラミング、およびスケーラブルデータ処理などが増加しましたが、それらのすべてが関数型プログラミングに適しています。 JavaScriptの重要性の高まりもまた確実に関連性があります: 型はありませんが、JavaScriptは多くの関数的な特徴を持っています。 さらに、ScalaとF# が成熟し、コンピューティング産業界の中心でサポートを受けるようになったころに移行が始まったようにも思われることは注目に値します。 Swift、ReasonML、TypeScript、Elmなどの最近の参入者は多くの課題に直面していますが、 それらの課題の中には、強く型付けされた関数型プログラミングについて産業界の認識が足りないというものはもうありません。 私たちは1997年以来長い道のりを歩んできました。 そしてWadlerの「なぜ誰も関数型プログラミングを使わないのか」という質問は、短命だった疑問のひとつとして歴史の中に埋もれていったのです。


インデックスへ戻る


Last Update: 2021-09-25 19:00:12