.NET开发笔记(二十二) .NET VS Java
我们目前对.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)中那幅图左边红色部分不再是意淫出来的产物。
.NET开发笔记(二十二) .NET VS Java的更多相关文章
- 树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
前言 树莓派也可以做商业应用,工业控制,其稳定性和可靠性已经得到了验证,故而工业控制,一些停车场等场景也有采用树莓派作为主控的,本片介绍了研华ADVANTECH的树莓派套件组UNO-220-P4N ...
- 安卓开发笔记(十二):SQLite数据库储存(上)
SQLite数据库存储(上) 创建数据库 Android专门提供了一个 SQLiteOpenHelper帮助类对数据库进行创建和升级 SQLiteOpenHelper需要创建一个自己的帮助类去继承它并 ...
- .net开发笔记(十二) 设计时与运行时的区别(续)
上一篇博客详细讲到了设计时(DesignTime)和运行时(RunTime)的概念与区别,不过没有给出实际的Demo,今天整理了一下,做了一个例子,贴出来分享一下,巩固前一篇博客讲到的内容. 简单回顾 ...
- Java开发笔记(十二)布尔变量论道与或非
在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断.为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”.该类型的变量只允许两个取值,即t ...
- PID控制器开发笔记之十二:模糊PID控制器的实现
在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...
- ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键
LittlevGL 添加自定义字体获取字库 ttf 文件可以从一些网站上获取字库文件,比如请注意字体许可证 生成源文件使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件 ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
随机推荐
- HBase安装及简单使用
通过之前的hadoop0.20.2的安装并调试成功,接下来我们继续安装hbase0.90.5.在安装hbase0.90.5之前,因为hbase0.90.5只支持jdk1.6,所以,我把之前的jdk1. ...
- 结构化查询语言(SQL)数据类型
简要描述一下结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型. 字符型 VARCHARVS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要.他们都是用 ...
- Android中的桌面快捷方式
一.判断是否已有快捷方式 private String getAuthorityFromPermission(Context context, String permission){ if (perm ...
- D3(Data-Driven-Document)中的一些细节
不定期更新,给自己看,如果能帮到别人,我也很开心. 1)好像 function中默认的两个参数d,和i,如果只有i,则i实际上是d 的内容. lineG.selectAll("line&qu ...
- webform 之LINQde 简单操作
LinQ: LinQ to Sql类它是一个集成化的数据访问类,微软将原本需要我们自己动手去编写的一些代码,集成到了这个类中,会自动生成. 数据库数据访问,能大大减少代码量. 那就是代码量减少 EF框 ...
- Lessons Learned 1(敏捷项目中的变更影响分析)
问题/现象: 业务信息流转的某些环节,会向相关人员发送通知邮件,邮件中附带有链接,供相关人员进入察看或处理业务.客户要求邮件中的链接,需要进行限制,只有特定人员才能进入处理或察看.总管想了想,应道没问 ...
- Qt ffmpeg环境搭建
ffmpeg下载地址:https://ffmpeg.zeranoe.com/builds/ 版本选择第一个,然后多少位看自己的pc(我的是64),右边对应三个都要下载,Static,Shared,De ...
- Android学习 之 ColorStateList按钮文字变色
首先添加一个ColorStateList资源XML文件,XML文件保存在res/color/button_text.xml: <?xml version="1.0" enco ...
- Web调用FastReport的配置问题
1.修改配置webconfig文件 IIS6: <system.web> <httpHandlers> <add path="FastReport.Export ...
- 简单的css js控制table隔行变色
(1)用expression 鼠标滑过变色: <style type="text/css"><!-- table { background-color:#0000 ...