Bjarne Stroustrup在Core C++ Conference中的线上问答实录(部分)

Blog
Author:
Amir KirshAmir Kirsh
Published On:
8月 26, 2021
Estimated reading time:
1 minute

我们很荣幸能参加 Bjarne Stroustrup 线上会议的Core C++ Conference,接下来是一个有趣的问答环节内容总结。

这篇文章涵盖了 C++ 2006 年到 2020 年的蜕变,内容丰富且振奋人心,值得我们用文字记录。问答部分提出了一些非常好的问题,Bjarne 也给出了非常有意思的回答,我想在这篇简短的博客中总结一下。

当然,这是我根据自己最内容的理解做出的总结,如果我有任何不当的解读,欢迎参与会议的观众们随时指出(这次会议很受欢迎,有 200 多个参参与者)或者Bjarne 也可以给予指点,如果你偶然读到 C++ 的博客和评论

很抱歉,我没能记录提问者的名字,你们提出了很多很好的问题。如果提问的观众可以将你的名字发送给我,我将很高兴添加在博客中。

创建 C++ 方言的失败经历

C++ 中的“大众”方言,一般都觉得是 Java C 语言,但其实它们是很不一样的语言,在语法上和 C++ 可能有一些相同点,但大部分都是不同的。这个问题主要针对 Bjane 如何看待微软试图用 C++ .NET 创建一个新的 C++ 方言,即 AKA C++/CLI(C++ 修改为公共语言基础结构)?

Bjarne 的回答简洁有力。他和业界也一样,把这个看作是创建 C++ 方言不太成功的尝试。

D Rust 会是下一个 C++ 吗?

还有另外两种语言似乎也在蓄势待发(其中一种发展更为强劲):D 和 Rust。观众对 Bjarne 的问题是,他如何看待这些语言,与对比 C++?在他看来,这些语言能够解决 C++ 中的一些问题吗?

Bjarne 首先回答说,他很高兴看到新语言的发展。新的语言带来了新的想法,启发我们去重新思考和改进,但竞争很激烈。就他自己来说,他并不喜欢这两种语言。他说,他试了一下 Rust,发现即使用它编写简单的代码,过程也很麻烦且费时。当然,这是他个人的主观经验。不过,市场的评价也似乎也差不太多,对比过去几年中 Rust 的使用率和 C++ 的用户增长就能知道。Bjarne 补充道,当我们看到其他语言中的一些优点时,我们( C++ 社区和 ISO 委员会),要大胆地以此为灵感,推进 C++ 的发展。其他语言去尝试新的范式和方法是一件好事,如果某些方面适合 C++,他很乐于借鉴。

ABI兼容性

 Bjarne-Stroustrup_Core-C

现在是考虑 ABI 标准化的时候了吗?我们可以打破编译器之间的壁垒,允许跨编译器使用二进制文件(静态或动态链接)来实现统一的体系结构吗?

Bjarne,正如之前关于这个主题的讨论一样,对 ABI 的兼容性和标准化持怀疑和消极态度。他说,要实现这一目标,首先需要打破目前的 ABI,而目前看来, ABI 还尚未成功。实现标准 ABI 可能对许多人有利,但现在的情况是,标准委员会不希望这样做。Bjarne 说,这是一个难题,他无法提供解决方案。

错误

这个问题涉及到语言规范中多年来出现的一些错误。对于这些错误有什么“解决方案”吗?如果有,相应的解决方案是什么?

Bjarne 说,我们应该具体问题具体分析。是的,在语言中,我们采取一些创新措施——但你不能回到过去,也不能解决所有问题。你能做的就是想出一个更好的做事方法,降低旧方法的吸引力和使用率,以新换旧。当然,其缺点是,对于同一个问题,你可能有两种语言方案,但无法通过更改行为来无缝地“修复”问题,且无法保证不会损害现有代码。我们已经用字符串实现了这一点,从写时拷贝(COW)到小字符串优化(SSO)。但目前,这个方法项目中产生了许多问题,这些问题看起来可能只是一个简单的内部更改,不过,你必须非常谨慎地对待你所做的任何更改。未来的方向应是想出更新、更好的方法。

当然,还有 Covid-19

 Core-C-2021_inside.jpg

最后一个问题,当然是关于新冠病毒及其对 C++ ISO 委员会工作的影响:新冠大流行的情况下,标准委员会从现场会议转为在线会议模式会影响 C++ 23 的发展吗?

Bjarne 说:确实,工作速度会受到影响。一周紧密的线下标准委员会会议,与分散的线上会议,效率肯定不同,即使线上会议组织有序。另一方面,正如 Bjarne 所说,C++23 在计划中就不是主要版本。C++20 是一个主要的版本,所以 C++23 更多的是修复、升级小的特性,就像 C++14 对于 C++11 的改进一样,他希望添加一些重要的特性。但是,因为新冠病毒的出现,目前 C++23 进展较慢。

Bjarne 仍然希望在C++23中看到的变化是:(a)将协程支持添加到标准库中,这意味着将协程用法添加到 std 中;(b) 将标准库转换为模块;(c)执行器,用于管理并发和并行执行的标准库解决方案。

静态反射也很重要,它会为语言增添强大的力量,但从发展来看,C++23 已经做好了准备。

总结

Bjarne 的演讲已经是业内大事件,更别说回答我们自己的问题了。这次谈话,连同问答一起,帮助我们更好地理解 C++ 是如何演变的,如何持续发展的?其目的是什么,可以借助哪些工具和力量?以及为什么它仍然是最好的软件语言之一,也许是顶尖的,不过我们多少有点偏爱 C++

Whitepaper download