艾伟:在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。

目录
相关文章
|
6月前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
231 0
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
存储 编解码 人工智能
cdr2023新功能发布介绍CorelDRAW
懂设计的职场人都知道这款软件,CorelDRAW是一款非常高效的矢量图形设计软件。CorelDRAW操作界面简洁易懂,能够为用户提供精确地创建物体的尺寸和位置的功能,减少点击步骤,提高设计效率,节省设计时间。功能比普通的美图之类的不要好太多!
522 0
|
IDE 编译器 程序员
CSDN推出【云IDE】,几秒完成开发环境配置,今后可以在浏览器里使用VS Code了
CSDN推出【云IDE】,几秒完成开发环境配置,今后可以在浏览器里使用VS Code了
210 0
CSDN推出【云IDE】,几秒完成开发环境配置,今后可以在浏览器里使用VS Code了
|
存储 Ubuntu 计算机视觉
ubuntu16.04搭建港科大vins mono运行环境
ubuntu16.04搭建港科大vins mono运行环境
372 0
ubuntu16.04搭建港科大vins mono运行环境
|
弹性计算 IDE 前端开发
软萌小姐姐居家直播,讲解 IDE 插件以及VS Code新版本发布,开发部署提速8倍
软萌小姐姐居家直播——前端新突破,IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
1437 10
软萌小姐姐居家直播,讲解 IDE 插件以及VS Code新版本发布,开发部署提速8倍
|
弹性计算 前端开发 IDE
前端突破——IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。
4149 0
前端突破——IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
|
Kubernetes 小程序 IDE
这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍
今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了“阿里巴巴小程序繁星计划”,截至当前,已经有成千上万的开发者加入这个计划。我们要善于运用工具来最大化地发挥自己的能力,所以,为了更进一步提升小程序开发者的工作效率和开发体验,阿里云提供了免费的小程序开发插件——「Cloud Toolkit」。
1237 0
这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