一 C家族的故事

 

一 C家族的故事

以下描述摘自《C++对话系列》

“最初,计算机语言非常混乱,高级语言根本不存在,连固定的语言形式也没有。贝尔实验室的Richard Martin在使用了计算机语言的过程中意识到了高级语言的必要性。他深入地研究后,开发出了他认为不错的BCPL语言。

“然后Ken Thompson使用了BCPL,虽然他觉得很不错,但他认为如果想在一台PDP-7上使用BCPL,就必须精简BCPL。Ken Thompson深入地研究后,他开发出了一门新的语言,命名为B,它是BCPL的一个简化版本,他认为这是一门很好的语言。

“然而B语言没有类型的概念。Dennis Ritchie意识到了这一点,他深入研究后,对B语言进行了扩展。Ritchie 添加了结构和类型,他把这门语言叫作C语言,因为C是B的下一个字母,无论是在字母表还是在BCPL中。Ritchie 认为这门语言已经相当好了,但是他并不满足,继续投入大量的心血和汗水去完善这门语言。在1978年,Brian Kernighan 和Dennis Ritchie合作出版了《The C Programming Language.》[3]这为人们带来了很多的喜悦,人们看到了C的美妙,‘耶,这门语言真的很棒!’人们纷纷议论。

“C语言很快流传开来。新的特征不断的被添加,但并不是被所有的编译器厂商支持。人们开始感到沮丧,开始呼吁“我们需要标准C!” ANSI响应了这一要求,在1989年ANSI 宣布," 请注意,我将给所有的程序员带来快乐。因为在今天,C的标准X3.159-1989将诞生."接着ISO采纳了这一标准,发布了ISO/IEC 9899-1990。这又一次为人们带来喜悦。

“事情在进一步发展,早在C标准被发布之前,Bjarne Stroustrup就已经致力于改善C语言。Stroustrup致力于在C语言里增加类、函数参数类型检查和其他的一些优秀的特征。他继续深入,于1980年发布了'C With Classes.'这为人们带来了更多的喜悦和兴奋。

Stroustrup 并没有止步不前。他在对C语言做了很大的改变后,产生了一门新的语言,他命名这门语言为C++,就是C的增强的意思。他继续努力,在1986年出版了《The C++ Programming Language》,这再一次为人们带来了喜悦。

"象所有的事物一样,C++语言也在不断的进化着。模板,异常处理(exception handling)以及其它的特征陆续被添加到C++中,人们再次为新事物而兴奋。

“然而人们又开始抱怨了。那时候,不同的编译器开发商使用不同的解决方案支持模板和异常以及其它的特征,甚至有些开发商拒绝支持这些新特性。因此ISO又行动了, 在1998年----克林顿上台后第六年, 克雷蒂安成了除魁北克人之外所有加拿大人的总理。莱温斯基成了媒体的大红人,因为没有第二个辛普森诞生,那年没有什么大的新闻----在九月的第一天,ISO 宣布“ 请注意,我将给所有的程序员带来快乐的消息。因为在今天,C++的标准ISO/IEC 14882:1998(E)将诞生。”接着ANSI接受了这一建议,在七月的二十七号发布了几乎相同的标准,甚至早于ISO标准的发布,有时候事情就是这样。这又一次为人们带来喜悦,“啊,太好了,我们可以踩在巨人的肩膀上前进了”大家是这样欢呼的。

故事并未结束,当时Patrick Naughton为Sun Microsystems工作了一段时间后,深感厌烦,想离开Sun ,寻求新的发展。然而公司挽留了他,‘你可以拥有一支开发队伍,只要你愿意,一切都可以由你指挥,但要给我们带来点酷的东西。’于是一个名叫Green的团队产生了。

Green小组孤独地在荒野上不断的探索。他们寻求一种可用于嵌入式设备的面向对象语言,他们一开始在C++的基础上修改,但是C++的庞大使之无法满足他们的需要,于是他们在C++的基础上创建了一门新的语言Oak----这个命名仅仅因为James Gosling看到了相窗外的一颗橡树(Oak)。开发队伍仔细审视了这门语言,认为它相当的好。

也是在那个时代,美国巨型计算机应用中心开发出了Mosaic,这为我们带来了令人兴奋的WWW。随后Bill Joy试图公开Oak的源代码,使Oak能使用于网页浏览。Sun审视了这个想法,觉得不错,但Oak这个商标已经被人占用,所以Sun把这门新语言称为Java,并发布了《the Java programming Language》。这又一次使人们激动,"耶!我们又有了一个真正与开发平台无关的语言!我们认为,这真是太酷了!"

这就是C语言家族的早期故事,故事还在继续。

2000年左右,微软宣布有史以来这个星球上最好的语言出现了---C#。Delphi的作者设计了C#。到2007年C#已经是一个成熟的语言,并且广为流行,C#宣传它优于C++的一个重要特点就是自动的内存管理,这将极大的解放程序员的负担,并使得程序更加的健壮。然后程序世界里很难有完美的解决方案,垃圾回收器一旦工作,将导致整个应用程序暂停,同时在内存受限系统中,仍然需要依靠程序员高超的技巧去控制内存的分配和回收,并且既然可以用C++为Java和C#开发让它们引以为傲的垃圾回收器,为什么就不能为C++自己实现垃圾回收管理呢?Herb Sutter已经证实,C++09标准一定会实现垃圾回收器。

尽管Java、C#声势逼人,还有现在的新贵动态语言,但是C++世界仍然没有停止前进的脚步,泛型是C++对比其他语言很重要的优势,因为C++对泛型的支持最好。根据stroustrup的计划,2009年,C++09标准将出台,到时候对泛型的支持将进一步的提升,使得更容易理解和使用,同时C++世界还在努力做到跨平台,10多年间推出了很多重量级的C++库,包括Boost、Loki、QT、ACE、GSoap等,了解并在合适的时候使用这些知名库,对于我们提高软件开发效率、软件质量和个人的C++修养都极为重要。C++再也不是那个当年因为不能支持广泛的操作系统平台,而被Sun公司抛弃并创立Java的那个C++。

故事还将继续下去,期待C++09标准的到来。

C++代表什么?

根据stroustrup(C++之父)的最新定义,C++是多范型语言,它包含了以下四个子集:

  1. 标准C语言

体现了过程化设计思想,优点是性能高,缺点是大规模应用难以维护,但是仍然是很重要并且有时候必须的技术

  1. 面向对象的C++

体现了面向对象的设计思想,符合人类思考问题的习惯,设计模式面向对象技术的一个浓缩

  1. 模板C++

体现了泛型设计思想,是完全不同于面向对象的另一个种技术,近年来大放光彩,比如知名的泛型库,Microsoft的ATL/ATL Server/WTL,彻底影响标准C++的STL等,boost和Loki

  1. STL

STL这里单独提出来,是因为它实在太重要了,提供了很多方便的容器、算法、迭代器,直接引起了整个软件工业界的一场革命。

你可能感兴趣的:(java,C++,c,Microsoft,sun,语言)