IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [转贴]C++20 最新进展:加入模块化和协程,进入特性冻结阶段

    冬瓜发表于 2019-04-09 05:25:00
    love 0

    有了Modules和协程后,go可以一边凉凉。
    原文:https://www.oschina.net/news/104653/201902-kona-iso-c-committee-trip-report-c20?p=3
    刚刚结束的 C++ 标准委员会2019春季会议在夏威夷科纳举办,委员会在这次会议中确定了下一个国际标准 C++20 的全部特性,这标志着 C++20 的特性设计工作已完成。

    按照 C++20 的发布计划,这次会议正是为了冻结 C++20 的特性而举办,进入特性冻结阶段(Feature freeze)意味着所有的功能特性将被冻结,并且不会再加入更多的新特性。

    接下来我们看看上周会议确定添加至 C++20 草案的新特性:

    • 模块化(Modules)

    • 协程(Coroutines)

    • static, thread_local, 和 lambda capture 的结构化绑定

    • std::polymorphic_allocator<>

    • std::midpoint 和 std::lerp

    • std::execution::unseq 执行策略

    • std::ssize() 作为自由函数(free function)会返回符号大小(signed size)

    • std::span 的可用性增强

    • lookup 中新增预计算哈希值的功能(Precalculated hash values)

    协程的加入应该是最大的惊喜了,值得期待!官方还表示,C++20 应该会是一个像 C++11 那样的大版本。

    以下的特性已在本次会议或之前的会议上通过了批准,但尚未添加到 C++20 中,因为目前规范仍在编写中。它们有望在2019年7月的科隆会议上被加入,不过由于时间限制,可能无法完成所有工作。

    • Expansion statements

    • The C++20 synchronization library

    • std::format

    • constexpr std::vector

    • Allow constexpr allocation, but disallow allocations that are not deleted at compile time

    • constexpr std::type_info::operator==

    • New conceptification of iterators

    • Monadic operations for std::optional

    • std::source_location

    • std::flatmap

    • std::flatset

    • std::any_invocable

    • std::ostream_joiner

    • Stack trace library

    • std::byteswap

    • constinit

    • Deprecating some uses of volatile

    • Implicit creation of objects for low-level object manipulation

    • using enum

    下面的这些特性,早已在之前的会议上通过了批准:

    • Concepts

    • Contracts

    • Ranges

    • operator<=>

    • A lot more constexpr features: consteval functions, std::is_constant_evaluated, constexpr union, constexpr try and catch, constexpr dynamic_cast and typeid

    • std::span

    • Synchronized output

    • std::atomic_ref

    按照计划的发布进度,C++20 预计将于明年夏季推出。


    C++20 发布计划

    最后,看看 C++ 主要特性的开发进度。

    自上次会议以来的变更:

    特性状态依赖Current Target (Conservative Estimate)Current Target (Optimistic Estimate)
    ConceptsConcepts TS v1 published and merged into C++20 C++20C++20
    RangesRanges TS v1 published and merged into C++20ConceptsC++20C++20
    ContractsMerged into C++20 C++20C++20
    ModulesMerged design approved for C++20 C++20C++20
    CoroutinesCoroutines TS v1 published and merged into C++20 C++20C++20
    ExecutorsProposed v1 design approved for C++23 C++26C++23
    NetworkingNetworking TS v1 publishedExecutorsC++26C++23
    ReflectionReflection TS v1 published C++26C++23

    名词解释

    • IS = 国际标准。如 C++ 编程语言:C++11, C++14, C++17 等
    • TS = 技术规范。在该阶段中,特性分支处于可使用状态,但尚未被所有厂商实现。如 Coroutines TS v1, Modules TS v1 等。

    • CD = 委员会草案,即 IS/TS 的草案,用于给标准机构进行审查和反馈("beta testing")。

    据透露,工具研究小组 SG15 决定创建一个 C++ 生态系统技术报告,该报告将描述新模块化 C++ 中工具(构建系统等)的最佳实践和最新技术。



    冬瓜 2019-04-09 13:25 发表评论


沪ICP备19023445号-2号
友情链接