开源软件----Mono框架和架构

系统 1555 0

http://www.mono-project.com/Main_Page

 

http://zh.wikipedia.org/zh/Mono

 

Mono 是一个由 Novell 公司(先前是 Ximian )主持的项目。该项目的目标是创建一系列符合 ECMA 标准( Ecma-334 Ecma-335 )的 .NET 工具,包括 C# 编译器和 共通語言執行平臺 。与微软的 .NET Framework 不同,Mono项目不仅可以运行于 Windows 系统上,还可以运行于 Linux FreeBSD Unix Mac OS X Solaris

Mono现由Novell持有 双重许可 ,这和 Qt Mozilla应用程序套件 的情况相似。Mono的C#编译器及其相关工具发布于 GNU General Public License (GPL)之下,其运行时库发布于 GNU Lesser General Public License (LGPL)之下,其类库发布于 MIT License 之下。这些均是 开源协议 因此Mono是一个 开源软件 。如果你打算向Mono贡献你的 源码 ,则你须签署一个 版权分派 给Novell以允许它将这些代码在其它协议下再申请许可,从而允许 Novell 保留其双重许可的能力来持有Mono的商业协议。 [1]

微软 开发了一个称为 共享源码公共语言基础 (Shared Source Common Language Infrastructure,Shared Source CLI)的可用于 FreeBSD ,Windows和Mac OS X的.NET实现版本。微软的 共享源码 协议并不是开源软件协议,且可能对于社区来说也是不足够的(它明文禁止了对软件的商业用途)。我们还可以见到另外一个.NET实现版本, Portable.NET 项目,该项目与Mono项目有着很多相同的目标。

Mono虚拟机包含一个 即時編譯 引擎,该引擎可用于如下处理器: x86 SPARC PowerPC ARM S390 (32位模式和64位模式), x86-64 IA64 和64位模式的SPARC。该虚拟机可以将代码即時編譯或者预先编译到原生代码。对于那些没有列出来的系统,则使用的是代码解释器。

目录

  [ 隐藏 ]

[ 编辑 ] 历史

Miguel de Icaza 在.NET的文档于 2000年 10月 发布时就马上对.NET产生了兴趣。在查看字节码解释器后,他发现对于元数据(metadata)没有相应的说明文档。 2001年 2月 ,de Icaza在.NET邮件列表中索要到了那段缺失了的关于元数据文件格式的信息,并开始了采用C#编写一个C#编译器的工作,作为对C#的实践。 2001年 4月 ECMA公布了那段缺失的文件格式,而在 GUADEC 2001年 4月6日 4月8日 )de Icaza展示了他的编译器的一些特性(那个时候他的编译可以解释自身)。

Ximian内部对如何创建能有效提升生产效率的工具进行了大量的讨论,他们的目标是通过这些创建出来的工具让使用者可以在更短时间内创建出更多的应用程序从而缩短开发周期和降低开发成本。经过可行性研究后,他们清楚地见到创建这样的一项技术是可行的,于是Ximian从其它的项目抽调人员并创建了Mono的开发小组。由于缺少人力来创建整个.NET替代产品,他们在 2001年 7月19日 歐萊禮 大会创建了Mono的开源项目。

差不多三年后,Mono于 2004年 7月30日 发布了1.0版本。

[ 编辑 ] 架构

[ 编辑 ]

类库 为应用程序开发提供一套广泛而有效的工具类。这些工具类本是采用C#编写的,但是由于.NET采用的 公共语言运行时 ,它们可以用于任何.NET语言。类库被按命名空间进行了结构化,并被放置于称为程序集的共享库中。在我们谈到.NET framework时,我们多数是指这个类库。

[ 编辑 ] 命名空间和程序集

命名空间 是一种用于将逻辑上相似的类按层次结构分组的机制。这种机制防止了命名冲突。在这种结构化采用被点号"."分隔的单词来实现。通常最顶层的命名空间是System,例如System.IO和System.Net(完整的命名空间列表可以在 Mono文档 中找到)。当然还有别的顶层命名空间,例如Accessibility和Windows就是这样的例子。新建的命名空间还可以以开发组织的名字开头。

程序集 是这些类库的物理载体。它们跟Win32共享库一样都是dll文件,尽管不完全一样。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll和Accessibility.dll。命名空间经常被分拆到几个程序集中,而一个程序集可以由几个文件组成。

[ 编辑 ] 公共语言基础和公共语言规范

公共语言基础 (Common Language Infrastructure,CLI),又叫公共语言运行时(Common Language Runtime),已由Mono实现。该运行时用于执行已编译的.NET应用程序。公共语言基础已被ECMA定义为标准ECMA-335。要运行一个.NET应用程序,你必须使用相应的参数调用运行时。

在ECMA-335的第六章详细说明了 公共语言规范 (Common Language Specification,CLS)并定义了提供给公共语言基础的接口,例如对于枚举类型的隐含表示类型的协定。Mono的编译器负责生成符合公共语言规范的映射代码,即公共中间语言(Common Intermediate Language,CIL)。Mono的运行时将运行这类代码。ECMA标准先前还定义了一个符合公共语言规范的程序库作为应用框架。

[ 编辑 ] 托管与非托管代码

在原生的.NET/Mono应用程序中,所有代码都是 托管 的,也就是说,是受管于CLI式的内存管理和线程安全管理的。其它的.NET或Mono应用程序可以通过使用System.InterOpServices库创建C#绑定来调用已存的非托管代码。很多移植到Mono的类库使用了CLI的这个特性,例如Gtk#。

[ 编辑 ] 相关项目

现有大量与Mono相关的用于扩展Mono的项目,这些项目允许开发者在他们的开发环境中使用Mono。这些项目包括:

  • Cocoa# ,对原生Mac OS X工具包的一系列包装( Cocoa )。
  • Gecko#,一个对在Mozilla中使用的嵌入式布局引擎的绑定( Gecko ).
  • Gtk# ,对使用 C GTK+ 库的C#的外包。
  • Tao ,一个图形及游戏库的绑定。

[ 编辑 ] Mono与微软的专利

人们对于微软能否采用专利摧毁Mono项目进行了大量的争论。其实,专利问题不在于已被提交到 ECMA 组织的核心技术或Unix/Gnome的专有部分,而在于由微软基于.NET Framework创建的技术,例如 ASP.NET ADO.NET Windows Forms 。这些技术在Mono中至今还没有被完全地实现,事实上,在开发Mono应用程序时也不需要用到,然而,在开发基于Windows平台的程序时却是不可缺少的。Mono团队将目标定为将这些技术纳入到项目中,并制订了一个三步走策略来处理它们:

  1. 采用其它实现方式来实现从而绕过专利问题
  2. 把包含专利的代码清除出项目
  3. 找出“现有技术( prior art )”从而将专利变为非专利

显然,第一个选项并不总是可行的。对于一些问题,例如那些与协同工作和交互相关的,可能就只有一种解决方案。由于这个相同的原因,尽管第二个选项总是可行的,它却可能导致一个开发出来的产品并不能作为.NET的替代品。第三个选项则是昂贵的,甚至不可能的,这需要一定程度的运气。

[ 编辑 ] 使用Mono开发的软件

F-Spot photo management program
Muine music player

以下是使用Mono   API C# 编写的部分程序:

[ 编辑 ] 备注

  1. ^  For more information about the licensing, see   Mono FAQ: Licensing

[ 编辑 ] 参考文献

[ 编辑 ] 外部链接

[ 编辑 ] 国际站点

开源软件----Mono框架和架构


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论