C#发展历程(摘自贴吧)

历史是一件很有趣的事情,当然你也可以选择无视历史的存在,不过,以史为鉴,可以避免走很多弯路。本来打算直接介绍C#4.0的新特性,但最近回过头来看C#的发展史,觉得特别有意思,不禁感叹那些大牛们的实力,我怎么到现在也只有这点程度呢?

说到C#,一定要提的人,就是Anders Hejlsberg,这个人是个大牛,绝对的大牛,为什么呢?因为Pascal和Delphi是他一个人开发的。然后9几年的时候被微软从Borland挖过去,过了不久,我们就有了C#,也就是说,我们现在是在用着人家的孩子。人家生了那么多孩子(光荣“妈妈”吖!)给我们玩,丰富我们的生活,不得不膜拜一下!

其实最初C#不叫C#,它有个更好听的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到1999年7月,COOL被正式更名为C#,当然,那个时候我小学还没毕业,从而从侧面再次证明了Anders多么牛!不知道在我的小孩读小学的时候我是不是也能写门语言出来呢?

现在,我们有了C#,但是有一个问题,我们为什么要C#呢?要性能,我们有C,要面向对象,我们有Java,要两者兼顾,我们有C++,微软为什么还要弄一个C#出来呢?

不知道各位是不是对Visual Studio 6.0还有印象,曾经有个叫做Visual J++的工具,它是Visual Studio 6.0的一部分,我记得当时为了学VB去装VS6.0,看到一堆现在已经绝迹的东西,比如Fox、J++之类的。对于Java,微软最初只是觉得它是一个能够解决C/C++的一些无法解决的问题而存在的语言,并且,通过Visual J++这个产品,使其能够和Windows系统完美的集成在一起,不过呢,Sun不干了,我的Java凭什么要被你这么搞!于是太阳不再照射窗口了,反而告它,于是,微软只能停止了Visual J++的开发。然后微软又经过了一些纠结,比如COM技术(在二进制层面的统一),为了无缝的集成这一系列的东西,微软提出了一个叫做“COM虚拟机”的东西,这个东西借鉴了Java虚拟机的思想,但是,虚拟机,毕竟已经被人家Java用掉了,怎么办呢?改名!讨论来讨论去,我们就有了一个很响亮的名字:Common Language Runtime,简称CLR,多牛的名字,公共语言运行时。好吧,既然它都叫公共了,总不见的只有一门语言在上面跑吧,于是衍生出C#, VB, IronPython, IronRuby等等。那既然有很多种语言都能在这个CLR上面运行,就得有规范来约束这些语言的行为,于是,微软又提出了一套规范,叫做Common Language Infrastructure,简称CLI,叫做公共语言基础设施。这个CLI只是一个规范的定义,最终,实现这套规范的一个实例,就是我们熟知的.NET。当然其实只要你有兴趣,完全可以根据这套规范去实现自己的CLI,叫DotMe之类的。

以上这些是C#从创建之初到成型的基本过程,但有个很严重的问题,C++是从C进化过来,在C的基础上进行扩展,完全的兼容C,所以名字就是C后面加两个加号,但是C#呢?为什么要改名字?又为什么改成C#呢?

有这么几个传说…现在算是无法考证,毕竟我见不到微软的这帮大牛们。
首先,相传这些大牛很讨厌搜索引擎,于是,他们就把“#”这个大部分搜索引擎都不支持的字符,放到这么语言的名字中来,算是公报私仇吧……
第二个解释是,“#”是音乐当中升调的记号,俄,不知道大家对音乐了解多少,b是降调,#是升调,升降半度……这个,乐谱的问题以后可以mail to: littlepush@gmail.com, 我们私下讨论。升调,既是说C#是一个比较高级好用的语言,是一次升华。
第三个,当然也是我最喜欢的一个解释,“C++++”,大家有没有发现,把#拆开来就是4个加号?C到C++,就是在C的基础上引入了面向对象,当然要从C++再进化,俄,那就再加两个加号!C++++,这么写多帅,不过不太方便,于是就变成了C#
当然这些都是传说,各方说法不一,我们也没必要深究,看过算数。

