当前位置:网站首页>C陷阱与缺陷 附录B Koenig和Moo夫妇访谈
C陷阱与缺陷 附录B Koenig和Moo夫妇访谈
2022-08-01 21:00:00 【weixin_客子光阴】
Alex Stepanov 惠普实验室工作 正在开发的一个C++库
向标准委员会提交STL,并建议将其并入标准库。
就其本身而言,C++是一种非常低级的语言,唯有利用库才能写出高层次的程序来。初学者还不能自己构造库,所以他们要么用现成的标准库,要么自己去写低层次的程序。确实有不少程序应该用低层次技术来构造,但是对于初学者不合适。
当然是库由于语言细节,这里有两个原因:首先,学生可以不必费力包装低层次的语言细节,从而更容易建立整体语言的全局观念 ,了解到其真实威力。学生在掌握如实使用程序库之后,就会很容易理解类的概念,学会如何构造类的技术。
更重要的一点是,首先学习程序库,能够使学生培养良好的习惯,就是复用库代码,而不是凡事自己动手。首先学习语言细节的学生,最后的编程风格往往是C类型的,而不是C++风格。它们不会充分地运用库,而自己的程序带有严重的C主意倾向---指针满天飞,整个程序都是低层次的。结果是,在很多情况下,你为C++的复杂性付出了高昂的代价,却没有从中获得任何好处。
《C++沉思录》提到:“C++希望面对把实用型放在首位的社群”
“糟糕的手艺人常常责怪自己的工具?”
“当你手里拿着锤子的时候,整个世界都成了钉子。”
如果你选择了这样的工具,那么你就必须负责选择合适的设计方案。
C++在运行时性能上做了一个很好的折中,能够在“一切都是对象”的语言与“避免任何抽象”的语言之间取得恰到好处的平衡。这就是C++的实用型。
“基于对象”和“基于模板”的抽象机制优先于面向对象抽象机制
所谓面向对象编程,就是使用继承和动态绑定机制编程。在我们看来,这意味着该程序有两个或两个以上的类型,至少有一个共同的操作,也至少有一个不同的操作。否则,就不需要继承机制。此外,程序中必然有一个场景,需要在运行时从这些类型中挑选出一个,否则就不需要动态绑定机制。
某些面向对象编程语言,如Python,其所有类型都是动态的,那么技术图书的作者就不会面对这样的问题。例如,C++中的容器类大多数用模板写成,因其可以容纳毫无共同之处的对象,所以要求元素类型必须是某个共同基类的派生类毫无道理。然而,在Python中,容器类中本来就可以放置任何对象,所以类似模板那样的类型机制就不必要了。
所以,我认为你所看到的问题,其实是因为很难找到又小又好的面向对象程序来做范例,才会产生的。而且,对于其他语言必须烦劳动态类型才能解决的问题,C++能够使用模板来高效地解决。
除非你首先掌握了构造良好类的技术,否则急急忙忙去研究继承就是揠苗助长。
《C++沉思录》“用类表示概念”假设我能再记住一句话,你们觉得应该是什么?
“避免重复”如果你发现自己的程序的不同部分中做了相同的事情,则试着把这两个部分合并到一个子过程中。如果你发现两个类的行为相近,则试着把这两个类的相似部分统一到基类或模板中。
《C++沉思录》中有两句名言:“类设计就是语言设计,语言设计就是类设计”
Python和C++程序构成了完美的一对组合。Python程序比相应的C++程序短小精悍,而C++程序则比Python运行程序快得多。因此,我们可以用C++来构造那些对性能要求很高的部分,然后用Python把它们粘在一起。Boost中的一个作者Dave Abrahams写了一个很不错的C++库,很好地处理了C++与Python的接口问题。
我们应该保持谦虚。
成为更好的C++程序员。请给我们3个你们认为最重要的建议:
1.避免使用指针
2.提倡使用程序库
3.使用类来表示概念
其他著作:
Ruminations on C++
中文班序
本书内容:
C语言编程中一些重要的经验教训。
学习方式:
1、要成为一个优秀的程序员,最重要的无非是学习一种特定程序语言、函数库或者操作系统的细节,而且多多益善。
2、需要一本索引丰富完备的参考书就已经足矣;
3、最多可能还需要一位稍有经验的同事不时从旁点拨,指明方向;
学习难点:
难的是那些我们已经了解的东西,如何“运用之妙,存乎一心”。
掌握学习难点的方法:
1、学习那些是不应该做的;
2、研究一种语言中程序员容易犯错之处;
学习方式:
对一般人而言,最有效的学习方法是从感性的、活生生的事例中学习,
比如自己的亲身经历或者他人的经验教训。
书籍推荐:
C语言编程:kernighan和Ritchie:The Programming Language,第2版,Prentice-Hall, 1988
C语言参考手册:Harbison和Steele: C:A Reference Manual,第2版,Prentice-Hall,1987
数据结构和算法: Van Wyk: Data Structures And C Programs,Addison-Wesley,1988
可移植性:Horton: How To Write Protable Program In C,Prentice-Hall,1989
操作系统接口:Kernighan和Pike: The Unix Programming Environment,Prentice-Hall,1984
绞尽脑汁的C语言难题:Feuer: The Puzzle Book,Prentice-Hall,1982
边栏推荐
猜你喜欢
MySQL语法基础
[Personal Work] Remember - Serial Logging Tool
PyTorch笔记 - Attention Is All You Need (2)
wps excel 插入公式 整列
函数(二)
StringTable Detailed String Pool Performance Tuning String Concatenation
】 【 nn. The Parameter () to generate and why do you want to initialize
98.嵌入式控制器EC实战 EC开发板开发完成
Little data on how to learn?Jida latest small learning data review, 26 PDF page covers the 269 - page document small data learning theory, method and application are expounded
StringTable详解 串池 性能调优 字符串拼接
随机推荐
面试突击70:什么是粘包和半包?怎么解决?
织梦发布文章提示body has not allow words错误
系统收集集
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
职场如象棋,测试/开发程序员如何突破成长瓶颈期?
封装一个管理 url 状态的 hook
"Torch" tensor multiplication: matmul, einsum
What is the difference between a utility model patent and an invention patent?Understand in seconds!
[Energy Conservation Institute] Comparative analysis of smart small busbar and column head cabinet solutions in data room
2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
tiup mirror
网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
字符串
响应式织梦模板美容整形类网站
Internet使用的网络协议是什么
Go Atomic
Different operating with different locks, rounding
【Kaggle】House Prices
移植MQTT源码到STM32F407开发板上