Table of Contents:

wikipedia
https://en.wikipedia.org/wiki/C%2B%2B23

C++23有四个优先级别最高的功能,都是对标准库的补充而不是语言级别,分别是:coroutine(协程)相关的库、模块化的标准库(A modular standard library)、executors以及networking。

标准库对于协程的支持(Library support for coroutines)

C++20引入了无栈协程的特性,为更好的开发异步编程做好了准备。但是由于该版本的协程实现方法一直有很大的争议,协程通过决议的时间很晚,所以来不及在C++20中提供协程相关的支持库,像std::generator、std::task等等,需要在C++23中才能提供,有了这些库的支持,人人都能写协程了。

模块化的标准库(A modular standard library)

C++20引入了modules特性,理论上来说编译速度会得到极大程度的提升,现在开发者可以将自己的工程用module来组织,但是标准库本身没有模块化,现在还不能import任何STL里面的东东,需要等到C++23才可以。

Executors

executor为C++异步编程和并发编程提供一套通用的api,相关的功能从2012年就开始讨论了,经过很多个版本的修改,在2019年已经定案。目前是一个非常简单好用的模型,协程、线程都被统一起来了,直接影响未来编写异步代码的风格。

executor本来是要进入C++20的,但是标准委员会的特性就是保守,从executor分离出来的另外一个特性之前没有验证过,所以推迟到了C++23。既然都等了7年了,再等三年又何妨呢?惨的是那些依赖executor的特性,尤其是networking。

由于当前完成程度很高,executor可能会在未来的几个月之内确认加入C++23。

networking

如果说executor经历了10年以上才有机会进入C++标准,那networking是整整等了20年。

networking是基于asio的一套网络API,是所有C++第三方网络库中最完善、代码质量可信度最高、代码风格最统一(因为作者只有一个人)的一个库,作者从2003年开始就提议将其纳入C++标准库,直到2023年才确定一定会加入标准库。

networking依赖于executor,executor现在已经确定了,所以asio的代码也会作一些改变,改成用executor来封装异步API。