众所周知,C++ 11允许GC,但没有一个主流编译器支持GC.
有没有何时能在主流编译器等进行安装的任何讨论GCC,MSVC,Intel Compilers,Clang,等.
我期待着使用这个功能.
Mat*_* M. 12
你有点误解了.
C++ 11支持更好地与GC集成,这得益于一些关键功能,可帮助他们更好地分析可达到的内容和不可达的内容.如果您检查新<memory>标题,您会注意到:
declare_reachable:声明对象无法回收undeclare_reachable:声明可以回收对象declare_no_pointers:声明内存区域不包含可跟踪指针undeclare_no_pointers:取消std :: declare_no_pointers的效果但这并不意味着C++ 11建议使用GC或推动编译器集成GC.
一些地方选区,如Boehm-Demers-Weiser 's,已经存在.这个新的API只是与它们交互的接口的标准化,用于:
declare_reachable在某些情况下可能有所帮助,但在大多数情况下它应该是自动的declare_no_pointers无需扫描某些内存区域,提高性能并减少误报(从而进一步提高性能)所以,你可以已经使用贝姆的垃圾收集器,如果你愿意的话,C++ 11只是提高了其与标准的API,让你可以更容易地从一个GC切换到另一个.
包含垃圾回收的实现可能不符合C ++ 98或C ++ 03。C ++ 11添加了足够多的内容以允许一致性,并且在此基础上走了很小的一步,试图使其稍为合理。
有人提议向该标准添加更全面的GC支持,但遭到了拒绝。我认为拒绝是很合理的。该提案对标准进行了大约40页的更改,但最终所有内容都是为了支持一个非规范性的脚注,其内容如下:“预计高质量的实现将尝试使程序可用的内存最大化。”
就实现而言,曾经有一次(在egcs天内)有人谈论将Boehm-Demers-Weiser收集器(的改进版本)合并到egcs中。我似乎记得,至少有一个版本在某种程度上做到了这一点(尽管我不记得它是否曾经被认为是“发行”版本)。但是,那是很久以前的,据我所知,多年来没有人对此进行过研究。同时,Gcc已经发生了足够的变化,如果有人今天想要这样做,他们可能必须从头开始。
我想这至少摆脱了Microsoft C ++ / CLI以前不符合该标准的一个领域,因此,根据您希望在其他地方实现多少一致性,您可以将C ++ / CLI视为带有垃圾的C ++。采集。但是,大多数人以较少的免费术语来考虑它(甚至Microsoft推荐它仅用于在.NET和真实C ++之间链接互操作)。
Clang针对LLVM,其中包括支持GC的挂钩(已在其他项目中使用和证明)。因此,它可能是在相对较短的时间内产生可行的实现方案的最佳机会。
尽管我显然可能是错的,但我不希望英特尔很快会引入垃圾收集器。英特尔专注于产生最好的输出代码,而GC可能并不能提供很多帮助。他们这样做的主要原因可能是简化多线程,这是Intel付出很多努力的另一个领域(至少到目前为止,库中比编译器本身更多的工作)。
至于GC在大多数已发布的C ++代码中已成为主流,似乎几乎没有需求,甚至没有兴趣。当我最初写这个答案时,我猜到现在有人会写一个。在那段时间里,对于C ++的GC的兴趣似乎在减弱,以至于我一点也不相信它真的真的有可能再发生了。它仍然可能发生,但我认为没有足够的兴趣来预测可能的时间表。如果有的话,我想可能会有更多的兴趣转向建立类似于Rust的模型,该模型可以明确地编码一些RAII语义(但是,尽管这种总体思路似乎引起了人们的兴趣,但我还没有看到足够具体的东西来预测何时将它可能会发生)。