文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.1 年表
为了给出一个快速的概述,这里有一个粗略的年表。如果你不熟悉 C++,很多术语、构件、库都会晦涩难懂;大多数在以前的 HOPL 论文 [Stroustrup 1993, 2007] 或本文中有详细解释。
- 1979 年:工作始于
带类的 C
,它变成了 C++;拥有了第一个非研究性的用户;- 语言:
class
、构造函数/析构函数、public
/private
、简单继承、函数参数类型检查 - 库:
task
(协程和仿真支持)、用宏参数化的vector
- 语言:
- 1985 年:C++ 的首次商业发行;TC++PL1 [Stroustrup 1985b]
- 语言:
virtual
函数、运算符重载、引用、常量 - 库:
complex
算法,流输入输出
- 语言:
- 1989–91 年:ANSI 和 ISO 标准化开始;TC++PL2 [Stroustrup 1991]
- 语言:抽象类、多重继承、异常、模板
- 库:输入输出流(但没有
task
)
- 1998 年:C++98、第一个 ISO C++ 标准 [Koenig1998]、TC++PL3 [Stroustrup 1997]
- 语言:
namespace
、具名类型转换[1]、bool
、dynamic_cast
- 库:STL(容器和算法)、
string
、bitset
- 语言:
- 2011 年:C++11 [Becker 2011],TC++PL4 [Stroustrup 2013]
- 语言:内存模型、
auto
、范围for
、constexpr
、lambda 表达式、用户定义字面量…… - 库:
thread
和锁、future
、unique_ptr
、shared_ptr
、array
、时间和时钟、随机数、无序容器(哈希表)……
- 语言:内存模型、
- 2014 年:C++14 [du Toit 2014]
- 语言:泛型 lambda 表达式、
constexpr
函数中的局部变量、数字分隔符…… - 库:用户定义字面量……
- 语言:泛型 lambda 表达式、
- 2017 年:C++17 [Smith 2017]
- 语言:结构化绑定、变量模板、模板参数的构造函数推导……
- 库:文件系统、
scoped_lock
、shared_mutex
(读写锁)、any
、variant
、optional
、string_view
、并行算法……
- 2020 年:C++20 [Smith 2020]
- 语言:
concept
、module
、协程、三路比较、改进对编译期计算的支持…… - 库:概念、范围、日期和时区、
span
、格式、改进的并发和并行支持……
- 语言:
请注意,早年 C++ 的库是很匮乏的。事实上,当时还是存在大量各种各样的库(包括图形用户界面库),但很少被广泛使用,并且很多库是专有软件。这是在开源开发普及之前的事。 这造成了 C++ 社区没有一个重要的共享基础库。在我的 HOPL2 论文 [Stroustrup 1993] 的回顾中,我认为那是早期 C++ 最糟糕的错误。
任务库 [Stroustrup 1985a,c] 是一个基于协程的库,支持事件驱动的仿真(例如随机数生成),与替代方案相比是非常高效的,甚至可以运行在很小的计算机上。例如,我在 256KB 的内存中运行了 700 个任务的仿真。任务库在 C++ 早期非常重要,是贝尔实验室和其他地方许多重要应用的基础。然而,它有点丑陋,并且不容易移植到 Sun 的 SPARC 体系结构,因此大多数 1989 年以后的实现都不支持它。2020 年,协程才刚刚回归(§9.3.2)。
总的来说,C++ 的特性不断增多。ISO 委员会也废除了一些特性,对语言进行了稍许清理,但是考虑到 C++ 的大量使用(数十亿行代码),重要的特性是永远不会被移除的。稳定性也是 C++ 的关键特性。要解决跟语言不断增长的规模和复杂性相关的问题,办法之一是通过编码指南(§10.6)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论