2010-11-18 28 views
4

只有我可以使用新庫時,新語言纔有意思。所以我想知道我可以在.net中使用F#來使用哪些新庫。如果F#與ML/OCaml兼容,Ocaml庫將移植到F#或可以移植。我對信號處理/語音識別,.NET中的邏輯編程/ SLD解析庫感興趣。新工具箱:原始F#模塊或從OCaml移植

+0

「Calling Jon Harrop ...」:) :) – Benjol 2010-11-18 12:45:57

回答

11

我不認爲有大量ML/OCaml庫已移植到F#。 F#編程風格已經與人們在ML/OCaml中使用的風格大不相同,因此ML/OCaml庫對於F#程序員來說會感覺有些陌生。

然而,有些項目在F#和OCaml中交叉編譯。 F#編譯器本身曾經是這樣的,我相信來自MSR的Slayer是(或者是?)的另一個例子。但是,對於您提到的兩個域,我並不知道任何F#庫。

如果你有興趣在F#編譯OCaml的代碼,那麼這裏有幾件事情,可以幫助你:

  • 較大的語言限制時,移植OCaml的代碼到F#是F#不支持函子。
  • 一些標準OCaml的庫在FSharp.PowerPack.Compatibility.dll組件(其可以在F# PowerPack找到)
+1

OCAML的許多庫都是C項目的包裝器;我不確定這種範式如何適合F#/ .NET。任何見解? (我還想補充一點,關於從OCAML轉向F#的觀點; F#不包括在OCAML項目中經常使用的函子或多態變體)。 – nlucaroni 2010-11-18 17:58:31

11

F#包括從OCaml的某些端口,如SetMap集合實現。其他混凝土數據結構可以很容易地移植,如從Chris Okasaki's excellent monograph純粹功能的數據結構。我在OCaml和F#中描述了基於他的左堆here的堆排序。我發表了對F#here中幾個純粹功能堆的更全面的評論。但是,F#似乎沒有能力表達抽象數據結構(例如,通過隊列抽象出的可鏈表),因爲它缺少Okasaki使用如此熟練的高階模塊系統。我還在OCaml和F#中發佈了一些其他翻譯,如Burrows-Wheeler transform。 OCaml有很多很棒的庫,比如ocamlgraph,但它們往往很難或不可能直接翻譯,因爲F#缺少核心語言功能,如高階模塊,多態變體,宏等。

微軟是第一個F#採用者,當然,他們將TrueSkill ranking system(用於Halo 3和Bing AdCenter)及其第三方驅動程序驗證軟件從OCaml移動到F#。

Coherent PDF用於處理PDF文檔的命令行工具是在OCaml和F#中交叉編譯的少數幾個代碼庫之一。

我們將我們的Smoke Vector Graphics發動機和我們已停產的Presenta應用從OCaml翻譯成F#,現在以F# for Visualization的價格出售。由於語言之間的相似性,翻譯當然變得更容易,但它仍然需要幾天時間才能完成,我們不可能交叉編譯。

大多數從OCaml轉換到F#的代碼是商業的,因爲F#主要是商業語言,因此OCaml的商業用戶正在遷移到F#。開源F#可能會在F#本身最近發佈的OSS之後開始啓動,但它在早期還沒有完成。關於您的特定主題(例如信號處理),我不知道除了綁定到FFTW之外還有什麼建議,我在Visual F# 2010 for Technical Computing中描述過。