这个课题很大,我只是站在一个普通人的视角上写一下。
微软的看家技术是什么?vb!先有basic,再有操作系统,dos发展到windows,vb一直发展着。然而到达vb6之后,微软转型设计.net 。.net 是什么?java的山寨版。
为什么java对微软的影响会那么大,首先java是跨平台的,mini的,不过java的跨平台很蹩脚。微软希望所有人都在windows开发软件,而不扩散到其他平台,所以他一直都开发自己专属的技术。这无可厚非,但是市场需要java这种方案。那么微软就觉得应该主动提供这种方案。因此就有了.net。 .net 有一套java的类似技术,但是它并不设计来跨平台,.net是一个不想你跨平台的java。既然.net都做不到java的市场定位,那么.net有啥意义?
因此.net一直是不温不火。在消费级桌面平台,有c++的强力竞争,在企业市场,有java的积累的优势。
一个市场定位错误的产品,必然就无法展现技术的优势。
vb6 从技术上讲,已经很接近.net,但是vb很纯粹,就是为了windows服务的,因此它能做到很mini,他大部分技术都是windows本身提供,因此无需构建太多自己的东西。而.net不同,它试图去建立另一套运行机制,试图建立和操作系统层平行的.net虚拟层,为何需要这样?因为它的技术是借鉴java的,java是跨平台的,所以.net自然就有这种设计。然而.net在商业上是不允许跨平台的,因此这种设计就完全没有意义。
其中,winform 借鉴了vb6的机制,属于传统的windows 界面设计,而wpf是后来的尝试。但是wpf是完全独立于系统,并且没有得到系统支持的“平行”ui,因此效能非常低。就等于你启动了windows之后,再启动一套新的系统,它叫“.net”,并非.net的方案不优秀,而在于它并非原生的。
.net 开发者意识到这种平行的状态,并且把这种平行的状态发挥到极致,以至你在一个系统中可以同时运行不同版本的.net,就仿佛在一台电脑上同时启动几个操作系统,如此的神奇。然而代价是性能!
微软是开发windows的,是做系统的,它让用户基于另一套系统做程序开发有什么意义?用户不会问,为何不让我直接启动.net“系统” ,提供原生体验,而要依附在windows之上?只能说是非常失败的市场定位。
微软可以借鉴java的技术,但是应该清楚自己作为系统提供商的任务,就是要提供原生的支持给客户,而非冒充跨平台厂商,欺骗客户我提供的中间层有原生的性能,并且可以跨平台,而实际没有原生的性能,却又不能跨平台。
.net的发展之路,就是一个性能不足之路,在这十几年的时间里,像样的桌面程序没有,像样的企业程序也没有,只能作为java和c++的极度有限的补充。
最近silverlight官网又要关闭了,有一个.net技术面临市场的淘汰。sl 设计目的是为了替换falsh,微软很多设计都是为了替换别人,而非自己有什么创新想法。有的只是赤裸裸的商业意识。不过从技术上讲,sl是很强大的,因为他就是.net的迷你版。.net为何不能跨平台,在于它太庞大的身躯,自己就是一个平台,如何能和系统结合紧密?sl作为迷你版的,功能有限的子集,反而就没有这种不足。它轻量,所以它只是一个解决方案,并非一个平台。
然而微软本质上还是不希望.net做跨平台的事情,虽然可以支持不同平台,但是他要依附在浏览器之上,无法做到原生启动。随着移动市场的流行,依附在浏览器的插件被一一去除,sl 失去生长的土壤。
假如微软愿意让sl 做到完全的跨平台,那么sl的技术底子还是相当优秀的。
最近,微软推出了win8,这套系统表明了微软的发展方向。win8原生支持了wpf,.net等一部分技术,window终于开始把.net原生化,随着这种趋势的发展,将来windows可能完全吸收.net。 而.net 就真真正正的成为一个本地系统。