C++语义和性能分析
正版二手书,欢迎选购
¥
11.16
2.5折
¥
43.8
八品
库存2件
作者杨镰
出版社华中科技大学出版社
ISBN9787568033299
出版时间2017-11
装帧平装
开本16开
定价43.8元
货号1694544791486452736
上书时间2024-12-12
商品详情
- 品相描述:八品
- 商品描述
-
前言
我与C++
1988年,我在美国波特兰州立大学(PSU)攻读计算机科学硕士学位时,第yi次接触到C++语言。当时,我的导师是波兰裔,名叫博卡斯基(Marek Perkowski,http://www.pdx.edu/profile/marek-perkowski)。他研究机器人和设计自动化(design automation)理论,喜欢“人工智能”领域里颇受青睐的Lisp程序设计语言,因此他也把对Lisp这种优美、简洁的语言的欣赏传递给了他的研究生们。我也开始使用Lisp语言,常常能感受到这种语言的数学美和惊人的抽象能力。
在PSU那种松散的学术氛围中,不同的声音是一件平常的事情:博士候选人大卫?史密斯在一次讨论时说:
OOP方法才是今后的方向;Functional语言(如Lisp)只能待在象牙塔里;数风流语言,还要看C++语言。
这大概是我第yi次听说C++语言,我还将信将疑。不过,不久之后发生的一件事使我终身难忘,也证实了他的观点。在计算机系举办的一次“软件五角棋”大赛中,我使用Lisp语言编写了一个五角棋程序,自认为它非常优美、智慧且简洁,所以信心百倍。可是,第yi轮就惨败给了我的对手。而对手的程序是使用C++语言编写的!惨败的原因是,相比对手的程序,我的程序反应速度实在很慢,所以失分于超时。
这件事加深了我对C++语言的印象,我决定尝试使用C++语言和OOP方法!于是在1988年的冬季,我一学期同时选了Smalltalk语言和C++语言两门课程。
从Smalltalk语言中,我认识到OOP方法的精髓。同时我也认识到Smalltalk语言在性能和实用性上的局限性;从C++语言中,我体会到OOP方法中沉淀的哲学思想与实际应用的结合,以及程序设计的艺术性和工艺性。在学习C++语言之前,我对于计算机科学的兴趣完全停留在表面。学习了C++语言之后,我惊喜地发现:C++语言让我这个不喜欢烦琐、复杂系统的计算机科学新手看到了一个充满哲理性的表达工具,能够帮助我清晰地表达自己的逻辑思维和创造性。另一方面,C++的实用性和强大的性能保障,也让我终选择了用它来做毕业论文项目。
离开学校后不久,我就进入微软公司总部的微软研究院工作,从事Windows NT的性能研究。去微软公司面试的时间是1995年8月17日,距离Windows 95的轰动性发布只有一周时间。记得面试的一个C++问题是论述“多态性(polymorphism)”是否意味着“动态绑定”。我的面试官告诉我:“C++没有动态绑定,只有静态绑定,而COM(component object model)里才有真正的动态绑定。”我十分认真、激动地争辩道:“C++的polymorphism就是动态绑定。”两人从会议室争论到咖啡厅,然后又争论到坐落在美丽的“华盛顿湖畔”的一家意大利餐厅。晚上,当人事部门宣布面试结果时,我以为一定没戏,后悔自己太认真,不知道天高地厚。没想到我被那位面试官所在的团队——微软公司总部的微软研究院“软件性能研究中心(PPRC)”录用,而且我们一直是合作良好的同事。直到今天,我还认为我对了,他错了。但在微软公司当时的氛围里,“对”“错”并不是重要的,重要的是“激情”和“执着”。而正是这种精神和文化,将20世纪90年代的微软和世界区分开来,让软件世界的“微软时代”降临。我也有幸加入到这个世界一流公司的研发队伍中,在几个重要的产品组里,贡献了自己的青春,实现了读研时的理想。20世纪90年代,微软公司是充满活力和朝气的崛起的巨人。
记得有个朋友的儿子在美国东部一所大学读书,一次去他家过圣诞节,吃饭时他问我:“你怎么就能进微软,而我的许多朋友都进不去呢?”其实,我的真实答案是两个字:“运气”。但是我当时的回答是:“你必须每天花至少20分钟时间,读一些具体的计算机科学著作;然后至少花10分钟时间,想一些抽象的问题,比如宇宙爆炸理论的逻辑错误和量子叠加的荒谬性等,只要和技术无关就好。”因为我一直以为:如果你对哲学没有兴趣,你不可能成为一个优秀的程序员;而做一个平庸的程序员太累了,不值得!
加入微软公司后,我有机会参与到多个大型的C++项目的开发中。从Windows NT性能测试工具到Windows Vista的安全性,以及后来的Windows 2008服务器,C++都在实战中给我惊喜,但有时它也会给我带来噩梦。然而,我体会深的,就是几乎每天我都会庆幸自己又学到了新的技能和思想,这种新东西可能是技术上的,也可能是方法学上的,这种体会持续了我在微软公司工作的5000多个日日夜夜。
我发现,C++并不是一门简单、平庸的语言。正因为它的定位,它是植根于C以及VNA系统的,因此一个对VNA不清楚的程序员,是不可能掌握C++语言的。C++也并非一门在数学上有深厚根基的语言,很难像Lisp语言那样用Lambda表达式和高阶函数等概念表达C++。这其实是C++程序不容易编写好的深层原因。
在微软公司工作10多年,我接触过许多C++资深程序员,比如《深度探索C++对象模型》的作者Stan Lippman。我是作为VC++组的架构师,通过“发现”VC++在实现C++ SPEC方面的一些错误而结识了他,并数次就C++的历史、哲学和设计模板问题与他交流。
然而,我接触更多的是C++新手,比如我带领的多个美国常春藤名校的“实习生”,现在也早已成为各部门的高级主管。即使在这样一个世界一流的软件公司里,他们中间一些人对C++语言的精神,尤其是它的语义层面上的规则,仍存在诸多的误解。一些通俗但并不精确的观点在业内长期流行:比如C++的后门很多,C++的性能较C有较大差距等。造成这些误解,一方面是由于缺乏系统性的教育和简明易懂的著作,另一方面是C++语言本身缺乏严格的数学、逻辑框架。
作者简介
杨镰,1985年毕业于华中工学院计算机系。1988年赴美留学,获波特兰州立大学计算机科学硕士学位。1995年加盟微软总部,在微软研究院从事软件安全和性能研发方面的工作。在微软工作的15年里,他先后参加了Windows Vista、Windows Server 2008、 MSN以及Bing的研发,在软件工程、软件性能优化、软件安全等领域有很深厚的功底和实践。他在不同的国际会议上发表了多篇论文,内容涉及软件工程、机器学习和高级语言。在繁忙的工作之余,他是滑雪高手,对如何提高滑雪板的性能也颇有研究。
目录
目录
第1章 C++简史 1
1.1 C++ 的历史背景 1
1.2 C++大事记 5
1.2.1 1979年:C with classes诞生 5
1.2.2 1983年8月:C++正式命名 6
1.2.3 1986年:《The C++ Programming Language》出版 7
1.2.4 1987年:C++2.0发布 7
1.2.5 1990年:《The Annotated C++ Reference Manual》出版 8
1.2.6 1994年:STL诞生 8
1.2.7 1998年:ISO C++ 正式通过 9
1.2.8 2011年:C++11颁布 9
1.3 C++的进化和改进理念 10
1.4 C++的历史贡献及未来 11
第2章 程序设计语言的语义 14
2.1 哲学基础 14
2.2 语义的形式化描述 14
2.3 操作性语义 16
2.4 语义描述涉及的主要元素 17
第3章 C++类型系统 19
3.1 类型系统简介 19
3.2 数据类型的表达规则 21
3.2.1 基本数据类型的表达规则 22
3.2.2 用户自定义类型的表达规则 23
3.3 类型实例的构造规则 25
3.3.1 类型和类型实例 25
3.3.2 类型实例的构造和析构 27
3.4 类型的操作规则 33
3.4.1 context 33
3.4.2 函数 34
3.4.3 过程 35
3.4.4 过程函数 35
3.4.5 方法 36
3.4.6 特别讨论:过程方法的自动机诠释 37
3.4.7 运算符 38
3.5 C++类型系统的特征 39
3.5.1 特征 1:支持OOP 39
3.5.2 特征2:强静态类型 40
3.5.3 特征3:UDT是一等公民 41
3.5.4 特征4:类型清除 45
3.5.5 特征5:支持模板 49
3.5.6 特征6:指针和REF 53
3.5.7 特征7:类型修正符 60
3.6 其他(非C++)类型系统 62
3.7 类型系统的意义和用途 62
3.7.1 程序的精确性保障 62
3.7.2 性能的可保障性 64
第4章 C++变量语义 66
4.1 变量简介 66
4.2 C++变量的属性 68
4.2.1 C++变量的存储属性 68
4.2.2 C++ 变量的值语义 95
4.2.3 C++变量的自洽性 106
4.2.4 C++变量的总分性 109
4.2.5 C++变量的多态性 112
4.3 临时变量 113
第5章 C++对OOP的支持 116
5.1 object的内存布局 117
5.2 继承 119
5.2.1 继承object的内存布局 123
5.2.2 多继承 128
5.2.3 继承类object的语义规则 130
5.3 多态类和多态变量 137
5.4 C++对抽象的支持 139
第6章 C++ 性能分析 141
6.1 性能分析原理 141
6.2 算法的重要性 149
6.3 RAM内存读取的性能 153
6.3.1 单线程heap管理器 154
6.3.2 定制化heap管理系统 157
6.4 关于缓存 164
6.5 关于I/O 175
6.6 C++的特殊性能问题 176
6.6.1 临时变量的性能问题 176
6.6.2 STL 容器 180
6.6.3 Type Erasure 185
6.6.4 异常处理 187
6.6.5 继承的性能问题 194
6.6.6 直接函数、间接函数、内联函数 200
参考文献 204
内容摘要
"本书从C++的发展历史、类型系统、语义以及性能的视角,给读者展现了C++语言的基本理念和发展主线。一方面用抽象的理论框架,比如集合论、有限自动机、类型和类型系统等诠释了C++的理论方面;另一方面又从语义着手,从底层操作剖析了C++的实现方法。使读者既能站得高、看得远,又能把握C++的实质,从而全面掌握C++语言。
本书作者有20多年的C++开发经验,在微软总部工作期间,用C++参与开发过包括Windows XP系统在内的许多知名商用软件系统,在C++语言上有着深厚的功底。在本书作者看来,理解C++的精髓和灵魂,必须从C++类型系统着手,这样才能写出性能优异而又易于维护的系统。另外,从C++11到C++17的最新构造,都没有脱离C++类型系统的主体思想。熟读本书可以作为学习C++17的前奏。"
主编推荐
适读人群 :所有IT人士,程序设计/C++开发
对于严肃的C++程序员来说,本书是一部推荐之作!本书作者有20多年的C++开发经验,在微软公司总部工作期间,用C++参与开发过包括Windows XP系统在内的许多知名商用软件系统,在C++语言上有着深厚的功底。他在书中力求以新的视角,给读者展现C++语言的基本理念和发展主线,读者如果能够理解本书的精髓,会大大提升对C++的掌握程度,更不会为C++11以来的新的思想和新的语言构造而感到惊讶和力不从心。
在本书即将出版之际,C++ 17也在2017年年初得到C++委员会的通过,并且即将正式颁布。深入理解书中相关内容,对理解C++ 11以来的一系列新思想,会有“似曾相识”的感受。C++11到C++17的新构造,都没有脱离C++类型系统的主体思想。熟读本书可以作为学习C++17的前奏。
— 没有更多了 —
以下为对购买帮助不大的评价