查看原文
其他

C++ 26已初具规模

Linux爱好者 2024-03-09

转自:OSC开源社区(ID:oschina2013)

ISO C++ 委员会于近日举行会议正式通过了 C++ 26 的时间表,共有近 180 名成员参会。ISO C++ 标准委员会主席兼微软本地语言架构师 Herb Sutter 发文详细介绍了有关 C++ 26 的最新进展。他透露,并发和并行小组仍在按计划推进 C++26 的 std::execution 和 SIMD 并行,因此该版本将在 “并发和并行性方面有重大发布”。
C++ 版本以发布年份命名,并遵循三年开发周期;其中包括在推出和发布标准版本前一年的 "feature freeze(功能冻结期)",例如 C++23 的功能冻结是在 2022 年初。C++ 26 的时间表与 C++23 时间表节奏一致。
委员会在会议上共采纳了首批拟议的 40 份 “change papers (变更文件)”。其中,有 2 份是 "将决议应用于所有的 Ready issues" 的文件,应用了一堆微小的修改。还有 38 个是单独的变化,内容涵盖错误修复到新功能:如风险指针 (hazard pointers) 和 RCU。
Sutter 称,目前为止所提出的一些新功能都比较 low key。已采用的 Core language changes/features 有 11 项,包括:
  • 正式增加了对 C++26 中_通配符的支持

std::lock_guard _(mutex);

auto [x, y, _] = f();

inspect(foo) { _ => bar; };
  • 标准属性的三个可忽略性规则

    • [已在 C++23 中] Rule 1. 标准属性必须是可解析的(即,不能只包含随机的废话)。

    • [已在 C++23 中] Rule 2. 删除标准属性不能改变程序的含义:它可以减少程序可能的 legal behaviors,但不能发明 new behaviors。

    • [新] Rule 3. Feature test macros 不应假装支持某个属性,除非实现实际上实现了该属性的可选语义(即,不只是解析它然后忽略它)。

  • @% 和 ` 添加到基本字符集中。

  • 消除了一种可能性,即仅仅对 C++ 代码进行标记就可以成为 C++ 编译器本身的未定义行为的来源。

  • 向强大的编译时库又迈进了一步,包括使std::format有可能支持constexpr编译时字符串格式化。

  • 提案 “User-generated static_assert messages” 允许编译时 static_assert 接受不是 string literals 的 stringlike messages。例如,流行的 {fmt} 库支持 constexpr 字符串格式化,因此这段代码可以在 C++26 中运行:

static_assert(sizeof(S) == 1, fmt::format("Unexpected sizeof: expected 1, got {}", sizeof(S)));
此外,标准库更改 / 功能也有 28 项采用。其中 P2530"Hazard pointers for C++26"增加了并发 TS2 风险指针功能,以在 C++26 中增加基于风险指针的延迟清理。P2545"Read-Copy-Update (RCU)" 则是 C++26 中进行延迟清理的另一种补充方法。
接下来的两次会议将于 11 月在美国夏威夷州科纳举行,由 WorldQuant 和 Standard C++ Foundation 主办;以及次年 3 月在日本东京举行,由 Woven by Toyota 主办。
更多详情可查看此处:https://herbsutter.com/2023/06/16/trip-report-summer-iso-c-standards-meeting-varna-bulgaria/


- EOF -


加主页君微信,不仅Linux技能+1

主页君日常还会在个人微信分享Linux相关工具资源精选技术文章,不定期分享一些有意思的活动岗位内推以及如何用技术做业余项目

加个微信,打开一扇窗


推荐阅读  点击标题可跳转

1、36 张图详解网络基础知识

2、Linux 网络技术栈,看这篇就够了(图文并茂)

3、全面讲解 C 语言的结构体(struct),一网打尽


看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能

点赞和在看就是最大的支持❤️

继续滑动看下一个

C++ 26已初具规模

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存