随笔-8  评论-196  文章-0 

在Mono平台开发前你应该知道

在Mono平台开发前应该做的第一个事情就是,调整好心情,降低期望值:

    对于Linux本地C程序员而言,由于习惯了疯狂和有魔力的本地C程序员开发,因此对于Mono提供的诸多限制可能不太满意。大体而言,Mono和.Net程序一样,属于框架开发的范畴,对于框架开发,最好在框架规定的范围能工作,否则会陷入孤立无缘的境地。Mono没有C开发那些唾手可得的工具,也不能对系统进行无限的挖掘,Mono关注的是应用软件开发,不是系统软件(Mono 可以支持本地服务开发)。Mono支持两种类型软件开发,以WEB为中心的软件和以本地为中心的开发。WEB包括常规定义上的应用型网站开发,也包括基于服务的模型开发。由于服务现在成为软件开发的中心并且迅速进化。作为.Net替代平台,Mono显得很混乱,主要因为.Net以服务为中心的设计在Mono 上还无法完全施展,因为Mono基础平台正处于2.x阶段,等09年底应该是一个新阶段。对于本地程序开发,主要包括一GTK#和System.Windows为中心的图形界面程序开发,还包括服务软件的开发(linux service机构),也包括一Lucene.Net为基础的搜索软件的开发。

    对于Windows .Net 程序员而言,首先要极度降低期望值,Mono没有绚丽的工具,缺乏足够的第三方软件,并且工具之间的集成也做得不太好,代码编写可能不很流畅,MonoDevelop也可能让你很失望,这些都是Windows上廉价的.Net开发工具把我们惯坏了。Windows.Net程序员来到Mono的主要原因有很多,可能是因为好奇,希望迁移自己的程序,想窥探一下Mono实现以确定和自己想的差距有多远,更多的是要学习。就像把孩子放到艰苦的地方锻炼一样,来到Mono,你将会有同样的感觉,非常的贫瘠。Mono工具还比较原始,文档也比较少,我觉得这方倒是学习的好地方,每一次当我打开MSDN,我都会望书惊叹,多么希望积累足够丰富的Windows知识呀,但是MSDN让人感到很大很茫然,最后,还是购买专著研究更合适,其他要用的,用的时候在查资料吧。在Mono平台上资料非常少,这也是优势,对于C#语言本身而言,那是学习的好地方,就像C++一样,C#本身是一个迷人的语言值得研读一下,但是C#上紧紧捆绑的应用更适合生产而不是学习,如果要学习,需要找一个单调一点、产品单一的环境,当然学好了赶紧回来,赶紧拥抱Windows:)

了解平台之间的差距:

    关于文件系统,Linux基于虚拟文件系统,这是Linux最成功的设计之一,表面看起来就是,任何文件和资源都可以通过一"/"开始的文件来访问,文件之间的分割符是"/"。在Windows中,文件系统经过多次抽象,看起来类似与以“C:”、“D:”这样的方式开始,并且文件之间的分隔符使用"\",这是很多程序不可移植的重要原因,可以参考后来的文章,了解如何提高程序的可移植性。

    第二个差距就是换行符的不同,在Windows平台,一个换行符意味着“\r\n",由于在字符终端时代,"\n"的任务是使光标处于下一行的同等位置,而"\r"则是使光标处于一行的开头,因此,去下一行开始则意味着要配合使用两个控制符;在Unix族平台,换行符则使用"\n"表示,这是历史原因,我猜想是由于早期终端规范导致的。

    关于Unicode,这现在应该不成问题了,现在Linux多都在内部使用了Unicode,以前Linux在内部使用ASCII编码及其扩展。由于Windows在内部使用Unicode已经很长时将了,.Net 的Unicode 支持非常好,Char字符本省就是Unicode的,并且System.Text也为文本处理提供了诸多支持。虽然Mono实现了.Net的功能,但是我发现,系统对Unicode 的处理不够细心,一个细心设计的类库和平台,应该保证在大部分情况下系统的反应能和程序员预期的一样好,但是Mono没有做到,那是以前的事情了,由于Mono RunTime在一直改进,现在应该有大幅进步吧。文本处理一直都是计算机科学的基本问题之一,通常情况下,处理多国编码的最简的办法是使用UTF-8,由于历史原因,许多接口并没有使用UTF-8,而是使用蹩脚的转换。在Windows下,在.Net出现之前,文本处理一直很让人头疼,赞扬.Net时常提的一个问题就是:“难道你还想执行字符串转换工作?”,看看char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和System.String,往事不堪回首呀,如果不跨库,不跨方案,那么字符串处理还算轻松,一旦要跨库跨平台跨方案,那么,字符串处理就是程序员的噩梦。

    结构差距,Microsoft.Net 是一个旨在建立巨大生态圈的大方案,希望面面俱到。因为Microsoft企业平台架构,Microsoft.Net能够更好的跟Windows的业务核心和系统核心无缝集成,在Microsoft.Net上,架构师、设计师和程序员看到的不仅仅是.Net,还包括大量运行的关系业务前途的企业服务和组件。在Mono上,由于需要依赖第三方实现,依赖大量的绑定来使用系统或其他软件的功能,有时侯透明度不够。没有MMC、域、MSMQ、WMI、事务支持、服务架构、数据库服务等重要基础结构的支持,这些都是在开发早期就应该确定的因素,请确定Mono能够满足你的要求。另一方面,这些在很多时候也是一个优势,有大量的第三方组建在实现这些功能,包括Apache、Mozilla、Postgrsql等等社团。

posted on 2009-02-07 17:45 蓝色闪光 阅读(...) 评论(...) 编辑 收藏