我使用一个运行FreeBSD 7.2的共享networking服务器(NearlyFreeSpeech.net,强烈推荐!),并且喜欢用C#编写CGI脚本,但是他们还没有安装Mono。 如果我使用自己的FreeBSD 7.2盒子并在那里编译我的C#程序,我可以AOT编译我的代码并在无单音服务器上部署二进制文件吗?
我知道在App Store上销售多款iPhone游戏,所有这些游戏都是AOT编译(对ARM)。 上面的引用页面说x86和x64是支持的,但是在我的x86 Mac OS X Leopard Mono上,我尝试过
sudo mono --aot /Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll
和
sudo mono --full-aot /Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll
并得到了错误:
AOT compilation is not supported on this platform.
和
Failed to load AOT module '/Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll.dylib' in aot-only mode.
分别。 我只是不想花大量的工作来获得FreeBSD 7.2 + Mono 2.4.2.1的工作,并find同样的事情:不支持AOT编译,这是关心FreeBSD + Mono的唯一原因。 。
AOT只消除了(大部分)JIT编译的需要。 您仍然需要VM提供的所有其他服务 – 垃圾回收,元数据,IO,安全性,dynamic编译等。
AOT在桌面环境中的优势是缩短启动时间,允许使用更昂贵的编译器优化,并允许在应用程序之间共享代码。
iPhone是一个特例,因为它不允许dynamic库和JITing。 所以CLI代码被AOT编译成静态库,然后用一个精简的Mono运行库连接在一起,产生一个二进制文件。 但是,禁用JIT会增加一些限制。 例如,generics的某些用法是不可能的(AOT编译器不能总是静态地确定它需要编译哪种泛化genericstypes),dynamic代码生成(IronPython等语言所需的)是不可能的。
最好的办法是build立一个并行单声道环境 – 或者直接在远程机器上构build它,或者在本地构build它,安装到一些临时前缀中,然后将其复制。