written by cash ( 天下第七 )
2002.04.01
版权所有,翻录不究
** 开始 **
2000 年 6 月我大学毕业,从北京回到了石家庄,正式开始了我的职业生涯。如前所述,一开始我使用的语言是 asp ,我一直认为这不能称之为编程,因为 asp 不是一种编程语言,把它叫做动态网页实现技术可能更好。另外, asp 很简单,并且,简单就是它全部的特点--这使得它很容易就能学会 ( 在后来的工作中,我接触到许多应聘的学生,他们都告诉我自己精通 asp 语言 ) 。虽然学习起来很简单,但是在使用起来却不得不多费点儿劲儿:我还能记得自己晚上一个人在办公室用 VI 一步一步调试某一个网页的情景,每当遇到挫折失败的时候,总是想起给桐桐打一个电话,听听她的声音。如你所知,我总是遇到困难。
现在你能看出来,我不是高手,只是一个低手 ...
2000 年 6 月我大学毕业,从北京回到了石家庄,同一时间 (美国西部时间 6 月 22 日上午) ,微软公司在 位于美国西雅图郊外的总部内邀请新闻记者、新闻分析家等约400人,举行了新闻发布会“Forum2000”,宣布正式推出.Net计划。 这个计划中包括了新的网络计算平台 (.Net Framework) 、新的语言 (C#) 、新的开发工具 ( Visual Studio.Net) 以及 asp 的下一个版本 ASP.NET ,后者最开始被称为 ASP+ 。那时候我学习的主要兴趣就在 ASP.NET 上,并且通过这个窗口开始了解 Microsoft.Net 的各个方面。
ASP.NET 仍然不能称之为一种编程语言,但是现在可以把它看作是一个创建、管理、部署 Web 应用程序的平台。可以使用任何 .Net 语言在这个平台上开发互联网应用程序,这其中当然包括 C# 。它们之间的关系可以从下图中看出:
这就是著名的 .Net 平台结构图,从这个图上可以看到, ASP.NET 、 Windows Forms 和 VS.Net 都不过是 .Net 开发平台的一部分,用于 .Net 应用程序的开发及展示。 .Net 平台的核心技术为:通用语言运行时( CLR : Common Language Runtime )、基类库 (Base Class Library) 、 .Net 语言及 Visual Studio.Net 。
从这个图上也可以看出, .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) 编译 为机器代码以供操作系统执行。
不仅是 C# 语言,所有 .Net 语言 ( 将会包括我们常用的几十种现代的编程语言 ) 都可以编写面向 CLR 的程序代码,这种代码在 .Net 中被称为托管代码 (Managed Code) ,所有的 Managed Code 都直接运行在 CLR 上,具有与平台无关的特性。
解释性的语言很安全,并且可以通过它的运行平台为其赋予更多的功能,比如自动内存管理、异常处理等。事实上, C# 语言的许多特点都是由 CLR 提供的,下面的 CLR 结构图说明了这一点。
可以看到,类型安全 (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# 程序中随时都可能会用到它来完成自己的任务。
很多人都思考过应如何开始学习一种新的语言,对于一个有经验的编程人员来讲,这确非难事。但是对于一个对编写代码一无所知的人而言,如果你是以 C# 开始你的编程之旅的,数目繁多的概念及新名词可能会令你有些不知所措。这时候请注意你的学习顺序,任何一种编程语言的学习都是按照运行平台、语法、基类库直至各方面的应用这一顺序来进行的,但是在实际的学习中,它们之间并不是孤立的。推荐的方法是:对运行平台和语法有了一个整体的认识后,在应用中学习各种基类库的用法。鉴于 C# 这一语言的特殊性,全面了解它的运行平台 (.Net Framework) 必会使你的学习事半功倍。所以请记住上面提到的两个图,在以后的学习中,虽然可能不会明确的涉及到它们,但是在整个 C# 的学习过程中,它们却是无处不在的。
还有一个很重要的概念需要你明白,这就是公共语言架构 ( 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 平台 ) 。
2000 年的 6 月还有很多事情发生, 2000 年的 6 月我在学校做毕设,晚上就跑到系试验室看欧锦赛,我很喜欢的 坎普君 (Bergkamp) 大放异彩,帮助荷兰队 6 比 1 大胜南斯拉夫,米哈伊洛维奇 (Mihajlovic) 在比赛最后莫名的笑容永远留在了我的心中。说实话,那时候只顾着看 EURO2000, 可没管什么 .Net 、 .Not 。另外,离别的愁绪围绕在每个人的周围,广播里开始反反复复播放一些古老的歌曲,不知道为什么,恋曲 1980 却是那时候的最爱。
后来,我们都毕了业。如你所知,我离开了北京。
>>> 未完,待续 ...