1 序章

F# プログラミング言語の歴史は、1970年代から現在に至るまで続く物語です。 1970年代初頭、Robin Milnerと彼の同僚であるLockwood MorrisとMalcolm Neweyの頭の中に、 構造化情報の操作に適した、簡潔で完全に型推論される関数型プログラミング言語のアイディアが生まれました[Gordon 2000]。 LISPの伝統に基づいて(そして実際にその実装手段としてLISPを使用して)、この言語はML -- Meta Language -- になり、 そしてそれが、Edinburgh ML、Miranda、Haskell、Standard ML、OCaml、Elm、ReasonML、およびPureScriptを含む 「強く型付けされた関数型プログラミング言語」の伝統の根底にあります。 F# はこの系統の言語の一つです。

Standard MLの歴史は他の場所で語られています[MacQueen 2015]。 ML系言語はしばしば形式主義に関連づけられますが、このテーマは本稿の後半で検討します。 しかし、Milnerと共同作業者の最大の関心事は、当初から実用的なユーザビリティでした。 このグループはある具体的な目的のために独自の言語が必要だったのです: それは、LCFと呼ばれる定理証明システムの証明規則と変換(「戦術」)を、当時はPDP10マシン上で、簡潔かつ正確にプログラムするためでした。 実用目的の選択として、可変状態(証明状態を対話型システムに格納できるようにする)と 型推論システム(後にHindley-MilnerまたはDamas-Milner型推論と呼ばれる)を含めることにしました。 それによって、派生戦術のコードを簡潔かつ自動的に総称化できました。 OCaml[Leroy 2014]を含む後のML方言でも、同じような実用主義のテーマが見られました。 そのテーマはOCaml C外部関数インターフェース(FFI)のように、言語設計とツールの両方で確認できます。

話題を今日に至るところまで進めていくと、1970年代に由来する重要なアイディアがF# 言語設計の中核を成し、日常の言語使用体験の中心となっています。 すべてのMLファミリー言語と同様に:

  • F# でサポートされている中心的なパラダイムは、引き続き強く型付けされた関数型プログラミングです。
  • F# の中心的な活動は、型 (type X) と関数 (let f x = …) の定義にあり、これらの宣言は型推論され、自動的に総称化されます。
  • F# は、プログラミング自体の詳細ではなく、扱われるドメインに焦点が置かれるプログラミングのモードをサポートすることを引き続き目的としています。

今日、「ドメイン駆動設計」に対するF# の長所を称賛する本が出版されています[Wlaschin 2018]。 その長所は、「ドメイン」がLCF論理の用語と定理の象徴的な表現であったMLの初期の役割から、今も取り除かれていません。 MLの「精神」はF# でもしっかり息づいています。そのことはいつも意図されてきたことです。

1970年代から今日までは、コンピューティング業界の大きな変化の時代をまたいでいます: 私たちはPDP-10からクラウドシステムへ、パンチカードから携帯電話へ、ラインエディターからツールが豊富なIDEへ、 小容量ストレージから大容量ストレージへ、ネットワークなしからユビキタスネットワークへと移行してきました。 本稿では、F# がどのように開発されたか、このことが起きた業界的学術的な背景、言語への直接的な影響、およびその独特の貢献について説明します。 この物語は、プログラミング言語設計における他の多くの歴史と交差しています。 そこでは、関数型プログラミング、オブジェクト指向プログラミング、型システム、ランタイム設計、 オペレーティングシステム、およびオープンソースソフトウェアの歴史が複雑に絡まりあっていますが、 中でも、1990年代初頭の「オブジェクト指向の津波」に対するいくつかの反応が、F# の起源の1つとして強調されています。 物語は必然的に不完全であり、主に筆者である言語設計者の個人的な観点から語られていることをお詫び申し上げます。 参考文献が提供されていない場合、本文は私の思い出に基づいて原資料として提供されています。1

私は、プログラミング言語のMLファミリーの基本的な考え方、つまり型安全で、簡潔で、正確で、ドメイン指向の関数型プログラミングから始めました。 私の観点からは、この考えはこの変化の時代を通して「強く、真実でありつづけた」と考えています。 それが頑固性によるものであるか、一貫性によるものであるか、それとも偶然によるものであるかは、読者に評価をお任せします。


インデックスへ戻る


  1. F#とML系言語に関する追加の歴史的資料が、Rachel Blasucciによって収集・発表されています。[Blasucci 2016]を参照。 


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