warensoft 我是科学家

Warensoft 我是科学家

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  51 随笔 :: 0 文章 :: 225 评论 :: 0 引用

公告

再谈为什么要使用MONO

warensoft 中科院计算所培训中心

今天中午我收到一个Email,是关于以前写的一个MONO文章的疑问,我对此做了一些解释,希望与有相同问题的朋友一起分享一下,邮件内容如下:

我在网上找到了您写的一篇关于Mono的“在windows下使用Mono”的文章,我想问一下,在windows下开发的winForm程序,和使用Visual Studio开发的程序有什么区别,仅仅只是为了不使用JIT而提高运行速度的吗?再者,为什么要在windows上使用mono开发,在windows使用mono开发的程序可以直接移植到其他平台吗?我还有个疑问,我在这个网站上http://www.go-mono.com/mono-downloads/download.html,下载MONO平台,像下面这张图片一样,我选择的是基于openSUSE Linux系统的MONO平台,我应该点击哪个,打开后,选择哪个下载,打扰了,期待你的回答。

基于以上的问题,我想可以这样解释:
首先你可以把.NET和JAVA的框架理解成一样,我们编写的代码都是在上层代码,即使编译出来也不是机器代码,MS在提出.NET的时候就说可以和JAVA一样能跨平台,能跨平台的原理就是可以在不同平台上使用不同的JIT将我们编写的上层语言解释为对应的机器语言,而问题在于目前的“JIT”是一个MS产品,这个产品的目的是将我们写的上层语言翻译成Windows可以识别的机器语言,另外MS并没有提供其他平台的“JIT”,实际上MONO就是一个第三方开发的“JIT”,当然MONO除了可以将上层代码解释成Linux的机器语言外也可以将其解释为Windows的机器语言。
 
因此,MONO和JIT是同一层次的东西,只是MONO解释出来的东西,在Windows平台上没有MS的JIT好,速度慢,并且功能要少一些(不能解释WPF,大部分的WCF也不能解释,在Winform方面也有一些功能解释不了)。
 
原则上来讲做好的exe和你使用MoNO还是MS的DotNETFrame是没有关系的,因此你可以使用VS来写程序,编译出来EXE,然后用MONO来运行这个程序,但是问题是VS是使用MS的JIT来解释程序的,所以在开发的时候就很有可能超出了MONO能解释的范围。如何保证使用VS的程序不超出MONO能解释的范围呢?MONO的官网上提供了一个兼容性测试工具,但是这个东西不是免费的。
 
使用MONO的优势主要有2点:
1.可以跨平台
2.可以将MONO运行时的一些核心DLL文件直接打包在安装包里,而不需要安装整个框架,这一点是与MS的 .netFramework相比是一个非常大的优势,将必要的MONO运行时DLL文件打包压缩也就10多M,现在.NET4.0也要40多M,现在有很多项目就已经用MONO来开发了,我是做3D游戏的,现在的Unity3d引擎就是就MONO写的内核
 
要想保证Window和Linux的兼容性你可以在Windows下的MonoDevelop里写程序,建议不要使用WinForm的方式开发,因为Winform本向是Win32技术,兼容性在Linux下不是很好,另外在在MONO Develop(MONO的IDE)里没有Winform的设计器,这一点很头疼的,MONO里建议使用GTK#这种第三方的Form技术来做UI,MONODevelop里可以选择程序的运行时是MONO还是.NET Framework,你选择MONO就好了。
但是如果你在Linux开发的话,可以使用Linux下的MONODevelop。
 
至于MONO在Suse下的安装,我只是在MONO刚出来的时候安装过,现在早就忘记了,所以还需要兄弟你自己研究一下,希望我的解释对你有所帮助!
posted on 2011-07-14 13:49 王宇 warensoft 阅读(...) 评论(...) 编辑 收藏