如何(以及谁可以)实现C ++委员会定义的标准库功能?

时间:2017-07-19 14:53:51

标签: c++ c++11 c++-standard-library

当C ++委员会在下一个语言标准中发布将成为标准库一部分的新功能时,他们还会发布一些源代码或某些关于如何实现该功能的指导?

我们以unique_ptr为例。语言委员会只是为该类模板定义了一个接口,让编译器供应商按需要实现它?这个标准库功能的实现过程究竟如何。

任何人都可以为没有支持的平台实现标准库的部分吗?假设我想实现C ++标准库的一些很酷的功能,以便在微控制器环境中使用它。我怎么能这样做?我应该在哪里寻找信息?如果我决定将项目开源,我可以这样做吗?我是否需要完全遵循标准所说的内容,或者我可以编写不合规的版本?

4 个答案:

答案 0 :(得分:7)

通常,

  • 每个新库功能都会通过proposal

  • 如果提案提交给C ++委员会的图书馆演变工作组,它会经历一系列迭代("艰难的基础" as我知道了。

  • 它经历了一系列细化过程,如here

  • 所述
  • 如果它需要(TS)技术规范(自C ++ 11以来),它就会被烘焙。例如,#include <filesystem>位于C ++ 17之前的 Filesystem TS 中。

  • 我认为委员会喜欢的一件事是实施经验

  • 可以在ISOCpp site

  • 上找到更多信息

嗯,关于实施:

  • 有很多&#34;库功能&#34;这不能仅仅作为一个库来实现。他们需要编译器支持。在这些情况下,编译器提供&#34;内在&#34;你可以挂钩。举例来说,clang提供了intrinsics for certain type_traits

  • 大多数图书馆功能都有一些实施经验,主要来自Boost libraries

  • 您实际上可以查看编译器附带的默认标准库的源代码:

  • 遗憾的是,大多数实现使用了大量的下划线。主要是因为它们保留供标准图书馆&#34;

  • 使用
  

任何人都可以为没有支持的平台实现标准库的部分吗?

是的,您可以,到目前为止,您的编译器支持该平台,并且平台或操作系统提供可用的API。例如。 std::coutstd::ifstream的元素以及更多内容需要特定于平台的支持。

  

假设我想实现C ++标准库的一些很酷的功能,以便在微控制器环境中使用它。我怎么能这样做?

您可以查看其他人的代码并从那里开始。我们向巨人学习。一些开源示例:

  

我怎么能这样做?我应该在哪里寻找信息?

  • 您可以查看将该功能引入C ++库的论文。例如,std::optional有一个独立的实现here,在提案阶段用作参考实现。

  • 您可以查看标准库,并进行费力的研究。 : - )

  • 搜索互联网。 : - )
  • 或按标准
  • 指定从头开始编写
  

我是否需要完全遵循标准所说的内容,或者我可以编写不合规的版本?

没有强制要遵循C ++标准库指定的内容。那将是你自己的&#34;库。

答案 1 :(得分:6)

正式,不。与所有标准一样,C ++ Standard设置规则,但不提供实现。但是,从实际的角度来看,几乎不可能在没有提议的实现的情况下将新功能引入标准库,因此您经常可以找到附加到提案的那些功能。

关于“你能写不合规版本”的问题,你可以做任何你想做的事情。采用可能取决于您的合规性,或者可能不会 - 已知超级广泛采用的MSVC违反C ++标准。

答案 2 :(得分:1)

通常情况下,新功能不是标准化的,除非委员会有一些确凿的证据表明它可以实施,并且会很有用。这通常包括boost中的原型实现,GNU库或商业编译器供应商之一。

标准本身不包含任何实施指南 - 它纯粹是一个规范。编译器供应商(或其分包商)选择如何实现该规范。

unique_ptr的特定情况下,它被boost::unique_ptr中的标准采用 - 您仍然可以使用后者。如果你有一个可以为你的微控制器编译的编译器,几乎可以肯定它能够构建足够的提升来使unique_ptr工作。

没有什么可以阻止你编写一个不合规的实现(除了琐碎的一点,如果你把它作为符合标准的出售,并且你不可能得到你当地相当于交易标准的敲门声。)

答案 3 :(得分:1)

委员会不会发布任何参考实施。在早期,事情已经标准化,然后工具开发人员离开并实施标准。这已经发生了变化,现在委员会正在寻找在标准化之前已经实施和测试的功能。

此外,主要的发展通常不会直接进入标准。首先,他们成为http://plnkr.co/edit/sRNxfXsbcWnPU818aZsu?p=preview称为技术规范或TS。这些TS可以在以后纳入主要标准。

您可以自由编写自己的C ++标准库实现。 experimental features有一个测试套件(商业,我没有联系,但Plum Hall非常关注C ++标准化)。

我没有看到任何不符合的问题。几乎所有实现都有一些扩展。只是不要做出任何虚假声明,特别是如果你想出售你的产品。

如果您有兴趣参与,可以通过您的“国家机构”(ANSI for the USA,BSI for the UK等)来完成。 Plum Hall网站上有一个关于标准化的部分,这将是一个很好的起点。