.NET 的一点历史往事:和 Java 的恩怨

在编程语言的发展历史上,1995年应该是个特殊的年头,毕竟这个年头诞生了两个后来二十多年影响深远的语言。1995年5月23日的 SunWorld 大会上面 Sun 公司高调发布了自己研发了近五年的 Java 语言和 JVM 平台。当年的十二月,网景公司将自己刚刚预览的 LiveScript 语言改名为 JavaScript。由于微软正在和网景进行轰轰烈烈的浏览器大战,这两个和万维网有着紧密联系的语言同时得到了微软的关注和支持。

JavaScript 相对简单,所以微软直接反向工程,做出了自己的 JScript 引擎。但是在 Java 这个方面,它采用了完全不同的方式,1996年3月12日直接从 Sun 购买了 Java 授权,并且在当年10月15号开始提供 Windows 平台的 Java SDK。1997年1月到3月间,微软就隆重发布了自己的 Java 开发工具,Visual J++ 1.0/1.1,这个过程快得令人惊诧。

微软在 Visual J++ 方面的投入带来了立竿见影的效果:

  • Java 是一个比较完善的面向对象语言,这是微软当时的 Visual Basic 和 Visual C++ 两个开发工具都不能相提并论的。

  • 微软为 Visual J++ 做的扩展 WFC 和 J/Direct 使得这个语言和 Windows 平台 API 之间有了更加紧密的联系。

  • Visual J++ 在 Windows 原生程序和 Office 开发方面都很便利,能够和快速开发工具 Visual Basic 平起平坐。

所以假如 Sun 公司这个时候睁只眼闭只眼,放任自流,那么 Visual J++ 很可能就是今天绝大部分 Windows 开发者的首选。这样服务器端的 J2EE,桌面端的 Visual J++,和移动端的 Android 三驾马车,是不是就让 Java 语言一统天下呢?

然而 Sun 这个公司在推广 Java 方面有点顽固不化的想法,一定要坚持“一次编写到处运行”,一定要坚持 Java 和 JVM 的纯粹,所以对于微软忽视 JNI 等标准部件、另起 WFC 等非标准部件的小动作,直接予以打击,开启了绵延数年的法律官司。这场官司也使得微软在1996年10月6日发布了Visual J++ 6.0之后,这个开发工具便被打入冷宫。

微软为什么会全面退出 Java 领域呢?

  1. 语言和平台的规范由 Sun 主导,Sun 在制定标准和接纳新事物方面过于强势。这个问题在数年之后再次发生,就是谷歌抛开 Sun 主导的 J2ME 规范,做了自己的 Android 平台。

  2. Java 语言本身依然有它尚不成熟的地方,例如没有泛型,没有简单的事件机制。这时候微软已经从 Borland 挖来了 Anders Hejlsberg 这样的编辑器大师,完全可以抛开 Java 语言的枝梧来做新的尝试,也就是C#。

  3. JVM 平台完全为 Java 一个语言设计,bytecode 很难成为其他语言的目标。微软可以设计一个更加通用的虚拟机平台,和更好的中间语言。这也就是微软后来的 CLR 和 MSIL。

这些因素使得微软最终招兵买马,开始研发自己全新的 .NET Framework 平台和新版开发工具 Visual Studio,希望在后续的开发工具战役中后来居上。

值得注意的是,毕竟微软从 Sun 购买了 Java 授权,这个授权使得微软得以看到 Java 的源代码,知晓了 Sun 的相关专利,所以在发布新平台之前,法律方面的问题仍是必须加以解决的。2001年1月,微软和 Sun 终于初步和解,一个新的时代即将开始。

原文地址:http://weibo.com/ttarticle/p/show?id=2309404102044121223524


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这可能是史上最全 Redis 高可用解决方案总结

转载自 这可能是史上最全 Redis 高可用解决方案总结 本文主要针对 Redis 常见的几种使用方式及其优缺点展开分析。 一、常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本; Redis 多副本(主从); Redis S…

规模化微服务——《微服务设计》读书笔记

改变思维的角度:故障无处不在 当微服务规模化后,故障是无可避免的,以往我们总是想尽力避免故障的发生,而当故障实际发生时,我们往往束手无策。我们花了很多时间在流程设计和应用设计的层面上来阻止故障的发生&#xff…

JS中的基本和引用类型传递的比较

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 基本数据类型* String Number Boolean Null Undefined* * 引用数据类型* Object* * JS中的变量都是保…

如何在 ASP.NET Core 中发送邮件

前言 我们知道目前 .NET Core 还不支持 SMTP 协议&#xff0c;当我么在使用到发送邮件功能的时候&#xff0c;需要借助于一些第三方组件来达到目的&#xff0c;今天给大家介绍两款开源的邮件发送组件&#xff0c;它们分别是 MailKit 和 FluentEmail &#xff0c; 下面我对它们…

一文搞懂 Java 线程中断

转载自 一文搞懂 Java 线程中断 在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程&#xff0c;那么还有别的可以终止线程的方法吗&#xff1f;答案是肯定的&#xff0c;它就是我们今天要分享的——线程中断。 下面…

