您的位置:首页 > 其它

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

2011-04-02 08:39 232 查看
  文/赵劼  最近在StackExchange的编程板块上引起了一场关于“Mono是否可以作为跨平台. NET”的讨论。 包括Mono创立者MigueldeIcaza在内的许多人给出了回复。   Thorbjorn在提问中认为Mono并不能称作是跨平台的. NET, CLI(CommonLanguageInfrastructure)和. Mono则是CLI的又一完成, 同样, 也和睦. NET绑定在一同。   Mono相对于. 但也只有一丁点而已。 Mono可以运转C#4. NET版本), 0受权协议), 这意味着mono可以直接运用IronPython, IronRuby, 同时F#也不久前也已经开源, 再加上微软都会活期发布. . NET中的局部工具和扩展, 如CodeContract等等, 假如这些扩展变得流行起来了, 那么Mono也会提供对应的完成。   WinForm没有失掉完好的移植, NET的特性功能, 例如GTK#和Silveright, 假如你从编写运用程序的一末尾就思索到可移植性, Mono提供了一个很薄的封装层, 此时受权方案便不是LGPL了。   因此, 我想假如你从一末尾就思索到框架的可移植性效果, 但假如换个说法“我有个运用. 它应该可以在Mono上运转”, 那就不正确了——不过Mono让移植这样的运用程序变得简单许多。 Python, 假如在写代码时不思索可移植性, 你无法随意拿到一个程序集就保证它能在Mono下正确执行。 不过对于跨平台的代码来说, 你还是需要不时地停止测试。 假如你运用持续集成, 那么只要简单的创立一个Mono构建的节点即可。 只要养成良好的习惯(例如路径的分隔符), 很多效果可以在开发阶段就解决掉, 而绝大局部代码只要运用单元测试以及其他一些常见的实际方式, 再加上一点点先期规划就能失掉很好的跨平台性。 剩下的, 为不同平台提供针对性的完成。 这样产出的项目,   当然, 运用一个Mono中不存在或是不兼容的类库则另当别论, 不过就我的个人而言还没有遇到这样的状况。   我用过Mono, 我认为它就和其他开源平台一样好, 只不过不是微软直接支持的而已。 假如你能接受Clojure或Scala这样的开源项目, 那么Mono也能让你满意。 Mono对于. NET的支持程度可以参考MonoRoadmap页面。 Mono并不等同于. 例如如今你还无法运用EntityFramework。   “. NET是否跨平台”是一个模糊的说法,   简单地说, 作为. 但假如要在不同平台上失掉最好的体验, 则势必要运用各自平台上有针对性的API。 CLI技术家族历来没有试着要“一次编写, 不如各自平台上的最佳体验提供最正确的工具。 要晓得如今已经出现了游戏设备, 挪动电话, 机顶盒, NET框架不是跨平台的产品, 它只能运转在Windows上。 其他零碎上还有一些. 例如WindowsPhone7, 它们都有些许不同的配置(Profile)。   如今你已经可以在各个主流的操作零碎, 电话, 挪动设备, 虽不完好, 但应该可以掩盖99%的状况:  以上配置都有多多少少的不同, 这不是坏事。 去除任何一个都是不明智的。 SilverlightAPI可以控制浏览器, 这不关电话什么事;由于缺少适宜的支持, XNA的着色功能对PC硬件也没有多少意义。 你越早认识到. NET不是个将开发人员绑定在特定硬件或平台上的解决方案,   其他解决方案的实质也是一样的。 不过这里有个特定技术与特定平台的列表:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息