当前位置: 首页 > 编程日记 > 正文

微软技术的变迁

这个课题很大,我只是站在一个普通人的视角上写一下。

微软的看家技术是什么?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 就真真正正的成为一个本地系统。

转载于:https://www.cnblogs.com/Nobel/archive/2012/12/10/2811651.html

相关文章:

java initcause_Java 异常

问:java 异常有哪几种,特点是什么?答:异常是发生在程序执行过程中阻碍程序正常执行的错误操作,只要在 Java 语句执行中产生异常,则一个异常对象就会被创建。Throwable 是所有异常的父类,它有两个…

UICollectionView之网络图片解析

1:将SDWebImage文件夹的类库导入工程,创建一个模型对象Model类,并声明好它的属性,再创建一个继承自UICollectionViewCell的自定义类 2:在自定义cell类中重写 - (instancetype)initWithFrame:(CGRect)frame { self [su…

一个中国人看了爽的笑话

某国人好战。古时几乎所有的少壮男丁都被征召去当兵打仗,根本没有时间结婚生子,所以人丁越来越少.当时一个国主就出了一个国策,让所有的男人不论何时何地,都可以随便跟任何女人发生关系,来保持人口的出生率.所以在休战…

Spring Cloud整合Redis

2019独角兽企业重金招聘Python工程师标准>>> 项目需要使用Redis来做缓存,研究了一下如何将其与Spring Boot整合。网上的demo要么就是太过于庞大,要么就是版本过于陈旧,配置时候会有各种坑。因此自己在踩过了各种坑之后&#xff0c…

java case or_java – 在CriteriaBuilder中使用子句和’case w...

我想使用CriteriaBuilder构建下面显示的having子句:select objectid,sum(case when attr_meta severity then 1 else 0 end) as severity,sum(case when attr_meta priority then 1 else 0 end) as priorityfrom object dgroup by objectidhaving sum(case when a…

7 个 jQuery 最佳实践

背景 在这篇文章中,我会给大家介绍在编写、调试和审查JavaScript代码的时候一些好的实践(至少我是这么认为的)。事实上,我选择了其中7个最常见的场景。 1、使用CDN及其回退地址(fallback) CDN代表内容传递网…

关于一些Linux SVN的安装使用

关于一些Linux SVN的安装使用 SVN简介The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.SVN是一…

【转】触屏手机电话拨打链接

1、web方式&#xff1a; <a href"tel:4008006666">电话&#xff1a;4008006666</a> 2、wap方式&#xff08;主要hack QQ和UC浏览器&#xff09; <a href"wtai://wp/mc;4008006666">电话&#xff1a;4008006666</a>转载于:https://…

java redis 主从 哨兵_Redis主从复制与哨兵机制

Redis主从复制1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave)&#xff0c;主数据库可以进行读写操作&#xff0c;当发生写操作的时候自动将数据同步到从数据库&#xff0c;而从数据库一般是只读的&#xff0c;并接收主数据库…

不同变量的区别

1、形参、局部变量以及局部静态变量的区别。 形参和局部变量均属于自动对象&#xff0c;当到达定义所在的块末尾时被销毁&#xff1b;而局部静态变量自定义开始&#xff0c;直到程序结束才被销毁。 2、全局变量和静态全局变量的区别。 全局变量本身就是静态存储方式&#xff0c…

Java 使用 Redis

2019独角兽企业重金招聘Python工程师标准>>> 安装 开始在 Java 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 Java redis 驱动&#xff0c;且你的机器上能正常使用 Java。 Java的安装配置可以参考我们的 Java开发环境配置 接下来让我们安装 Ja…

IPMSM弱磁控制策略

下面将详细介绍这种控制策略的实现过程:(l)具有快速动态响应的前馈弱磁控制策略电动汽车用永磁电动机驱动系统应具有较快的转速响应速度&#xff0c;而传统的的弱磁控制策略通常是先根据电机转速的变化调整交轴电流iq&#xff0c;而后根据转速给定值计算得出直轴电流id这种方法…

java 并发统计_java并发编程|CountDownLatch计数器

0x01,CountDownLatch介绍CountDownLatch是一个计数器&#xff0c;作为java并发编程中三个组件之一&#xff0c;这个组件的使用频率还是很多的。这里分享下自己画的java并发编程组件的图&#xff0c;后面一一介绍这几个组件的使用。上面图片标注的1,2,3分别是自己觉得重要性的&a…

MySQL查询随机数据的4种方法和性能对比

从MySQL随机选取数据也是我们最常用的一种发发&#xff0c;其最简单的办法就是使用”ORDER BY RAND()”,本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法&#xff0c;并分析了各自的优缺点。下面从以下四种方案分析各自的优缺点。方案一&#xff1a; 复制代码 代码如下:…

【转】CPU位数、核数、个数

转自&#xff1a;http://blog.chinaunix.net/uid-20344928-id-2985712.html 32 or 64 linux下查看操作CPU的运行位数&#xff1a; getconf LONG_BIT 如结果是32&#xff0c;表示当前CPU工作在32位模式下&#xff08;即操作系统是32位的&#xff09;&#xff0c;但并不表示CPU一…

JPA常用注解

2019独角兽企业重金招聘Python工程师标准>>> JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象&#xff0d;关系表的映射关系&#xff0c;并将运行期的实体对象持久化到数据库中。 JPA由EJB 3.0软件专家组开发&#xff0c;作为JSR-220实现的一…

php pthread 实例,php 真正的多线程 pthread

对于php&#xff0c;有很多种多进程的实现&#xff0c;这里就不说了&#xff0c;下面介绍一种多线程的方式。php真正的多线程实现方式&#xff0c;通过安装php的扩展&#xff1a;pthread 扩展安装步骤如下&#xff1a;1.下载地址是这个&#xff1a;但是这个下载的是 版本3 也就…

Java基础学习总结(1)——equals方法

2019独角兽企业重金招聘Python工程师标准>>> 一、equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test;2 3 public class TestEquals {4 public static void main(String[] args) {5 /**6 * 这里使用构造方法Cat()在堆…

动态规划:求最大公共子串

1 /// <summary>2 /// 动态规划&#xff1a;求最大公共子串3 /// LCS (Longest Common Subsequence)4 /// </summary>5 private static string LCS(string str1, string str2)6 { 7 var d …

java 不可最小化,java – 这是最小化绑定失效的有效方法吗?

我有一些复杂的Observable结构,这可能是也可能不是坏主意,但这不是这个问题的焦点.这些结构的问题在于它们会产生很多UI显示的Observable对象的失效.就像我所知道的那样,当JavaFX UI显示某些内容时,它在其上注册了ChangeListener,因此任何使用延迟评估的尝试都会消失.也就是说,…

让你的javascript函数拥有记忆功能,降低全局变量的使用

考虑例如以下场景&#xff1a;假如我们须要在界面上画一个圆&#xff0c;初始的时候界面是空白的。当鼠标移动的时候&#xff0c;圆须要尾随鼠标移动。鼠标的当前位置就是圆心。我们的实现方案是&#xff1a;假设界面上还没有画圆&#xff0c;那么就新创建一个&#xff1b;假设…

Maven学习总结(6)——Maven与Eclipse整合

2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(六)——Maven与Eclipse整合 一、安装Maven插件 下载下来的maven插件如下图所示&#xff1a;&#xff0c;插件存放的路径是&#xff1a;E:/MavenProject/Maven2EclipsePlugin 进入到eclipse中的dropins目录…

为python安装numpy和scipy(federo)

为了进行数值计算&#xff0c;例如积分等等&#xff0c;需要安装numpy和scipy&#xff0c;其中scipy是依赖于numpy的&#xff0c;所以先要装numpy. 1&#xff0c; 通过下载http://pypi.python.org/pypi/numpy&#xff0c;然后python set.up install安装&#xff0c;不过有些行不…

php执行mysql insert,当执行mysql insert 时插入两条是咋回事

当执行mysql insert 时插入两条是怎么回事&#xff1f;本帖最后由 Eason_____________ 于 2013-07-25 11:25:44 编辑//做了一个手机上传图片到服务器的功能。但是获取到执行insert语句时都要执行两次&#xff01;//index.phpheader("Content-Type: text/html; charsetUTF-…

产品经理要读什么书?怎么读?

产品相关知识可以在&#xff1a;http://www.aipingce.com/进行学习&#xff0c;本文转自&#xff1a;http://www.aipingce.com/article-22960-1.html 首先&#xff0c;我个人还是非常推荐大家看实体书的&#xff0c;原因如下&#xff0c;算是做个分析吧&#xff1a; 电子书是免…

HTML5:理解head

2019独角兽企业重金招聘Python工程师标准>>> HTML文档的head部分&#xff0c;通常包括指定页面标题&#xff0c;为搜索引擎提供关于页面本身的信息&#xff0c;加载样式表&#xff0c;以及加载JavaScript文件&#xff08;出于性能考虑&#xff0c;多数时候放在页面底…

php定时任务为什么不好写,php解决crontab定时任务不能写入文件问题的方法分析...

本文实例讲述了php解决crontab定时任务不能写入文件问题的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;今天使用crontab写的定时任务没有执行&#xff0c;很纳闷。crontab.phperror_reporting(0);$time date("Y-m-d h:i:s",time());file_put_conten…

SpringMVC权限管理

2019独角兽企业重金招聘Python工程师标准>>> 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet&#xff0c;所有的请求都通过DispatcherServlet。 DispatcherServlet是前置控制器&#xff0c;配置在web.xml文件中的。拦截匹配的请求&#xff0c;Servl…

搭建Hadoop集群步骤

——基于三台机器 一、前提 1、 首先要有三台已联网机器&#xff0c;假设为A&#xff0c;B1&#xff0c;B2。其中A&#xff1a;192.168.81.91&#xff1b;B1:192.168.81.92&#xff1b;B2:192.168.81.93。机器装有Ubuntu10.04服务器版64位操作系统。 2、 对三台机器做相同的处…

使用DCloud+Framework7制作移动APP应用(一)

http://my.oschina.net/kenblog/blog/516201转载于:https://www.cnblogs.com/NodeStudy/p/5223273.html