C 是一门很难掌握的语言,C 相关的好书也不计其数,但无论哪一本书都无法取代《C 语言的设计和演化》。

为什么要学习那么多种编程语言(时隔8年再版C之父亲自撰写讲述语言设计的哲学)(1)

和其他C 教材不一样的是,这本书讨论C 语言结构的内容并不多,更多的是论述了C 的发展与设计原理。

要想深入学习C ,了解C 的设计哲学,比了解C 的语言特性更为重要。而阐述其设计哲学,没有比C 创始人更为合适的人选,这本书正是C 之父所著,全面论述了C 的历史和发展,各种重要设计背景,以及这些设计背后的意义与具体的用法。

一封邮件,成为了他的创作起源

在一次ACM关于程序语言历史的HOLP-2的会议上,协会要求Bjarne写一篇关于C 历史的文章,为了对C 有一个更全面、更公平的观点,他向一些朋友们咨询了他们对C 的早期历史印象。这使得关于这个工作的小道消息不胫而走。

故事在人传人的过程中逐渐失真变味,有一天Bjarne突然接到一个朋友的来函,向他咨询哪里可以买到他这本关于C 设计的新书。这封电子邮件成为了他创作本书的真正起源。

在传统上,关于程序设计和程序设计语言的书都是在解释某种语言究竟是什么,还有就是如何去使用它。但无论如何,有许多人也想知道某个语言为什么会成为现在这个样子,以及它怎样成为这个样子的。Bjarne就是想针对C 给出对后面这两个问题的解释。在这里解释C 怎样从他的初始设计演化到今天这个语言,描述造就了C 的各种关键性的问题、设计目标、语言思想和各种约束条件,以及这些东西优势如何随着时间推移而变化的。

C 语言的设计目标是提供一种新的系统开发工具,希望能在一些方面比当时的各种工具语言有实质性的进步。在今天,C 最重要的作用就是使那时的阳春白雪变成了普通的系统开发人员可以触及、可以接受使用、可以从中获益的东西。这件事在计算科学技术发展的历史记录上必定会留下明显的痕迹。本书从一个最直接参与者的角度,记述了C 语言的起源和发展,记录了它怎样成长为今天的这个语言,怎样使语言研究的成果变成了程序员手中的现实武器。

C 的设计哲学和人文思考

由于兼容C,使得C 能够发展到如今的规模,也使得C 被C的缺点所困扰。比如C的弱类型,隐式转换,全局命名空间,编译预处理等。C 的复杂性有相当大的部分来自于此。

早在初期Bjarne就对C 就有了明确的定位,比较重要的几点有:

● C 的发展必须由实际问题推动;

● 不被牵涉到无益的对完美的追求之中;

● C 必须现在就是有用的;

● 每个特征必须存在一种合理的明显实现方式;

● 总提供一条转变的通路;

● C 是一种语言,而不是一个完整的系统;

● 为每种应该支持的风格提供全面支持;

● 不试图去强迫人做什么;

可以从以上几点,归纳出C 的设计哲学:

简单:在不要牺牲性能的情况下,让简单的事情保持简单,不要去复杂化本来的困难,使之成为可能。

平衡:C 试图找到「抽象」和性能的平衡点,并将选择的自由留给程序员。

自由:世界是多样性的,C 的多范式设计思维赋予了程序员极大的自由度和灵活性。

友好:C 变得越来越友好,专家和学者对于这种友好性感触将更加深刻。

一个程序设计语言,可能会成为程序员日常工作中最重要的组成因素。但是无论如何,一个程序设计语言只是这个世界中微乎其微的一部分,因此也不应该把他看的过分重要。

在各种程序设计语言里,C 既能治大国,又能烹小鲜,一方面跟C兼容,可以直面系统底层API,SDK,你想得话,可以控制几乎每一个细节,甚至还可以内嵌汇编。天下大事,必作于细。

