.NET支持多平台后的一点拙见

简介:

我们目前对.NET的理解大部分可以归纳为:起初它是Java平台(注意是平台,不要跟Java语言搞混淆)的一个克隆品,后来慢慢演变,有了自己的特性。由于Java平台最显著的特点就是“平台独立性”(或者说不知道谁发明的Write once,Run anywhere这个话)。理论上,你可以写一个程序编译完后,跑在任何一个安装有JVM的操作系统上。大部分人认为.NET的出现是效仿Sun公司的这个伟大的概念——平台独立性,从而与Java抗衡。再后来又有一些人不知道从哪得出的结论说,就算有像Mono这样的非Windows平台.NET CLR,也有好多.NET程序不能移植到其他操作系统中,比如Winform几乎不能通过Mono移植到Linux上去,因此得出一个骇人听闻的结论:微软连模仿都没模仿完整,居然是伪跨平台。

以上就是目前我见过的最多的结论:.NET致命的弱点,就是它不是真正的跨平台。为此,我有以下几点说明:

(1).NET平台出现的意义不是支持跨平台,它出现的目的只是优化传统的Windows开发模式,使Windows开发更加方便快捷。它解决了COM时代的Dll Hell问题(.Net程序集版本控制),集成了多种语言(方便各种各样的程序员),每种语言编写的组件(程序集)之间可以毫无障碍地通讯,集合Object-Oriented和Component-Oriented于一体,你可以从一个组件(dll)中派生出一个新的类型而不需要该类型的所有源码(这个UnManaged时代不可能有),真正的实现了二进制兼容性(你改动程序集中的某一个公开成员,如果使用这个程序集的客户端程序没有使用到这个公开成员,那么客户端完全不需要重新编译),提供C++中没有的内存管理,支持异常处理等等。严格来说,微软发布.NET的第一天就是为了它的Windows,就没打算让你写的程序跑在其他操作系统之上(微软到目前为止还没有发布官方的非Windows平台的.NET CLR)。

(2)再说Java平台和.NET两者追求的目标,前者从出现开始就认为:在互联网世界中,我要让一种语言跑在任何一个操作系统中;而后者则认为:在互联网世界中,我要让所有的语言都跑在同一个操作系统中(Windows)。两个平台从一开始设计的目的就不一样。

(3)两者强调的重点不同:

如上图,红色部分都是其他人扩展出来的功能。

(4)上面3中所述,两者平台结构类似,我不清楚微软到底有没有剽窃Java,但可以肯定的是如果两者东家原意,两个平台都是可以做到“跨平台”和“支持多语言”的。 至于为什么说使用Mono还不能把有些.NET程序移植到Linux,这个很容易解释,微软本来就没打算将.NET程序移植到其他平台,.NET中包含的一些丰富框架都是与Windows紧密相关的,你使用了这些框架,是很难再把它们翻译成非Windows平台中可以执行的代码。而且,Java也并不是完全的跨平台,跟你开发实际用到的框架有关。出现以上不能移植的情况,关键有两个地方,一个是你开发时使用的框架,一个是CLR(或者JVM),要看后者到底有没有能力把前者翻译成对应平台的可执行代码。

综上,两个平台的侧重点不同。

---------------------------------------------分割线------------------------------------------------------

2014年11月17日更新:

以上是之前写的一篇博客。就目前微软决定.NET开源后,并支持多平台。那么3)中那幅图左边红色部分不再是意淫出来的产物。

以上一点拙见,话题较敏感,勿喷。

作者:周见智 
出处:http://www.cnblogs.com/xiaozhi_5638/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类:  .NET Framework

本文转自周见智博客博客园博客,原文链接:http://www.cnblogs.com/xiaozhi_5638/p/4103274.html,如需转载请自行联系原作者
目录
相关文章
|
消息中间件 监控 数据可视化
一个基于.Net Core 开源的物联网基础平台
一个基于 .Net 6.0 使用C#语言编写的以实现可见与不可见的物理设备数字孪生的物联网平台。用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台。
410 0
一个基于.Net Core 开源的物联网基础平台
|
存储 监控 Kubernetes
『Skywalking』.NET Core快速接入分布式链路追踪平台
📣读完这篇文章里你能收获到 - .NET Core接入Skywalking - 了解Skywalking的整体架构设计 - 了解Skywalking的各项技术指标怎么看 - 生产部署时的坑全跳过 - 感谢点赞+收藏,避免下次找不到~
739 1
『Skywalking』.NET Core快速接入分布式链路追踪平台
|
29天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
30 0
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
58 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的云LIS系统平台源码
结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度产品化、功能强大、极易实施操作、并不断升级换代为主要特点的LIS系统。彻底解决检验科的信息孤岛,全面实现全院信息互通互联、高度共享,并为检验科的规范化管理提供了有力工具。
41 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
49 1
|
4月前
|
开发框架 小程序 数据可视化
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
|
5月前
|
存储 前端开发 程序员
一款基于.Net开发、开源、支持多平台云存储文件管理器
一款基于.Net开发、开源、支持多平台云存储文件管理器
42 0
|
5月前
|
数据采集 自然语言处理 监控
基于.Net开发的、支持多平台、多语言餐厅点餐系统
基于.Net开发的、支持多平台、多语言餐厅点餐系统
76 0
|
10月前
|
SQL 数据库连接 数据库
在VS2013平台下,用VB.net 连接Access数据库
从开始学习计算机,我们使用的一直是SQL数据库。这次接触了Access数据库,我将从Access创建到连接向大家分享一下我在Access数据库中的收获。
205 0