《C++语言的设计和演化(英文版)》的原文摘录

  • 我的长期(持续了至少24年)爱好是历史。在大学里和毕业以后我还花了许多时间研究哲学。对于究竟应该把自己理性的怜悯放在哪里,以及为什么,这些学习给了我一种非常自觉的观念,经过这样长时期的思考训练,较之理想主义者而言,我觉得自己更喜欢实用主义者,而对神秘主义我更是无法赞成。因此,我喜欢亚里士多德胜过柏拉图,喜欢休姆胜过笛卡尔,对帕斯卡我只能表示失望。我发现像柏拉图或者康德的那种宽泛完整的“系统”是非常奇妙的,但却对它们完全不能感到满意,因为它们看起来是非常危险的——远离了我们的日常经验和个人的基本特性。 我发现了克尔凯戈尔对个人的几乎狂热的关心以及敏锐的心理洞察力,这笔黑格尔和马克思的抽象的宏伟蓝图和对人性的关心更具感染力。尊重人群而不尊重人群中的个体实际上就是什么也不尊重。C++的许多设计决策根源于我对强迫人按照某种特定方式行事的做法极度厌恶。历史上一些最坏的灾难就起因于理想主义者们试图强迫人们“做某些对他们最好的事情”。这种理想主义不仅导致了对无辜者的伤害,也迷惑和腐化了施展权力的理想主义者自身。我还发现,对于与其教义或理论出现不寻常的冲突的经验和实验,理想主义者往往有忽略它们的倾向。在理想出现问题的地方,甚至当空谈家也要赞成的时候,我宁愿提供一些支持,给程序员提供选择的权利。 (查看原文)
    [已注销] 6回复 3赞 2012-07-30 22:49:11
    —— 引自章节:1.3 一般性的背景
  • 我设计C++是为了解决一个问题,而不是想证明一种观点 (查看原文)
    henix 1赞 2014-02-19 22:27:23
    —— 引自第6页
  • 在历史上,一些最坏的灾难就起因于理想主义者们试图强迫人们“做某些对他们最好的事情”。 (查看原文)
    henix 1赞 2014-02-19 22:28:04
    —— 引自第5页
  • 经过了几年的讨论,给我留下最深刻印象的是,一个人可以站在任何位置,编织出一套能使人信服的逻辑论据。在论述异常处理的开创性论文中就这样做的。我们现在是站在古希腊哲学家的位置,在争论着宇宙的本质方面,如此的激烈而敏锐,以至于根本就忘记去研究它了。 (查看原文)
    红色有角F叔 2013-09-28 09:54:56
    —— 引自章节:第十六章 异常处理
  • 对文学的热爱更增强了我的认识:仅仅依据理论和逻辑做决策是没有希望的。.... 经常遇到这种情况,如果我试图取缔一个我个人不喜欢的语言特性时,我总抑制住自己这样做的欲望,因为我不认为自己有权把个人的观点强加给别人。我知道通过强力地推行逻辑,毫无同情心地谴责“思想中坏的、过时的、混乱的习惯”,可能在相对短的时间内能有更多的建树。但是,人的代价总是最高的。 (查看原文)
    红色有角F叔 2015-04-06 10:53:32
    —— 引自章节:一般性的背景
  • 选用派生(derived)和基(base)作为名字,是因为我老记不住到底哪个是子(sub)哪个是超(super),而且我也不是惟一有这种特别问题的人。我也注意到,许多人认为子类比它的超类信息更多是与直觉相矛盾的。 (查看原文)
    夏夜寂寞属壁虎 1赞 2022-04-16 21:59:17
    —— 引自章节:第 2 章 C with Classes
  • One conclusion I drew from the wildly divergent comments on the HOPL-2 paper - and from many other sources - is that there is no agreement on what a programming language really is and what its main purpose is supposed to be. Is a programming language a tool for instructing machines? A means of communicating between programmers? A vehicle for expressing high-level designs? A notation for algorithms? A way of expressing relationships between concepts? A tool for experimentation? A means of controlling computerized devices?My view is that a general-purpose programming language must be all of those to serve its diverse set of users. The only thing a language cannot be - and survive - is a mere collection of "neat'' features. The difference in opinions reflects differing views of what... (查看原文)
    金鱼马 2022-08-24 10:48:51
    —— 引自第7页
  • This implies that language design parts ways from the "purer'' and more abstract disciplines such as mathematics and philosophy. To serve its users, a general-purpose programming language must be eclectic and take many practical and sociological factors into account. In particular, every language is designed to solve a particular set ofproblems at a particular time according to the understanding of a particular group of people. From this initial design, it grows to meet new demands and reflects new understandings of problems and of tools and techniques for solving them. This view is pragmatic, yet not unprincipled. It is my firm belief that all successful languages are grown and not merely designed from first principles. Principles underlie the firstdesign and guide the further evolution o... (查看原文)
    金鱼马 2022-08-24 10:48:51
    —— 引自第7页
  • 但是我不久发展出一种对于争论的健康的不敬观点(当然也包括对我自己),因为我发现对每个特征都可能构造出一个似乎有道理的争论。从另一方面看,如果你接受了能使某些人活得更方便的所有特征,结果得到的绝不会是一个好语言。现存的合理特征太多了,任何语言都不可能即提供所有这些东西,而又能具有内在的一致性。 (查看原文)
    [已注销] 1回复 2012-07-30 22:39:35
    —— 引自章节:3.13语言设计的工具
  • 因此,只要可能我就设法去做试验。 不幸的是你也常常无法推导出正确的试验。要想提供一个完全规模的系统,带有实现、工具、教育,并且有些人用这个,另一些人用的是其他东西,使人能够衡量它们的差异,这显然是完全不可能的。人的差别太大,项目的差异太多,而所建议的特征在定义、实现和解释它们的努力中都会发生变化。所以我只好用定义、实现和解释特征的努力作为一种设计辅助。一旦实现了某个特征,我和另外几个人就会去使用它。我尽可能地去试,对做出任何正面的论断保持高度的疑心。只要可能,我就依靠那些正在考虑实际应用的老练程序员的观点。这样我就设法补偿了自己“试验”中最根本的局限性:这些试验通常只是比较各种实现方式,对小的实例检查源代码的质量,以及对这些实例运行时间和空间进行度量,等等。在这种设计过程中我至少能有一些反馈,使得我能够依靠试验,而不是仅靠纯粹的思维。我的牢固信念是,语言设计并不是纯粹的思维训练,而是一种在需要、想法、技术和约束条件之间取得平衡的非常实际的修炼。一个好语言不是设计出来的,而是成长起来的。 (查看原文)
    [已注销] 1回复 2012-07-30 22:39:35
    —— 引自章节:3.13语言设计的工具
  • 由于美国出版业的好奇,此书具有1986年的版权。 (查看原文)
    [已注销] 2012-09-12 17:37:17
    —— 引自第93页
  • 类型如果是使用过就不能重新定义。 (查看原文)
    [已注销] 2012-09-12 18:05:01
    —— 引自第124页
  • 请注意:学习C++,最根本的是学习编程和设计技术,而不是语言的细节。 (查看原文)
    [已注销] 2012-09-18 11:26:02
    —— 引自第155页
  • 我的看法与上述这些都不同,我认为C++最主要的竞争对手还是C。 (查看原文)
    [已注销] 1回复 2012-09-18 11:37:06
    —— 引自第158页
  • C++里的5种匹配:(我觉得这里的匹配思路与CSS规则selector应用的优先级顺序差不多) 1、不可避免的转换:数组名到指针、函数名到函数指针,T到const T 2、使用了整数提升:char到int,short到int,对应的unsigned,float到double 3、标准转换:int到double、derived*到base*、unsigned int到int(?) 4、用户自定义定义的类型转换:explicit构造函数、operator T() 5、函数声明里包含...的 (查看原文)
    [已注销] 2012-09-18 13:25:12
    —— 引自第204页
  • 他指出,可以把->看作一元运算符,其结果再应用到成员的名称上(哈哈,这不是Haskell的Currying嘛) (查看原文)
    [已注销] 2012-09-18 13:29:46
    —— 引自第216页
  • W | \ AW BW(这里AW,BW标记为从W虚继承) | / CW (查看原文)
    [已注销] 2012-09-18 14:19:30
    —— 引自第231页
  • C++异常处理能够使得部分构造出来的对象也能正确地销毁 (查看原文)
    [已注销] 1回复 2012-09-18 17:00:20
    —— 引自第343页
  • C++的发展必须由实际问题推动 不被牵涉到无益的对完美的追求之中 C++必须现在就是有用的 每个特征必须存在一种合理的明显的实现方式 总提供一条转变的通路 C++是一种语言,而不是一个完整的系统 为每种应该支持的风格提供全面支持 不试图去强迫别人做什么 (查看原文)
    Kimmy 2012-10-02 15:09:27
    —— 引自第77页
  • ……写每个程序时都不存在某种唯一的正确途径。作为程序设计语言的设计者,并没有理由去强迫程序员使用某种特定的风格。但是在另一方面,他们确实有义务去鼓励和支持各种各样的风格与实践,只要那些东西已经被证明是有效的。他们还应该提供适当的语言特性和工具,以帮助程序员避免公认的圈套和陷阱。 (查看原文)
    [已注销] 2012-10-31 22:43:23
    —— 引自第25页
<前页 1 2 3 后页>