时间从1999年7月来到2002年,C#1.0正式发布,伴随而来的Visual Studio.NET 2002也一起出来,只不过好像我从来就么见过2002这个版本,我接触过的最早的C#版本,是在2003年发布的Visual Studio.NET 2003中一起出现的C#1.1,当然这个版本的生命力真的很顽强,到现在还有人在用,当然我也佩服那些还在用着没有泛型支持的C#的大牛们。
C#1.1这个版本是对C#1.0的一些修正,我们将这两个版本统一称为C#1.x,这个版本非常像Java,但又不是Java,在语言上,像C++,但是在运行上,又像Java,这一特性,一直延续到C#3.0的时代。

随后,到了2005年,微软再次扔下了一颗重磅炸弹——Visual Studio.NET 2.0,伴随而来的C#2.0也正式发布。2.0新增了对泛型的支持。吖!这就是我们在C++中所喜欢的模板template!C#终于也可以让那些变态的程序员们一偿夙愿,写一些晦涩难懂的代码来忽悠人了!这个版本的.NET和C#,是目前的主流开发版本,并且在短期内还不会被完全替代。由于增加了模板的支持,为了更好的实现编译时的类型推断和检查,达到C#强类型语言的特性,使得C#的编译器变得非常庞大。当然,如果你说你不知道什么叫模板,俄,那个,我救不了你,Google去吧。

2007的PDC大会上,微软个所有C#程序员带来了惊喜(恐惧?梦魇?)——代号为“魔鬼”的C#3.0!C#2.0在语言能力上基本已经能够完全替代C++了,并且在易用性上要远高于C++,但C#的开发不能停吖!既然语言本身的能力达到了一个瓶颈期,那就从别的地方入手,于是,新增了LINQ这个项目(Language Intergraded Query,语言集成查询)。那真的是一个魔鬼吖!从此你不用写很复杂的循环嵌套只为了从一个链表里面查找一些数据,一句类似于SQL语句的表达式就能够处理所有的一切。还有那个Lambda表达式的引入,使得C#在编译器上已经完全超越了C++。不过说穿了这些都是“语法糖”,编译器并不会为这些代码做特殊处理,唯一做的事情,就是翻译成C#2.0的代码……俄,不过这种糖衣炮弹确实方便了我们大众程序员吖。

当当当!2009年了,微软总该要有所动作了!没错,我们的Visual Studio.NET 2010携带着C#4.0终于出现了!它的新特性将会是接下来一系列文章的主旨,这里就先买个关子!

C#从1.0升级到4.0,这里有个小小的插曲,我将其称之为:版本号之谜。细心的人应该都已经发现,在Visual Studio 1.0和2.0 阶段,CLR的版本号都是跟随C#的版本号增长的,但Visual Studio2008仅升级了C#、.NET的版本号,而.NET的运行时库CLR却依旧停留在2.0的版本上,当然啦,C#3.0仅仅增加了语法糖,并没有对语言本身做任何修改。但到了Visual Studio2010,微软统一了现在所有产品的版本号,统统叫做4.0,当然包括CLR。于是……CLR3.0,就不复存在了。


***************************************************************************

请看:“时间从1999年7月来到2002年,C#1.0正式发布,伴随而来的Visual Studio.NET 2002也一起出来,只不过好像我从来就么见过2002这个版本,我接触过的最早的C#版本,是在2003年发布的Visual Studio.NET 2003中一起出现的C#1.1,当然这个版本的生命力真的很顽强,到现在还有人在用,当然我也佩服那些还在用着没有泛型支持的C#的大牛们。”

posted @ 2013-12-17 17:39  酷乐公司  阅读(453)  评论(0编辑  收藏  举报