Skip to content

Cpp-Club/Cxx_HOPL4_zh

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

在纷繁多变的世界里茁壮成长:C++ 2006–2020

这是 C++ 之父 Bjarne Stroustrup 的 HOPL4 论文的中文版。

HOPL 是 History of Programming Languages(编程语言历史)的缩写,是 ACM(Association of Computing Machines,国际计算机协会)旗下的一个会议,约每十五年举办一次。Bjarne 的这篇论文是他为 2021 年 HOPL IV 会议准备的论文,也是他的第三篇 HOPL 论文。在这三篇前后间隔近三十年的论文里,Bjarne 记录了 C++ 的完整历史,从 1979 年到 2020 年。这篇 HOPL4 论文尤其重要,因为它涵盖了 C++98 之后的所有 C++ 版本,从 C++11 直到 C++20。如果你对更早期的历史也感兴趣的话,则可以参考他的其他 HOPL 论文,及他在 1994 年出版的《C++ 语言的设计和演化》(The Design and Evolution of C++)。

鉴于这篇论文对于 C++ 从业者的重要性,全球 C++ 及系统软件技术大会的主办方 Boolan 组织了一群译者,把这篇重要论文翻译成了中文,让 C++ 开发人员对 C++ 的设计原则和历史有一个系统的了解。下面是论文的完整摘要:

到 2006 年时,C++ 已经在业界广泛使用了 20 年。它既包含了自 1970 年代初引入 C 语言以来一直没有改变的部分,又包含了在二十一世纪初仍很新颖的特性。从 2006 年到 2020 年,C++ 开发者人数从约 300 万增长到了约 450 万。在这段时期里,有新的编程模型涌现出来,有硬件架构的演变,有新的应用领域变得至关重要,也有好些语言在争夺主导地位,背后有雄厚的资金支持和专业的营销。C++——一种没有真正商业支持的、老得多的语言——是如何在这些挑战面前继续茁壮成长的?

本文重点关注 ISO C++ 标准在 2011 年、2014 年、2017 年和 2020 年的修订版中的重大变化。标准库在篇幅上约占 C++20 标准的四分之三,但本文的主要重点仍是语言特性和它们所支持的编程技术。

本文包含了长长的特性清单,其中记录了 C++ 的成长。我会对重要的技术要点进行讨论,并用简短的代码片段加以说明。此外,本文还展示了一些失败的提案,以及导致其失败的讨论。它提供了一个视角,如何看待这些年来令人眼花缭乱的事实和特性。我的重点是塑造语言的想法、人和流程。

讨论主题包括各种方向上的努力,包括:通过演进式变化保留 C++ 的本质,简化 C++ 的使用,改善对泛型编程的支持,更好地支持编译期编程,扩展对并发和并行编程的支持,以及保持对几十年前的代码的稳定支持。

ISO C++ 标准是通过一个共识流程演化而来的。无可避免,在方向、设计理念和原则方面,不同的提案间存在竞争和(通常是礼貌性的)冲突。委员会现在比以往任何时候都更大、更活跃,每年有多达 250 人参加三次为期一周的会议,还有更多的人以电子方式参加。我们试图(并不总是成功)减轻各种不良影响,包括“委员会设计”、官僚主义,以及对各种语言时尚的过度热衷。

具体的语言技术话题包括内存模型、并发并行、编译期计算、移动语义、异常、lambda 表达式和模块。要设计一种机制来指定模板对其参数的要求,既足够灵活和精确,又不会增加运行期开销,实践证明这很困难。设计“概念”来做到这一点的反复尝试可以追溯到 1980 年代,并触及到 C++ 和泛型编程的许多关键设计问题。

文中的描述基于个人对关键事件和设计决策的参与,并以 ISO C++ 标准委员会档案中的数千篇论文和数百份会议记录作为支持。

下面是论文的一级目录:

  1. 前言
  2. 背景:C++ 的 1979–2006
  3. C++ 标准委员会
  4. C++11:感觉像是门新语言
  5. C++14:完成 C++11
  6. 概念
  7. 错误处理
  8. C++17:大海迷航
  9. C++20:方向之争
  10. 2020 年的 C++
  11. 回顾

参加论文翻译工作的译者有(按拼音序):

  • 陈常筠
  • 高辉
  • 何荣华
  • 何一娜
  • 侯晨
  • 侯金亭
  • 彭亚
  • 王奎
  • 王绍新
  • 吴咏炜
  • 徐宁
  • 杨文波
  • 于波
  • 余水清
  • 翟华明
  • 章爱国
  • 张云潮

论文翻译的校对和体例统一工作由吴咏炜、杨文波、张云潮完成。最后的发布由吴咏炜完成。

我们翻译的是论文的正文部分,英文原文超过 140 页。最后的参考文献部分,由于翻译的意义不大,没有译出。不过,这也带来了一个小小的负面后果:虽然我们对论文内部的交叉引用可以用脚本生成链接,但对指向参考文献的链接就完全无能为力了。所以,如果想要阅读参考文献的话,只能请你到英文原文结尾的 References 部分自行查找了。

翻译过程中我们发现了一些原文中的小问题,并在译文中进行了修正或标注(绝大部分已经经过 Bjarne 老爷子确认)。当然,在翻译过程中引入翻译错误或其他技术问题,恐怕也在所难免——不过,跟 ACM 上发表论文不同,这个网页仍然是可以修正的。所以,如果你,亲爱的读者,发现问题的话,请不吝提交 pull request,我们会尽快检查并进行修正。

About

Chinese translation of Bjarne Stroustrup's HOPL4 paper

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published