01 OC语言的历史
- 格式:pdf
- 大小:756.88 KB
- 文档页数:3


C语言的前世今生C语言,从20世纪70年代设计并实现之初,就注定是带有强烈工程师文化,而缺乏一些学术气息的语言。
它的许多细节设计,都带有强烈的实用化痕迹。
C语言因Unix操作系统而生,是Unix系统的母语。
这导致在这个广泛应用的操作系统上开发,必须通过C语言的形式和系统进行交互。
这不仅影响了Unix一个平台上的软件,也影响了后来世界上最大的桌面系统Windows,以及越来越多的嵌入式平台。
由于大部分应用软件最终都需要和操作系统打交道,所以用来开发应用软件的语言,绝大部分也需要利用C语言完成和操作系统的通讯。
这个世界上绝大部分流行的编程语言,都选择了用C语言来实现其编译器或解释器,以及基础部分的运行时库。
无论C语言设计本身有何种缺憾,在今天,它已无可取代。
到了今天,大部分程序员不再需要逐个时间周期地去抠程序的性能。
不需要刻意追求速度最快、最节省系统资源的软件。
不需要写那些和系统内核紧密联系的程序。
但C语言在此之外,依然有其重要的应用领域。
我们可以把它作为对最终机器模型的高层次的统一抽象工具,而不必考虑机器环境的差异。
经过30多年的发展,证明了C语言的确是对经典机器模型的最佳表述。
仅仅通过增加一个非常薄的胶合层就得到了清晰简洁的设计。
正是这一点,使得C语言在计算机硬件高速发展的几十年中,一直生机勃勃。
我们在讨论C语言时,其实不仅仅涉及了C语言本身那用三十几个保留字构成的精简的控制结构和简约的语言特征。
还包括了一套对#号打头的预处理部分(尤其是基于文本替换的宏处理),以及某些惯用的源代码组织方式(例如所有的接口定义被定义在后缀为h的文件中,并通过预处理方式替换进源代码)和基本的程序库。
这几部分语言核心之外的部分相对独立,以致于使用C语言开发并不一定使用标准化的那些东西。
C语言对运行时环境的依赖是非常小的。
而编译预处理器又使得语言富有弹性,甚至可以写出违背C语言哲学的代码。
著名的IOCCC 大赛展示了许多常人无法理解的C代码。
OO语言的演变从时间顺序上来看,从C++,到Object Pascal,到Java,再到C#和Delphi Language,可以看出编程思想和风格(但并不表示优秀程度和实用性)的演化。
C++是这些语言中出现得最早的,同时它也提供了最好的向后兼容性:几乎全兼容面向过程编程时代的C 语言。
从市场策略来看,这是非常有远见的举动,C++成功地以C语言的后续者出现,但是同时也导致了许多严重的问题。
对于这一点,C++的发明者也并不讳言。
C++支持完全的面向对象编程,支持名字空间(Namespace),支持嵌套类型(Nested Type),这使得它对大规模程序的开发提供了很好的支持(这也是C++的设计目标之一)。
但是,C++ 也保留了全局变量/ 全局函数、Structure等语法,这在获得兼容性的同时,牺牲了面向对象的特性(当然,C++的目的并不是纯粹的面向对象,而是多风格编程)。
另外,C++在RTTI上完全无法与后来的几种语言相比。
但是,C++还提供了复杂的模板和操作符重载机制,从而全面支持泛型编程(Generic Programming),这一点目前在这些语言中是独一无二的。
总的说来,C++是一门庞大的、复杂的、博大精深的语言,它在从面向过程编程向面向对象编程的过渡中,最大限度地保持了向后兼容性,同时也付出了沉重的代价。
C++在许多前沿领域,都进行了有益的探索,这些探索的成果被其它语言所汲取,但也使得C++的学习门槛过高。
Object Pascal 是Anders Hejlsberg 对传统的Pascal 进行扩展以后发明的语言,它诞生的背景是面向对象编程思想的流行和Windows 操作系统的崛起。
针对这两个潮流,Object Pascal 做了很多的优化以适应它们。
Object Pascal 支持完全的面向对象编程,而同时的Visual Basic等竞争对手只支持基于对象的编程(Object-Based Programming)。
C#简史C#是目前兼顾系统开发和应用开发的最佳实用语言,并且很有可能成为编程语言历史上的第一个“全能”型语言。
看过这篇简史,我们都应该明白,不要再把C#看成年轻后生了——只要是“马拉多纳”,就早晚当“球王”。
C# 1.0,纯粹的面向对象当时间回溯到1998年底,微软正在忙于新一代COM的设计工作。
此前,COM一直是组件化开发中非常成功的一种技术;但由于它仅提供了二进制层面上的统一,因此无法将类型信息和用于支持基础平台和开发工具的信息放到组件中。
这时,Java正在逐步走向成熟。
于是,微软学习Java的做法,将虚拟机的概念引入到了COM领域;同时,微软提出了“元数据”的概念,用于描述组件的类型信息和工具支持信息,并决定将其放入到组件当中。
这种“COM虚拟机”的名字在经历了若干争论后,最终被定为CLR(Common Language Runtime,公共语言运行时)。
与此同时,微软提出了在该运行时上运作的语言应该遵循的一些规则,以及该虚拟机的类型系统和指令集——所有这些规范形成了最终的C L I(Common Language Infrastructure,公共语言基础设施),并提交给了ECMA委员会。
同时,微软开发了CLI的一个实现,这就是大名鼎鼎的.NET了。
1998年12月,微软启动了一个全新的语言项目——COOL,这是一款专门为CLR设计的纯面向对象的语言,也正是本文的主角——C#的前身。
历时半年有余,1999年7月份,微软完成了COOL语言的一个内部版本。
直到2000年2月份,微软才正式将COOL语言更名为C#。
据说起这个名字是因为C#开发小组的人很讨厌搜索引擎,因此把大部分搜索引擎无法识别的“#”字符作为该语言名字的一部分;还有一种说法是在音乐当中“#”是升调记号,表达了微软希望它在C的基础上更上一层楼的美好愿望——当然这些都只是传说,无从考证。
又是历经了一系列的修改,微软终于在2000年7月发布了C#语言的第一个预览版。
程序设计语言简史程序设计语言诞生1946冯·诺依曼提出了冯·诺依曼原理:CPU逐条从存储器中取出指令执行,按指令取出存储的数据经运算后送回。
数据和指令(存储地址码、操作码)都统一按二进制编码输入。
数据值的改变是重新赋值,即强行改变数据存储槽的内容,所以说它是命令式的(imperative)。
第一台按冯·诺依曼原理制成的通用电动计算机是1951年美国兰德公司的UNIVAC-1。
人们就开始了机器语言的程序设计:指定数据区编制一条条指令。
由于任何人也无法记住并自如地编排二进制码(只有1和0的数字串),则用8、16进制数写程序,输入后是二进制的。
单调的数字极易出错,人们不堪其苦,想出了将操作码改作助记的字符,这就是汇编语言,汇编语言使编程方便得多。
但汇编码编的程序必须要通过汇编程序翻译为机器码才能运行。
尽管汇编码程序和机器码程序基本一一对应,但汇编语言出现说明两件事,一是开始了源代码--自动翻译器--目标代码的使用方式,一是计算机语言开始向宜人方向的进程。
50年代高级语言出现1954年Backus根据1951年Rutishauser提出的用编译程序实现高级语言的思想,研究出第一个脱离机器的高级语言FORTRAN I。
其编译程序用18个人一年完成(用汇编语言写)。
到1957年的FORTRANⅡ,它就比较完善了。
它有变量、表达式、赋值、调用、输入/输出等概念;有条件比较、顺序、选择、循环控制概念;有满足科技计算的整、实数、复数和数组,以及为保证运算精度的双精度等数据类型。
表达式采用代数模型。
FORTRAN的出现使当时科技计算为主的软件生产提高了一个数量级,奠定了高级语言的地位。
FORTRAN也成为计算机语言界的英语式世界语。
1958年欧洲计算机科学家的一个组织GAMM和美国计算机协会ACM的专家在苏黎士会晤起草了一个"国际代数语言IAL"的报告,随后这个委员会研制了ALGOL 58得到广泛支持和响应。