我有兴趣使用F#进行数值工作,但我的平台不是基于Windows的。对于生成大量短期对象的程序(对于函数式语言来说是典型的),Mono仍会显着降低性能。
Silverlight可在OSX上使用。我看到一些引用表明以常规方式编译的程序集无法引用,但在细节上并不清楚。我对UI不感兴趣,但想知道是否可以有效地使用捆绑了silverlight的VM来执行?
我希望能够引用我在java中已经拥有的大型数值模型库(通过IKVM交叉编译到.NET程序集)和用F#编写的新代码库。我希望OSX上的Silverlight VM具有良好的性能,并且可以引用外部程序集和本机库。
这可行吗?
答案 0 :(得分:5)
从技术上讲,Silverlight程序集与普通CLR程序集类似,但它们引用不同版本的运行时(以及不同版本的系统库,如mscorlib
)。 Silverlight只能运行Silverlight程序集,所以如果你正在编译F#代码,你需要指示F#编译器引用Silverlight(这里是来自Luke Hoban的Visual Studio templates,这里是Brian最近的sample Silverlight app麦克纳马拉)。
现在,关于非F#组件,我担心这可能是个问题。原则上,您不需要重新编译它们 - 有一些工具可以更改版本(将CLR程序集转换为Silverlight程序集)。请参阅示例this article。在实践中,Silverlight有许多限制(缺少许多方法,出于安全原因,不允许你做一些反射技巧等)。所以,我担心如果你只是将程序集转换为Silverlight,它就不会真正起作用,但你仍然可以尝试......(但要小心 - 如果缺少引用的方法,你就不会发现这个直到Silverlight试图在运行时调用它。
最后,与Silverlight中运行的应用程序通信也存在问题,因为Silverlight应用程序的功能非常有限。但是,Silverlight 4 RC应允许您在浏览器外模式下运行时读取/写入本地文件(这可能已经足够了)。
总结我认为有很多问题可能导致无法使用Silverlight。我可能会考虑在Mono上做更多的测试并向他们发送反馈(如果你发现某些情况下性能显然很差) - 根据我的经验,他们可以非常有效地回应用户的反馈并且我有感觉对于Mono团队来说,F#可能是非常有趣的事情。