2012-02-15 87 views
8

我在想,如果有的F#代碼的自動轉換到C#代碼,在實踐中行之有效。原因是我們在F#中有一些相當的邏輯,我們希望在Mono中使用Android,MonocMac,MonoTouch ...來爲每個平臺創建一個應用程序。由於那些不直接支持F#,如果我們可以繼續編程F#中的邏輯並使用C#和這些工具執行GUI部分,那麼它會很好。自動F#到C#編譯

任何人都知道的東西?謝謝。

+2

不直接支持F#,但F#DLL的EXE文件,並應與這些平臺的工作了。你有沒有嘗試過? – 2012-02-15 13:22:18

回答

5

同時支持F#和C#可以做任何.NET反編譯。

例如: Cecil.DecompilerILSpy

Steve Gilham有關於使用Cecil.DecompilerILSpy以及其他一些關於F#和C#代碼之間互操作性的博客文章反編譯F#到C#的一些好文章。這些文章可能對您有所幫助。

通常情況下,我只當我不知道發生了什麼在F#代碼中,當反編譯C#這將是更明確的打算上使用ILSpy。將F#代碼編譯爲單獨的dll並將其用於C#代碼是最好的方法。

+0

實踐中沒有任何問題嗎? F#是一個非常節省時間的工具,如果我們在後續的過程中必須調整一些東西,那就好,只要它們不是令人頭痛的問題......謝謝。 – 2012-02-15 11:47:50

+4

由ILSpy生成的C#代碼不太可能編譯,因爲任何使用F#中的閉包都會生成名稱不是有效的C#的內部類。 – Robert 2012-02-15 11:54:10

6

爲什麼你需要翻譯代碼?一個編譯的託管二進制文件應該與Mono很好地配合只需將其添加到該項目。

您可以使用像ILSpy這樣的工具將您的代碼反編譯爲另一種語言,但這並沒有真正改變太多 - 這就是將不同語言編譯爲.NET CIL的重點。

+0

skolima,你確定你可以添加一個二進制文件到一個MonoTouch項目並且運行正常嗎?請記住,這些框架具有單聲道本身的不同侷限性。 – 2012-02-15 11:46:07

+3

是的,我看過一個演示,其中F#二進制文件通過單聲道在iPhone上運行。有一些限制,基本上你需要能夠靜態地解決所有的問題,但是你可以用C#和F#來打它們。限制是文件在這裏:http://docs.xamarin.com/ios/about/limitations – Robert 2012-02-15 11:50:02

+0

@Robert,我會嘗試尋找該演示,它會很好。關於侷限性,我認爲問題在於F#本質上更難以靜態解決所有問題。那麼請看看那些情況。非常感謝,非常有幫助。 – 2012-02-15 12:25:13

4

從理論上講,你應該能夠運行的MonoTouch和Mono的F#代碼爲Android。在實踐中...事情更加複雜。 :-)

的MonoTouch和Mono爲Android提供與桌面.NET兼容自己的基類庫(他們主要的Silverlight的一個超集)。爲了讓您的F#代碼在MonoTouch和Mono for Android下運行,您必須首先針對相應的程序集編譯您的F#代碼。

此外,您需要刪除FSharp.Core.dll(甚至有可能?)或端口FSharp.Core.dll上的所有依賴關係,以便它可以針對Android組件的等效MonoTouch和Mono執行。我確信這是可能的,但我不知道它是否已經完成,或者這將是多麼容易。

一旦您刪除或完成了FSharp.Core.dll及相關的依賴關係,您應該可以將所有必需的程序集(您的F#程序集和依賴關係)添加到項目並運行。

3

只是--standalone編譯F#庫(|構建|其他標誌|屬性--standalone),它會合並FSharp.Core.dll到你的庫。

4

剛剛發現由F#這些博客文章和萬物單人:MonoTouch & F# P IMonoTouch & F# P II

+1

感謝您提供幫助並改進答案。除此之外,Miguel de Icaza評論說他們正在努力將F#帶到Xamarin(http://news.ycombinator.com/item?id=5251413),所以這是個好消息,並且會把F#放在一個完全不同的層面上。 – 2013-03-02 12:01:40

+0

@JacoboPolavieja幾個月前,添加了一個F#MonoGame模板。所以就是這樣。 – Jwosty 2013-12-14 02:25:43

+3

由於Xamarin現在支持F#,所以我們很高興看到我們可以在任何地方都可以使用F#應用程序:所有桌面,網頁,iOS,Android ......作爲一種仍然使用不多的語言,它的目標是如此多的不同平臺。這太棒了:)。 – 2013-12-15 11:40:46