Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';s是主流C+中GC实现的时间线+;编译器?_C++_C++11 - Fatal编程技术网

C++ 什么';s是主流C+中GC实现的时间线+;编译器?

C++ 什么';s是主流C+中GC实现的时间线+;编译器?,c++,c++11,C++,C++11,众所周知,C++11允许GC,但主流编译器都不支持GC 在主流编译器(如GCC,MSVC,Intel编译器,Clang等)中何时可以实现这一点,是否有任何讨论 我期待着使用此功能。C++11标准增加了对实现垃圾收集的语言支持,但没有实际工作的垃圾收集器。C++的工作GC库最突出的例子是。据我所知,目前还没有计划将这个库与任何主要编译器整合在一起,但已经多次暗示标准委员会对垃圾收集器与下一个版本的C++集成非常感兴趣(*)。 (*)例如,请参见您有点误解的 C++11支持更好地与GC集成,这要归功

众所周知,C++11允许GC,但主流编译器都不支持GC

在主流编译器(如
GCC
MSVC
Intel编译器
Clang
等)中何时可以实现这一点,是否有任何讨论


我期待着使用此功能。

C++11标准增加了对实现垃圾收集的语言支持,但没有实际工作的垃圾收集器。C++的工作GC库最突出的例子是。据我所知,目前还没有计划将这个库与任何主要编译器整合在一起,但已经多次暗示标准委员会对垃圾收集器与下一个版本的C++集成非常感兴趣(*)。
(*)例如,请参见您有点误解的

C++11支持更好地与GC集成,这要归功于几个关键函数,它们可以帮助C++11更好地分析哪些是可访问的,哪些是不可访问的。如果选中新标题,您将注意到:

  • declare\u reachable
    :声明对象不能回收
  • undeclare\u reachable
    :声明可以回收对象
  • 声明无指针
    :声明内存区域不包含可跟踪指针
  • 取消声明\u no\u指针
    :取消std::declare\u no\u指针的效果
然而,这并不意味着C++11建议使用GC或推动编译器集成GC

一些地面军事系统,如的,已经存在。此新API只是接口的标准化,用于与它们进行交互:

  • 正确性:
    declare\u reachable
    在某些情况下可能会有所帮助,但在大多数情况下应该是自动的
  • 性能:例如,这种GC不知道类型,可能会错误地检测内存区域中包含整数的指针
    declare_no_指针
    消除了扫描某些内存区域的需要,提高了性能并减少了误报(从而进一步提高了性能)

因此,如果您愿意,您已经可以使用Boehm的垃圾收集器了,C++11只是通过标准API对其进行了改进,以便您可以更轻松地从一个GC切换到另一个GC。

包含垃圾收集的实现可能不符合C++98或C++03。C++11添加了足够多的内容以允许一致性,并且仅仅比这多了一小步,试图使其稍微合理

有人提议在标准中增加更全面的GC支持,但被拒绝。我认为拒绝是相当合理的。该提案对标准进行了大约40页的修改,但最终都是为了支持一个非规范性脚注,如:“预计高质量的实现将试图最大限度地利用程序可用的内存。”

就实现而言,曾有一段时间(在egcs时代)有人谈论将Boehm Demers Weiser收集器(一个修改版本)合并到egcs中。我似乎记得至少有一个版本是这样做的,至少在某种程度上是这样(尽管我不记得它是否曾被视为“发布”版本)。然而,那是很久以前的事了,据我所知,多年来没有人做过这件事。与此同时,Gcc已经发生了很大的变化,如果有人想在今天这样做,他们可能必须从头开始

我想这至少可以消除微软C++/CLI不符合标准的一个区域,因此,根据您希望在其他地方的一致性,可以(C++)将C++和CLI作为C++垃圾回收。不过,大多数人对它的评价都不那么恭维(甚至微软也建议它只用于链接.NET和real C++之间的互操作)

Clang的目标是LLVM,它包括支持GC的钩子(已经在其他项目中使用并得到验证)。因此,它可能最有可能在相对较短的时间内产生一个有效的实现

虽然我可能明显是错的,但我不希望英特尔在短期内加入垃圾收集器。英特尔专注于生产最好的输出代码,而GC可能帮不了大忙。他们这样做的主要原因可能是简化多线程处理,这是Intel投入大量精力的另一个领域(但至少到目前为止,在库中的投入要多于编译器本身)


对于大多数发布的C++代码来说,GC进入主流使用,似乎很少或没有需求,甚至兴趣。当我最初写这个答案的时候,我猜现在会有人写了。在此期间,C++对GC的兴趣似乎已经消退了,以至于我完全不相信它真的有可能再次发生。这仍然可能发生,但我看不出有足够的兴趣来预测一个可能发生的时间框架。如果有什么不同的话,我想可能会有更多的兴趣转向一个明确编码一些RAII语义的锈迹模型(虽然这个总体想法似乎引起了一些兴趣,但我也没有看到任何足够具体的东西来预测什么时候可能会发生)。

对此没有任何引用,但我相信所有与GC相关的内容最终都从标准中删除了。编辑:Quick google显示,为了减少垃圾收集的阻碍,我们已经采取了一些措施,但这并不是必需的或预期的(即,实现定义)。如果您真的希望使用GC,那么也许您应该使用不同的语言。看看是什么阻止了你使用已经为C++03提供的GCs?(不是说没有一些潜在的有效理由,而是问你的问题是什么…)你到底为什么想要GC?C++11为aut提供了不错的解决方案