另一方面提供了很多范式,足够的抽象能力,面向对象,操作符重载,模板……,用C 写出来的面向对象代码跟java,c#的结构大同小异,这并不是偶然的。

C 的演化与未来

作为C 语言的创造者,Bjarne对于自己的作品自然是珍爱有加。对某些针对C 语言的批评,本书中也有一些针锋相对的比较尖锐的观点。但通观全书,作者的论点和意见还是比较客观的,并没有什么过于情绪化的东西。在前瞻性讨论中,Bjarne提出了许多预见。经过这五六年时间,其中一些已经变成了现实,也有些,例如特别有效的开发环境,还在发展之中。

这些可能也说明了语言本身的一些性质:C 是个比较复杂的语言,做好支持它的工具绝不是一件容易的事情,在这些方面还有许多发展余地。

总的来看,C 更趋向于一种从实际问题出发的语言,而非从学术出发的语言。后者通常能具有良好的形式化和优雅的语义。

语言也不是一成不变的。不同的时代,即使在同一领域也总会出现不同的挑战。看看现在的C 代码,再看看这本书里作为例子的C 代码,是不是又大不相同?94年的C 和现在的C 似乎也是不同的语言了。当然,C 语言和造就他的设计思想、编程的自身不会演化,真正演化的是C 用户们对于世纪问题的理解。

如何阅读这本书?

本书第一部分大致是按时间顺序审视C 的设计、演化、使用和标准化过程。

Bjarne选择这种组织方式,是因为在前面一些年里,主要的设计决策可以排成一个整洁且有逻辑的序列,映射到一个时间表里。

第二部分描述的是Release 1.0之后C 的发展。这个语言成长起来了,但还是在Release 1.0前后建造起来的框架之内。这个框架包括了一集所需特征,如模板和异常处理,还有指导着它们的设计的一组规则。在Release 1.0之后,年代排列对C 的发展就不那么重要了,在1.0之后的那些扩充,即使按年代排列的情况与实际有所不同,C 的定义在实质上还会是目前这个样子。因此,解决各种问题、提供各种特征的实际顺序,只有历史研究的价值了。严格按时间顺序进行描述会干扰思想的逻辑流程,所以第二部分是围绕着重要语言特征组织的。

本书是为C 用户而写的,也就是说,为那些程序员和设计师而写。Bjarne试图在给出一种有关C 语言、它的功能和它的演化过程的用户观点时,尽量避免那些真正晦涩的深奥论题。有关语言的纯粹技术性讨论,只有在它们确实阐释了某些对用户有重要影响的问题时,才在这里展开。

这本书的目标更多的是想展现出一幅大范围的图景,而不是精确详尽的点点细节。

为什么要学习那么多种编程语言(时隔8年再版C之父亲自撰写讲述语言设计的哲学)(2)

C 语言的设计和演化

作者:[美]本贾尼·斯特劳斯特卢普 ( Bjarne Stroustrup )

译者:裘宗燕

C 语言的设计和演化

作者:[美]本贾尼·斯特劳斯特卢普 ( Bjarne Stroustrup )

当当

C 语言的设计和演化(异步图书出品)

作者:[美]本贾尼·斯特劳斯特卢普,[,Bjarne,Stroustrup,]

京东

内容简介:

在这本书中,作者全面论述了C 的历史和发展,C 中各种重要机制的本质、意义和设计背景,这些机制的基本用途和使用方法,讨论了C 所适合的应用领域和未来发展前景。

本书在帮助人们深入理解C 语言方面的地位无可替代,值得每个关心、学习和使用C 语言的专业工作者、科研人员、教师和学生阅读。

在这本书中,作者还从实践的角度出发,讨论了许多与程序设计语言、系统程序设计、面向对象的技术和方法、软件系统的设计和实现技术等有关的问题,值得每一个关心这些领域及相关问题的计算机工作者和学生们阅读参考。

,