2010-04-03 58 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