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

简介:   在Mono平台开发前应该做的第一个事情就是,调整好心情,降低期望值:  对于Linux本地C程序员而言,由于习惯了疯狂和有魔力的本地C程序员开发,因此对于Mono提供的诸多限制可能不太满意。大体而言,Mono和.Net程序一样,属于框架开发的范畴,对于框架开发,最好在框架规定的范围内工作,否则会陷入孤立无缘的境地。

  在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。

目录
相关文章
|
5月前
|
设计模式 前端开发 C#
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
60 0
|
10月前
|
缓存 Ubuntu Unix
统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序
在ubuntu上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。
26911 7
|
JavaScript 前端开发 数据安全/隐私保护
VueAdminWork再添一员开源框架,基于Arco design的中后台管理系统 Arco Work开源啦,感谢您的一路支持
VueAdminWork再添一员开源框架,基于Arco design的中后台管理系统 Arco Work开源啦,感谢您的一路支持
VueAdminWork再添一员开源框架,基于Arco design的中后台管理系统 Arco Work开源啦,感谢您的一路支持
|
存储 Ubuntu 计算机视觉
ubuntu16.04搭建港科大vins mono运行环境
ubuntu16.04搭建港科大vins mono运行环境
ubuntu16.04搭建港科大vins mono运行环境
|
JavaScript 网络协议 Linux
RISC-V大赛开发套件详解(六):D1哪吒开发板HaaS-UI FOTA 升级
本期内容是HaaS-UI实战教学部分的最后一篇,同时也是D1 哪吒开发板上手教学的完结篇。我们将手把手教大家在D1 哪吒开发板上实现HaaS-UI的FOTA升级功能。
444 0
RISC-V大赛开发套件详解(六):D1哪吒开发板HaaS-UI FOTA 升级
|
编解码 缓存 NoSQL
RISC-V大赛开发套件详解(二):D1哪吒开发板Yocto介绍
RISC-V大赛开发套件详解(二):D1哪吒开发板Yocto介绍
1407 2
|
数据可视化 开发者
开源项目推荐:基于Qt实现的国产CAE软件集成开发平台,FastCAE
开源项目推荐:基于Qt实现的国产CAE软件集成开发平台,FastCAE
381 0
|
Web App开发 JavaScript 前端开发
英特尔开源WebRTC开发套件OWT
为了抢占实时视频的巨大市场,英特尔开源了WebRTC开发套件,并将其命名为Open WebRTC Toolkit (OWT)。由于实时视频编码、转码需要大量的计算资源,Open WebRTC Toolkit将为英特尔带来巨大的潜在商业回报。
1018 0
英特尔开源WebRTC开发套件OWT
|
Unix Linux C#
跨平台的.NET开源实现Mono 2.8.2发布,徐汇区网站设计
Mono是创建一系列符合ECMA标准(Ecma-334和Ecma-335)的.NET工具,包括C#编译器和共通语言运行平台。 与微软的.NET Framework不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,Mac OS X和Solaris。
778 0
|
机器学习/深度学习 数据库 Windows