BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Don Syme、.Net FringeでF#の設計原則を語る

Don Syme、.Net FringeでF#の設計原則を語る

ブックマーク

原文(投稿日:2016/09/13)へのリンク

F#の生みの親であるDon Symeが、F#の現況評価について.Net Fringe 2016で示した。氏はF#が持つ二重性、すなわちオブジェクト指向言語のためのランタイム上に開発された関数型言語であることについてもコメントした。

F#は2010年にオープンソースライセンスの元公開された。F#は.NETの道に先鞭をつけ、C#と.NETは2015年にオープンソースとなった。F#をオープンソースにしたことは主として信頼感を向上させるためだった。当時においても、開発者や企業に真剣に取り組んでもらうためには、プログラミング言語はオープンソースでなければならなかった。

新しい言語を.NETに持ち込むには、長年にわたる取り組みがあった。関数型言語はそれぞれ孤立していて、独自のVM上で動作するものだった。相互運用のための標準(C呼び出し、COM、CORBA、XML)が、言語自体の統合を難しくしていた。

F#が選択したアプローチは、すでに広く採用されたランタイムを利用し、妥協せざるを得なければ妥協するというものだ。F#言語は徹底した相互運用性を念頭に置いてデザインされている。このアプローチはScalaやSwiftのような新しい言語でもしばしば採用されるものだ。

F#はオブジェクトを受け入れ、式を基本とする静的型付き関数型言語にうまく適合するようにしている。F#は関数型言語でありながらクラスや抽象クラスやインターフェースなどをサポートする。

// クラス定義
type Vector2D (dx:double, dy:double) =
    let d2 = dx*dx + dy*dy // オブジェクト内部利用
    // 公開プロパティ
    member v.DX = dx 
    member v.DY = dy
    member v.Lenght = sqrt d2
    member v.Scale(k) = Vector2D (dx * k, dy * k) // 公開メソッド

クラスだけでなくインターフェースや抽象クラスもサポートされる。特筆すべき追加機能の一つはオブジェクト式というもので、匿名のクラスを定義できるものだ。

type IMathExample =
    // 抽象メソッド
    abstract member Add: int -> int -> int

    // 抽象イミュータブルプロパティ
    abstract member Pi : float

// オブジェクト式によるインターフェース実装
let obj = 
  { new IMathExample with
    member this.Add x y = x + y
    member this.Pi = 3.14 }

F#はいくつかの方向に進化中である。Syme氏は現在の概況を述べた。

  • オープン性、クロスプラットフォーム、中立、独立
  • F#言語は貢献(コントリビューション)を受け入れる
  • F#プロジェクトを監督する非営利団体、F#ソフトウェアファウンデーション
  • Xamarinを通じたモバイルのサポートとツール提供
  • MicrosoftのVisual F# toolsによるWindowsとAzureのサポート提供
  • 多くのF#ツールが利用しているF#コンパイラーサービス
  • F# 4.1が進行中

Syme氏は言語の独立性について語る中で新しい単語を定義した。ミーム独立性(memetic independence)というもので、あるテクノロジーについて、別の技術や団体や既得権から独立したアイディアとして定義し広められる能力を指す。F#がMicrosoftから多大な貢献を受けていることはもちろん認めざるを得ないが、それでもF#はミーム独立性を達成している。逆の例としては、Visual Basicはその基準を満たせないだろう。Microsoftに完全に依存しているためである。

この記事に星をつける

おすすめ度
スタイル

BT