学习笔记,C语言的演变史
分类:web前端

C#学习笔记(二)

 

1972 – C语言的先驱——B语言,被贝尔实验室开发。B语言是一个很快速的,容易维护的,而且对于从系统到应用开发是很好用的。设计这门语言的整个团队被马上解雇了,因为他们干了一件和电话通讯不相干的事情。最后这个项目转给了 Dennis Ritchie。他把这个语言变得不容易理解,很难维护,而且,只能用于系统方面的编程。而且,他还设计了一个指针系统,保让每一个程序都超过500行,并可以使用操作系统的指针。

write by cash(天下第七)
2002.01.20
版权所有,翻录不究
cashcao@msn.com

开始

1982 – 大家发现有97% 的C程序调用产生了“缓冲区溢出”问题。于是,C 程序员们开始意识到,就算是不必要也必需要初始化变量。然而,强制性的变量初始化这个明智的决定,很难影响了当时已经写成了的97%的C程序,所以结果什么也没有发生。

选择

2000年6月我大学毕业,从北京回到了石家庄,正式开始了我的职业生涯。如前所述,一开始我使用的语言是asp,我一直认为这不能称之为编程,因为asp不是一种编程语言,把它叫做动态网页实现技术可能更好。另外,asp很简单,并且,简单就是它全部的特点--这使得它很容易就能学会(在后来的工作中,我接触到许多应聘的学生,他们都告诉我自己精通asp语言)。虽然学习起来很简单,但是在使用起来却不得不多费点儿劲儿:我还能记得自己晚上一个人在办公室用VI一步一步调试某一个网页的情景,每当遇到挫折失败的时候,总是想起给桐桐打一个电话,听听她的声音。如你所知,我总是遇到困难。

1984 – 操作系统出现了“错误指针”的问题数量开始戏剧性地增涨。

我身上携带着精神、信仰、灵魂
思想、欲望、怪癖、邪念、狐臭
它们寄生于我身体的家    
我必须平等对待我的每一位客人
-----------伊沙:《原则》

现在你能看出来,我不是高手,只是一个低手...

1985 – 一系列的让C语言有面向对象能力的解决方法出现了,一个叫“C With Classes”正准备商业化。然而,大家觉得名字“C With Classes”太清楚和容易被理解了,所以,最终的商业版本叫做—— C++。

我的名字是cash,所以我很功利主义;
我的星像是Leo,所以我很大男人主义;
我的语言是C#,所以我有点儿拿不定主义。

