2010-04-03 56 views
1

我對使用F#進行數值計算感興趣,但我的平臺不是基於Windows的。對於產生大量短暫對象的程序,Mono仍然會有明顯的性能損失(對於函數式語言而言,這是典型的)。基於.NET/CLR的silverlight基於osx的數值計算

Silverlight在OSX上可用。我曾見過一些參考文獻,指出以通常方式編譯的程序集不能被引用,但不清楚細節。我對用戶界面不感興趣,但是想知道是否可以使用與silverlight捆綁在一起的虛擬機有效地執行?

我希望能夠引用我已經在java中使用的大型數值模型庫(通過IKVM與.NET程序集交叉編譯)以及用F#編寫的新代碼庫。我希望OSX上的Silverlight VM具有良好的性能,並且可以引用外部程序集和本地庫。

這是可行的嗎?

+0

如果您能夠重建這些針對Silverlight的庫,則可以使用它們,否則不能使用 – vittore 2010-04-03 00:32:19

回答

5

從技術上講,Silverlight程序集與普通CLR程序集類似,只是它們引用了不同版本的運行時(以及不同版本的系統庫,如mscorlib)。 Silverlight只能運行Silverlight程序集,因此如果您編譯F#代碼,您需要指示F#編譯器引用Silverlight(這裏是來自Luke Hoban的Visual Studio templates,以及Brian McNamara在F#中的最近sample Silverlight app)。

現在,關於非F#程序集,恐怕這可能是一個問題。原則上,您不需要重新編譯它們 - 有工具可以更改版本(將CLR程序集轉換爲Silverlight程序集)。例如參見this article。實際上,Silverlight有很多限制(缺少很多方法,出於安全原因您不允許執行一些反射技巧等)。所以,如果你簡單地將程序集轉換爲Silverlight,恐怕它不會真正起作用,但你仍然可以嘗試......(但要小心 - 如果引用的方法丟失,你不會找到這個直到Silverlight嘗試在運行時調用它)。

最後,在Silverlight中運行的應用程序也存在問題,因爲Silverlight應用程序的功能非常有限。但是,Silverlight 4 RC應允許您在瀏覽器外模式下運行時讀取/寫入本地文件(這可能足夠好)。

綜述我認爲有很多問題可能導致無法使用Silverlight。我可能會考慮在Mono上做更多的測試並向他們發送反饋(如果您發現某些情況下性能顯然很差) - 根據我的經驗,他們可以非常有效地響應用戶的反饋,我有這種感覺對於Mono團隊來說F#可能是相當有趣的事情。

+0

感謝您的洞察力。 關於mono選項,在LLVM映射的性能方面已經做了一些工作,現在正在測試一個新的GC。也就是說,我懷疑主要問題是mono團隊分散得太細,可能會有不同的優先級。我更喜歡深度廣度(深度更關注虛擬機,更少關注API追趕)。 – 2010-04-03 07:52:54