.NET的一点历史故事:招兵买马和聚义山林

曾几何时&#xff0c;Java 的兴起得益于众多大公司的涌入&#xff0c;Sun、IBM、SGI、网景、甲骨文、Borland 都在第一时间关注并投入大量资源来推动它的发展。比较典型的例子就是 IBM 做了自己的 Java SDK&#xff0c;并且做出了 SWT 界面框架&#xff0c;后面又开源了自己的 …

教你用 3 台机器搞定一个 Redis 高可用架构

转载自 教你用 3 台机器搞定一个 Redis 高可用架构 基于内存的 Redis 应该是目前各种 Web 开发业务中最为常用的 key-value 数据库了。 我们经常在业务中用其存储用户登陆态&#xff08;Session 存储&#xff09;&#xff0c;加速一些热数据的查询&#xff08;相比较 MySQL…

调用函数的返回值和函数对象本身

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>function fun3() {function fun4() {alert("我是fun4");}//将fun4函数对象…

使用java解析XML文件的步骤

以前的时候&#xff0c;也解析过&#xff0c;今天又拿出来解析就让忘记怎么解析了&#xff0c;后来在网上查还有自己想&#xff0c;终于解析出来了&#xff0c;下面就是原XML文件&#xff1a; accp.xml <?xml version"1.0" encoding"UTF-8"?> <…

世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议

和大家的直觉反应比较不同&#xff0c;但谷歌&#xff0c;这家业界首屈一指的互联网搜索公司&#xff0c;要向她的云平台里加入新的搜索服务了。谷歌云平台一直向企业客户出租计算、存储和网络等服务&#xff0c;现在谷歌则要与Elastic公司合作&#xff0c;为谷歌云提供新的搜索…

使用java读取文件并输出

通过Reader读取文件中的内容&#xff1a; 下面是文件&#xff1a; test.txt: 1、看着街上的人群&#xff0c;各个都把自己捂得严严实实的&#xff0c;好似一个个奇怪的布包裹。窗外的天&#xff0c;是灰蒙蒙的一片&#xff0c;灰色的霾把所有的物体都笼罩了起来。2、它来时&am…

Akka系列---什么是Actor

本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间是可以相互沟通,所有的沟通都是通过Message 比如说一个呼叫中心,数以百万计的客户可能会呼叫一个1-800的…

架构师的工作都干些什么?!想做架构师必看

转载自 架构师的工作都干些什么&#xff1f;&#xff01;想做架构师必看 之前有网友说想看架构师升级的文章&#xff0c;所以写了本文。先给本文中架构师做个定义&#xff1a;第一&#xff0c;能力上达到&#xff08;似乎是废话&#xff09;&#xff0c;第二&#xff0c;公司…

使用java将字符串写入到指定的文件中

指定的字符串&#xff1a; 白天走在街道上&#xff0c;伸手不见五指&#xff0c;周围的建筑全被雾笼罩了&#xff0c;在家里通过窗户往外望去&#xff0c;外面就像仙境一般&#xff0c;雾把所有的东西都淹没了&#xff0c;能看到的&#xff0c;只有白色的雾。&#xff01;文件…

Mybatis入门 使用XML

1、项目结构 2、详细代码 数据库&#xff1a; 1、创建实体类bean package com.itheima.domain;import java.io.Serializable; import java.util.Date;/*** Created by Administrator on 2019/10/11.*/ public class User implements Serializable {private Integer id;priv…

.NET的一点历史故事:擦肩而过的机遇

Sun 公司曾经借由 SunOS/Solaris 这个 UNIX 操作系统&#xff0c;SPARC 硬件平台和 Java 语言建立了一个商业帝国。Sun 工作站应该是很多资深业界大佬们偶尔还会拿来回忆的一个经典产品。不过时间进入二十一世纪第一个十年的中段&#xff0c;它已经在竞争对手的轮番进攻下显出了…

Java 中的 String 真的是不可变的吗

转载自 Java 中的 String 真的是不可变的吗 我们都知道 Java 中的 String 类的设计是不可变的&#xff0c;来看下 String 类的源码。 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for char…

Mybatis入门 使用注解

使用XML方式地址为Mybatis入门 使用XML 1、目录结构 2、需要修改的地方 1、mybatis的配置文件 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.…

浅析如何在Nancy中生成API文档

前言 前后端分离&#xff0c;或许是现如今最为流行开发方式&#xff0c;包括UWP、Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互。 但是这样对前端开发和APP开发就会面临这样一个问题&#xff1a;如何知道每个API做什么&#xff1f; 可能&#xff0c;…

一文告诉你如何导出 Git 变更文件

转载自 一文告诉你如何导出 Git 变更文件 有时候我们想导出某次版本提交时有哪些变更的文件&#xff0c;在 svn 中有一个 export 功能&#xff0c;很方便&#xff0c;如下图所示。 在 Git 中我也找到了以下两种方法。 方法1 使用 git 自带命令 git archive, 语法如下。 g…