2000年6月我大学毕业,从北京回到了石家庄,同一时间(美国西部时间6月22日上午),微软公司在位于美国西雅图郊外的总部内邀请新闻记者、新闻分析家等约400人,举行了新闻发布会“Forum2000”,宣布正式推出.Net计划。这个计划中包括了新的网络计算平台(.Net Framework)、新的语言(C#)、新的开发工具(Visual Studio.Net)以及asp的下一个版本ASP.NET,后者最开始被称为ASP+。那时候我学习的主要兴趣就在ASP.NET上,并且通过这个窗口开始了解Microsoft.Net的各个方面。

1986 – C语言成为最流行的语句,其被很多业界分析师推荐于业务应用。他们向全世界宣称——由C语言写成的应用将可以运行在很多不同的平台上的,是跨平台的。目前看来,这些众多的分析者在当时有可能是因为某种迷幻而导致其大脑被所蛊惑了。

/* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了一个爱情故事,可不要奇怪。有很多人用程序来表述爱情,在其中我能看到有Money,有Girl,有一些还涉及到Sex,但是我没有找到Love,我始终相信这世上有一种力量直接来自于爱情,到现在仍然相信。*/
C#(读作C sharp),是Microsoft公司新推出的(?)专为.NET设计的一门语言,号称“C/C++家族中第一种面向组件的语言”。很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识,没有也不要紧,我会在文中尽量列出相关的link,鉴于互联网瞬息万变的特点,若某一链接不可用,请自行至Google查询。
如前所述,我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同,可是几个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论,最终选择了C#,请不要问我为何做出这样的选择,很多人认为中文是世界上最美丽的语言,可是华人世界以外有谁在讲汉语? 另外我发现论坛上学习Java的人都非常的有个性,当有人问起学习哪种语言更好时,他会打出几百个“JAVA”来,填满整个屏幕,也不说是为了什么。我觉得这样做未免有些太霸道了,如果你说这叫偏执狂我也不反对,虽然我是狮子座,可也不想被人这样看。
在C#刚刚推出的时候,大多数的程序员都不免吼上两句——不是因为高兴,而是因为又多了一种语言。他们觉得现在的语言太多了,没有必要再多出一种来添乱子。但是当他们看完C#的文档后又开始高兴起来,因为C#是如此简单:事实上,简单正是C#最大的特点。除此之外,它还具有现代、面向对象、类型安全、版本控制、兼容、灵活等特点。详细介绍请参阅rainbow(一个长着胡子的彩虹)翻译的<> ,前几章非常的有趣。

ASP.NET仍然不能称之为一种编程语言,但是现在可以把它看作是一个创建、管理、部署Web应用程序的平台。可以使用任何.Net语言在这个平台上开发互联网应用程序,这其中当然包括C#。它们之间的关系可以从下图中看出:

1988 – 业界的这些分析家们因为“摇头丸”吃完了。所以,在他们的幻觉过去以后,他们注意到,使用C语言来开发业务应用会增加5倍以上的开发时间,并且程序也不具备可移植性。他们开始停止向大众推荐使用C语言来开发业务应用了,只能很少一部服用可卡因的人开始转向推荐大众使用C++语言写业务应用程序,他们说,“那是面向对象的,所以,代码是很容易重用的”。

看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说Microsoft越来越不要脸也极为生气,因为相比之下,Sun也不怎么样,微软已经将C#提交设在日内瓦的ECMA(European Computer Manufacturers' Association,国际标准化机构欧洲电子计算机工业会)并获得批准。Sun就从来没有将它的Java交给过ECMA,以至于正当Microsoft尽力在Visual J++基础上拓展Java功能,并使之与Windows操作系统紧密结合在一起的时候,Sun公司对Microsoft提出了法律诉讼,控告Microsoft违反了许可证协议中的条款,最终的结果是Microsoft公司不得不停止其Visual J++产品的开发。(Microsoft后来在完全面向.NET框架的开发语言集中加入了Visual J#.NET,算是对Java语言用户的一种照顾。)
有人说,选择C#意味着选择MS(在中国的程序员当中,这并不是件值得自豪的事。如果你还不能理解这种心情,可以试想一下有人很认真地对你讲他喜欢听毛宁的歌)。事实上,通过ECMA标准的C#可以由任何人在任何平台上设计出它的开发程序。比如Ximian公司的Mono工程,可以使开发者能够编写同时在Windows和Linux上运行的.Net程序,这些程序甚至还可能在其它非Windows的操作系统上运行,比方Unix。这一段时间我正在Linux下试验这个工程,遗憾的是,还没有成功。
一位师兄对此种比较颇为不屑,他认为只要选一种语言去学就好了,“重要的是你要用它,并且做的比别人好。”这让我想起来一直都很喜欢的那个歌:把你自己该做的那份工作,做得比别人出色。年轻的时候我老是用这句话自勉……

图片 1

1990 – 在这个时候,所有的C编译器都转到了C++编译器上。但是,因为大多数的C++程序员并没有使用C++中那些面向对象的语言特性。也就是说,在实际上来说,那种浮肿的代码结构加上操作系统指针的代码被一种叫面向对象的编译器编译。

写到这里我发现这个故事还没有提到桐桐,这篇东西是为她而作。我早在十八个月以前就答应了她,我答应了她很多事,但还没有完成一件,现在我要一件一件的去实现。所以这个故事还应该有个更好的开始。

这就是著名的.Net 平台结构图,从这个图上可以看到,ASP.NET、Windows Forms和VS.Net都不过是.Net开发平台的一部分,用于.Net应用程序的开发及展示。.Net 平台的核心技术为:通用语言运行时(CLR:Common Language Runtime)、基类库(Base Class Library)、.Net语言及Visual Studio.Net。

1990 – 在雇佣了一些转向“吸胶毒”的分析师后,Sun决定要创造一种叫Oak的语言,这种语言主要用于电视的机顶盒。因为当时几乎所有的程序员的DNA中都有C语的基因,所以,这个语言向C和C++中大量地借鉴了很多它们的语法和编程思路。然而,机顶盒上没有操作系统,也就不存在指针,所以,他们把指针从这门语言里给去掉了。

2000年6月我大学毕业,从北京回到了石家庄,到一家什么都做的公司上班(做一个网站),最开始制作界面,然后用asp编程,如果你用过asp就会知道,这是个很无聊的工种。在此之前我在一家报社实习,为他们的网站做设计和动画。在那里我认识了桐桐。

从这个图上也可以看出,.Net Framework是架构在Windows平台上的一个虚拟的运行平台,你可以想象将最下层的Windows换作其它的操作系统,比如说Linux,一样可以实现使用符合了CLS(Common Language Specification,通用语言规范)的.Net语言(VB.Net、C#、JScript.Net等)来创建ASP.NET或Windows Forms(可能会叫做Linux Forms)应用程序的功能,这其实就是我们前面介绍的Mono计划所要实现的功能。所以可以这么认为,理论上,C#是一种可以跨平台的语言,这很像Java,另一个比较像Java的地方是,C#也是一种(特殊意义上的)解释性的语言。同Java一样,C#编写的程序代码也是先通过C#编译器编译为一种特殊的字节代码(中间语言,Microsoft Intermediate Language,MSIL),运行的时候再经由特定的编译器(JIT编译器,Just In Time,JITer)编译为机器代码以供操作系统执行。

1994 – Sun公司里的某个人意识到为一个机顶盒开发一个语言是多么愚蠢的事情。于是,这个语言更名为Java,并且为其注入了“Internet”的特征,从而让其成为一个真正可以被移植的语言。其市场营销上相当成功,而那时有3%的业内人士开始明白什么是Internet,同时,那些精神不正常的分析师们还在不停地嗑药并向大众鼓吹他们的神话——“跨平台移植性”。

那时候她还在上学。

不仅是C#语言,所有.Net语言(将会包括我们常用的几十种现代的编程语言)都可以编写面向CLR的程序代码,这种代码在.Net中被称为托管代码(Managed Code),所有的Managed Code都直接运行在CLR上,具有与平台无关的特性。

1995 – Sun 向业界的分析师们提供了免费蘑菇迷魂汤,导致那些分析师在喝下汤后,马上开始写下“Java是一门未来的可移植的和Ineternet高度可集成的语言”。

>>>未完,待续...

解释性的语言很安全,并且可以通过它的运行平台为其赋予更多的功能,比如自动内存管理、异常处理等。事实上,C#语言的许多特点都是由CLR提供的,下面的CLR结构图说明了这一点。

1996 中 – 17,468,972 篇文章出现,描述了Java是怎么一门未来的语言。这也是Java Applet开始进入Web页的时代。

图片 2

1996 末– 程序员开始使用Java applet创建他们的Web页面,然后他们开始因为挫折和沮丧开始集体自杀。此时,那些分析师开始增大蘑菇迷魂汤的剂量。

可以看到,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)、多线程支持(Thread Support)这些C#的特点都是由CLR来提供的。CLR最早被称为下一代Windows服务运行时(NGWS Runtime),是直接建立在操作系统层上的一个虚拟的运行环境,主要的功能是管理代码的运行。在.Net 平台结构图中,CLR的上面是.Net的基类库(Base Class Library,BCL),这组基类库包括了从基本输入输出到数据访问等各方面,提供了一个统一的面向对象的、层次化的、可扩展的编程接口。从.Net 平台结构图中也可以看到,基类库可以被各种语言调用和扩展,也就是说,不管是C#、VB.NET还是VC++.NET,都可以自由地调用.Net的基类库。事实上, C#并没有属于自己的类库,它所使用的编程接口就是.Net提供的基类库。所以,在决定使用C#时,真正需要费工夫学习的其实是.NET框架的基类库:C#自身只有区区77个关键词,而且其语法对许多程序员来说都是他们非常熟悉的。BCL则相反,它包含了超过4500个以上的类和无数的方法、属性,在你的C# 程序中随时都可能会用到它来完成自己的任务。

1997 – 因为接受了产生幻觉分析师的建议,Corel 决定重写他们的应用,包括 WordPerfect,当然,是用Java写的。最终的结果是,这是迄今为止比“打字机”还慢的字处理软件。

很多人都思考过应如何开始学习一种新的语言,对于一个有经验的编程人员来讲,这确非难事。但是对于一个对编写代码一无所知的人而言,如果你是以C#开始你的编程之旅的,数目繁多的概念及新名词可能会令你有些不知所措。这时候请注意你的学习顺序,任何一种编程语言的学习都是按照运行平台、语法、基类库直至各方面的应用这一顺序来进行的,但是在实际的学习中,它们之间并不是孤立的。推荐的方法是:对运行平台和语法有了一个整体的认识后,在应用中学习各种基类库的用法。鉴于C#这一语言的特殊性,全面了解它的运行平台(.Net Framework)必会使你的学习事半功倍。所以请记住上面提到的两个图,在以后的学习中,虽然可能不会明确的涉及到它们,但是在整个C#的学习过程中,它们却是无处不在的。

1998 –  在意识到applet已在快速枯萎,Sun又一次的重新配置了Java,这次,他们叫Severlet,这是一个服务器的程序语言。这个设计在抄袭了Microsoft Transaction Server ,并且,他们说服所有人这个设计是他们创造的。

还有一个很重要的概念需要你明白,这就是公共语言架构(Common Language Infrastructure ,CLI)。CLI是CLR的一个子集,也就是.NET中最终对编译成MSIL代码的应用程序的运行环境进行管理的那一部分。在CLR结构图中CLI位于下半部分,主要包括类加载器(Class Loader)、实时编译器(IL To Native Compilers)和一个运行时环境的垃圾收集器(Garbage Collector)。CLI是.Net和CLR的灵魂,CLI为IL代码提供运行的环境,你可以将使用任何语言编写的代码通过其特定的编译器转换为MSIL代码之后运行其上,甚至还可以自己写MSIL代码在CLI上面运行。如你所知,欧洲计算机制造商协会(ECMA)已经于2001年10月13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也同意该标准进入该组织的审批阶段。并且,作为.Net与CLR的核心部分,CLI与C#也同时获得了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准,你可以自己写出能够运行于任何操作系统上的.Net平台(只要你愿意)。如前所述,著名的Mono项目就是这么干的,Mono项目包括三个核心的部分:一个C#语言的编译器,一个CLI和一个类库。在Java的世界中,这项工作是由SUN公司完成的,SUN针对不同的操作系统开发出相应的Java虚拟机以便让一个由Java开发的应用程序运行在不同的操作系统上,但是迄今为止还没听说过微软有这方面打算(为用户提供非Windows系统的.Net平台)。

1999 – 业内那些喝多了的分析师们用一种咆哮的方式向大众介绍了Java 2 Enterprise Edition 。 21,499,512 文章被写出来。但是,实际上并没有人使用,因为J2EE太不成熟,而又太贵了。

2000年的6月还有很多事情发生,2000年的6月我在学校做毕设,晚上就跑到系试验室看欧锦赛,我很喜欢的坎普君(Bergkamp)大放异彩,帮助荷兰队6比1大胜南斯拉夫,米哈伊洛维奇 (Mihajlovic)在比赛最后莫名的笑容永远留在了我的心中。说实话,那时候只顾着看EURO2000,可没管什么.Net、.Not。另外,离别的愁绪围绕在每个人的周围,广播里开始反反复复播放一些古老的歌曲,不知道为什么,恋曲1980却是那时候的最爱。

2000 – J2EE 最终还是运转起来了(一点点)。而且,所有的Java卖主们开始准备向其砸钱,与此同时,Microsoft 宣布了.NET,这是一个包括了所有的J2EE功能但没那么贵的产品。实际上来说, Microsoft 决定让Windows的用户免费使用.NET 。 Scott McNealy 很愤怒,其对Microsoft开展了相关的法律诉讼。

后来,我们都毕了业。如你所知,我离开了北京。

.NET 包括了最新的C家族语言,叫C#,发音是“C-pound”,继承最家族的传统,使用着一个愚蠢的名字。

>>>未完,待续...

2001 – Microsoft 的市场部意识到,在市面上没有人谈论他们的产品,他们找了其中一个程序员一起吃中饭,才发现,他们把C#叫做 “C sharp”。

2002 – C# 成为 Microsoft .NET的一部分。 C++ 的开发者在 Microsoft 平台上为 “managed code”而欢呼雀跃,也就是说,他们最终得到了一个内存自动管理的功能,这一功能正是1991年的Visual Basic 及1995年的Java所创建的 。

copyright (C) 1996-2006 by Billy S. Hollis, originally posted on dotnetmasters.com 13 January 2006

 

– C语言的先驱——B语言,被贝尔实验室开发。B语言是一个很快速的,容易维护的,而且对于从系统到应用开发是很好用的。设计这门...

本文由10bet手机官网发布于web前端,转载请注明出处:学习笔记,C语言的演变史

上一篇:委托和事件,睡前故事 下一篇:访谈录之C,创建Windows应用程序10bet手机官网:
猜你喜欢
热门排行
精彩图文