返回介绍

1.1 年表

发布于 2024-08-19 12:44:37 字数 2369 浏览 0 评论 0 收藏 0

为了给出一个快速的概述,这里有一个粗略的年表。如果你不熟悉 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]booldynamic_cast
    • 库:STL(容器和算法)、stringbitset
  • 2011 年:C++11 [Becker 2011],TC++PL4 [Stroustrup 2013]
    • 语言:内存模型、auto、范围 forconstexpr、lambda 表达式、用户定义字面量……
    • 库:thread 和锁、futureunique_ptrshared_ptrarray、时间和时钟、随机数、无序容器(哈希表)……
  • 2014 年:C++14 [du Toit 2014]
    • 语言:泛型 lambda 表达式、constexpr 函数中的局部变量、数字分隔符……
    • 库:用户定义字面量……
  • 2017 年:C++17 [Smith 2017]
    • 语言:结构化绑定、变量模板、模板参数的构造函数推导……
    • 库:文件系统、scoped_lockshared_mutex(读写锁)、anyvariantoptionalstring_view、并行算法……
  • 2020 年:C++20 [Smith 2020]
    • 语言:conceptmodule、协程、三路比较、改进对编译期计算的支持……
    • 库:概念、范围、日期和时区、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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文