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

曾几何时,Java 的兴起得益于众多大公司的涌入,Sun、IBM、SGI、网景、甲骨文、Borland 都在第一时间关注并投入大量资源来推动它的发展。比较典型的例子就是 IBM 做了自己的 Java SDK,并且做出了 SWT 界面框架,后面又开源了自己的 Visual Age for Java 开发工具,建立了 Eclipse 这个影响深远的平台。微软通过 Visual J++ 在 Java 这个领域插了一脚之后,很快就被 Sun 领头的大集团扫地出门。

从1998年10月6号到2000年6月22号,微软在开发工具领域就进入了一个缄默期,缺乏新鲜东西。而这个阶段,Java 正借着 J2EE 平台的不断升级在企业计算领域攻城略地。所以当微软终于在 Fortune 2000会议上由 Bill Gates 公布全新 .NET 平台战略时,对于熟知 Java 的程序员来说,明显绑死在微软 Windows 平台上的这些新技术即使看起来很美好,却并没有什么广大的前景。只有从 Windows 这只碗里取食的开发者,才会真正严肃的考虑它所带来的改变。

  • 全新设计的 C# 语言,兼有 Java 的严谨,Visual Basic 的简练,和 C++ 的全面。

  • 为 Visual Basic 社区开发了真正面向对象的 Visual Basic .NET 语言,和代码迁移路径。

  • 为 J++ 和 Java 社区开发了具有一定兼容性的 J# 语言。

  • 为 C++ 社区开发了 Managed C++ 扩展。

  • CLR 和 MSIL 和单一编程语言解耦,潜在支持更多的编程语言。

  • 语言和虚拟机的设计考虑了很多和既有技术(ActiveX、COM、COM+、DCOM、Win32 API)的集成问题,从而能够快速用来开发桌面、服务器端应用程序,完全取代老版本的 Visual C++ 和 Visual Basic。

在开发这个产品的漫长过程中,微软投入了不少明星研发人员,如 Anders Hejlsberg。Anders 在供职于 Borland 公司的十几年内,成功领导了 Turbo Pascal 和 Delphi 两个重量级产品的开发工作。而在加入微软公司后,又在 Visual J++ 6.0 和 C# 语言开发过程中发挥了关键作用。C# 语言可以看过是 Java/Delphi/Visual Basic三种语言的融合,汇集了三者的精华,所以也很快流行起来。

同时,也有新鲜血液在这个研发过程中脱颖而出,例如1997年5月才从 Duke 大学毕业的 Scott Guthrie 由于领导了 ASP.NET 框架的设计而受到关注。1999年11月他晋升为 ASP.NET 的 Lead Program Manager,而2001年1月就升为微软 Web Platform and Tools 的 Product Unit Manager,开始掌舵 Web 相关开发技术的研发。当然由于出色的领导才能,Scott 在后面的岁月里步步高升,如今已经是微软公司核心领导层不可或缺的支柱。

不过即使准备如此充分,甚至从2000年起微软就先后发布了多个测试版本以便开发者熟悉和了解这个新的技术平台,2002年2月13日正式发布的 .NET Framework 1.0 和 Visual Studio .NET 2002 也并没有覆盖到一个开发者日常开发所需要的所有工具层面。这个关键时候微软技术社区及时的填补了空白。几个很早就由社区领导的项目在这方面显得尤为重要:

  1. NUnit 单元测试框架早在2000年6月便出现了。早期是 JUnit 的简单模仿,而后期开始使用 attributes 等 .NET 独有的特性来简化用户体验。

  2. SharpDevelop 开源 IDE 于2000年9月11号开始启动,提供了一个免费而且比 Visual Studio 更加轻量级的开发工具。

  3. 2000年11月,GNOME 项目的领导人 Miguel de Icaza 考虑将 .NET 和 C# 带到 Linux 操作系统,使得 CLR 和 MSIL 成为跨平台的技术。Mono 项目应运而生,并与2001年6月30号正式启动。

  4. 2001年1月 Lutz Roeder 开始发布免费的 .NET Reflector 反编译工具,使得反向工程他人代码成为一个十分简便的过程。

  5. 2001年6月,Neoworks Limited 公司开始模仿 log4j 项目来开发 log4net,并与2004年2月将它捐赠给 Apache 基金会。

  6. 2001年7月5日,Gerry Shaw 启动了 NAnt 项目,尝试模仿 Ant 项目建立一个适合 .NET 项目的编译引擎。

  7. 2001年9月29日,Kral Ferch、Jason Diamond等人启动了 NDoc 项目,灵感来自 JavaDoc。

微软也建立了一个名为 GotDotNet 的站点来聚合这些社区项目,以及数以百计的范例代码。

这个阶段的 .NET 依然处于一个十分初级的阶段,表现为

  • 模仿 Java,尤其是社区项目基本都是 Java 领域对应项目的克隆。

  • 微软设计的 Windows Forms 和 ASP.NET 框架虽然简便易用,和 Windows 平台已有技术的集成也很完善,但完全绑定在 Windows 平台上。

  • 更为重要的是,微软没有能够设计出可以比拟 J2EE 平台的企业级开发框架。 

在后来的数年之中,Java 技术一直在广度上压过 .NET 一头,很多新兴技术例如 Hadoop 都使用 Java 开发。这既于 Java 跨平台的天生优势有关,也得益于 Sun 多年后开源 Java 平台的努力。

微软未来将会如何推动 .NET 平台的发展呢?下节我们继续回顾。


相关文章:

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

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


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

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

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

相关文章

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

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

Entity Framework Core的贴心:优雅处理带默认值的数据库字段

对于用于保存记录添加时间的数据库日期字段&#xff0c;我们通常会设置一个 GETDATE() 的默认值&#xff0c;而不是在应用程序的代码中获取当前时间进行保存&#xff0c;这样可以避免由于web服务器时钟不同步引起的时间偏差。 Entity Framework Core 在设计时贴心地考虑到这个…

JS中使用工厂模式创建对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>function createPerson(name , age ,gender){//创建一个新的对象var obj new Object…

深度历险:Redis 内存模型详解

转载自 深度历险&#xff1a;Redis 内存模型详解 Redis 是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说 Redis 是实现网站高并发不可或缺的一部分。 我们使用 Redis 时&#xff0c;会接触 Redis 的 5 种对…

.NET的一点历史故事:误入歧途,越陷越深

移动计算的时代其实早已有了苗头&#xff0c;起码微软的 Windows CE、诺基亚的 Symbian 都曾经给手机用户多少带来了一些便利&#xff0c;黑莓则由于接入了企业邮件等商业应用而日进斗金&#xff0c;甚至 Sun 也给自己的 Java 平台做了一个 J2ME 标准&#xff0c;试图用 J2EE 那…

bootstrap样式代码案例

运行结果如下所示&#xff1a; 代码如下所示&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,user-scalableno,initial-scale1.0,maximum-scale1.0,mi…

JS中用构造函数创建对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>/* 构造函数的执行流程&#xff1a;* 1.立刻创建一个新的对象* 2.将新建的对象设置…