文档章节

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

IT周见智
 IT周见智
发布于 2015/06/05 17:17
字数 1079
阅读 8
收藏 0

我们目前对.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)中那幅图左边红色部分不再是意淫出来的产物。

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

© 著作权归作者所有

共有 人打赏支持
IT周见智

IT周见智

粉丝 10
博文 61
码字总数 185891
作品 0
西青
私信 提问
【quickhybrid】API多平台支撑的实现

前言 在框架规划时,就有提到过这个框架的一些常用功能需要支持环境下的调用,也就是需要实现API的多平台支撑 为什么要多平台支撑?核心仍然是复用代码,比如在微信下,在钉钉下,在quick容器...

dailc
07/01
0
0
手把手教你设计交友网站【4】

零零散散写了点任务,接下来讲到的任务设计会更实战一些。究其原因是它跟情感化设计更沾边一点。和游戏任务一定要满足玩家心理一样,交友网站你怎么能更容易的让玩家填资料呢,以及做一些更多...

johnnyhg
2009/09/28
106
0
UI 自动化测试--iQuery

在程序界面(UI)自动化测试中,最烦人的就是抓取控件的过程了,要么是程序员忘记在代码里给控件添加自动化测试用的标签;要么就是界面布局经常 变,如果是基于坐标位置抓取的话,一点小变化...

知平软件
2012/08/14
4K
0
每一个程序员都应该学会投资股票

作为一个程序员,我们除了努力学习自己的专业技能的同时,还应该提高自己的投资的技能。不论是资深程序员,架构师,管理者,我们每天的工作时间有限,精力有限。想通过自己的工资收入来实现财...

yuyuweiwei0718
03/17
0
0
求教一个系统设计的问题

假设当前Web系统,需要集成大量第三方系统API(服务不稳定、不可靠),各位大神,如何设计这个系统比较好一点,求指点,万分感谢! 以下是个人的拙见,求指点,主要考虑的点: 1、第三方系统...

Nice2018
06/25
193
3

没有更多内容

加载失败,请刷新页面

加载更多

Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多。要怎么理解以上这句话,请看下文。 一、...

王磊的博客
28分钟前
1
0
Ext grid 渲染

// 单元格字体颜色渲染function renderer_Meta_useStatus(value, cellmeta, record,rowIndex, columnIndex, store){ var color = ""; if("空闲"==value){ color = "green";......

MoksMo
38分钟前
4
0
log4j2在spring中的配置

<?xml version="1.0" encoding="UTF-8"?><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--Configuration后面的status,这个用于设置l......

TonyTaotao
44分钟前
3
0
java 中间变量缓存机制(i++,++i)

public class Test { public static void main(String[] args) { int i = 0; i = i ++ ; System.out.println(i); } } 答案是 0 如果是 i = ++......

shzwork
51分钟前
6
0
初识多线程及其原理-笔记

什么情况下应该使用多线程? 通过并行计算提高程序执行性能 需要等待网络、I/O响应导致耗费大量的执行时间, 可以采用异步线程的方式来减少阻塞 tomcat7 以前的io模型 客户端阻塞 线程级别阻...

Java搬砖工程师
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部