讨论:“Mono是个跨平台的.NET”是不是个正确的说法

包括Mono建立者MigueldeIcaza在内的许多人给出了回复。 理由以下:  首先, CLI(CommonLanguageInfrastructure)和. NET是有区别的, 一样, C#也是一个公开规范, 也和气.   Mono绝关于. NET是有些落后, 但也只有一丁点而已。 Mono能够运转C#4. 0的代码(最新的. NET版本), 这意味着mono能够直接运用IronPython, IronRuby, NET的CTP版本, NET保持同步。 NET中的部分工具和扩展, 如CodeContract等等, 它们并无mono中的无缺完成, 假如这些扩展变得流行起来了,   WinForm没有获得无缺的移植, 因为它们是. NET的特性功用, 而并不是CLI的一部分。 CLI中并无定义特定的组件库。 有一些组件库是跨平台的, 例如GTK#和Silveright, 假如你从编写应用程序的一末尾就思索到可移植性, 那就不该该运用Win. 此外,   关于不情愿运用开源产品的商业应用, Mono能够运用另外一种授权方案, NET能否移植”这个命题, 我想假如你从一末尾就思索到框架的可移植性问题, 但假如换个说法“我有个运用.   除了技术方面的要素之外, 关键仍是在于编写代码的方式。 Python, 那么你应该假定这些代码能够直接跨平台执行的可能性为零(即便实际上这样的可能性要高出许多)。 选择. 不过关于跨平台的代码来讲, 你仍是需求不断地中止测试。 假如你运用持续集成, 那么只需简单的建立一个Mono构建的节点便可。 只需养成良好的习气(例如途径的分隔符), 不少问题能够在开发阶段就解决掉, 而绝大部分代码只需运用单元测试以及其余一些罕见的实际方式, 剩下的, 则能够通过封装, 为不一样平台提供针对性的完成。 这样产出的项目, 几乎不会付出额外的代价就能获得很好的移植性。   固然, 运用一个Mono中不存在或是不兼容的类库则另当别论, 不过就个人团体而言尚未遇到这样的状况。 这些是咱们在工做中实际用到的作法, 我能够担忧的宣称“. NET+Mono”是跨平台的解决方案。   我用过Mono, 我觉得它就和其余开源平台同样好, 只不过不是微软直接支持的而已。 Mono关于. NET的支持水平能够参考MonoRoadmap页面。 Mono并不等同于. NET, 它们有或多或少的区别, 例如现在你还没法运用EntityFramework。 NET可否跨平台”是一个模糊的说法, 不管是框架自身仍是全体环境都在不断改动。   简单地说, 做为. CLI规范是跨平台的, 但假如要在不一样平台上获得最好的体验, 则势必要运用各自平台上有针对性的API。 CLI技术家族历来没有试着要“一次编写, 比如电话和大型机的区别实在是太大了。 不如各自平台上的最佳体验提供最正确的工具。 试想那些非WindowsPC或Unix服务器的程序员, 要晓得现在已经出现了游戏设备, 移动电话, 散布式集群等太多激动人心的平台。 NET框架的变体, 例如WindowsPhone7, 它们都有些许不一样的配置(Profile)。   现在你已经能够在各个主流的操做系统, 电话, 移动设备, 嵌入式系统或是服务器上运用基于. NET的技术, 如下是各类CLI完成的列表, 但应该能够掩盖99%的状况:  以上配置都有多多少少的不一样, 这不是坏事。 每一个配置的设计都顺应其平台, SilverlightAPI能够控制浏览器, 这不关电话什么事;因为短少合适的支持, XNA的着色功用对PC硬件也没有多少意义。 NET不是个将开发人员绑定在特定硬件或平台上的解决方案, 就能越早成为更好的开发人员。 要无缺列出这些技术需求一张复杂的表格, 我不晓得如何在这里表现出来, 不过这里有个特定技术与特定平台的列表:程序员

相关文章
相关标签/搜索