gpt4 book ai didi

C++ vs. D、Ada 和 Eiffel(带有模板的可怕错误消息)

转载 作者:IT老高 更新时间:2023-10-28 12:55:55 29 4
gpt4 key购买 nike

C++ 的一个问题是我们从大量使用模板和模板元编程的代码中得到可怕的错误消息。这些概念旨在解决这个问题,但遗憾的是它们不会出现在下一个标准中。

我想知道,这个问题对于所有支持泛型编程的语言来说都是常见的吗?还是 C++ 模板有问题?

不幸的是,我不知道任何其他支持泛型编程的语言(Java 和 C# 泛型过于简化,不如 C++ 模板强大)。

所以我问你们:D、Ada、Eiffel 模板(泛型)是否也会产生如此丑陋的错误消息?是否有可能拥有具有强大通用编程范式但没有丑陋错误消息的语言?如果是,这些语言是如何解决这个问题的?

编辑: 反对者。我真的很喜欢 C++ 和模板。我并不是说模板不好。实际上,我是通用编程和模板元编程的忠实粉丝。我只是在问为什么我会从编译器那里收到如此丑陋的错误消息。

最佳答案

总的来说,我发现泛型的 Ada 编译器错误消息实际上并不比任何其他 Ada 编译器错误消息更难阅读。

另一方面,C++ 模板错误消息因 error novels 而臭名昭著。 .我认为主要区别在于 C++ 进行模板实例化的方式。问题是,C++ 模板比 Ada 泛型灵活得多。它非常灵活,几乎就像一个宏预处理器。 Boost 中的聪明人已经使用它来实现诸如 lambdas 甚至其他语言之类的东西。

由于这种灵 active ,每次第一次遇到模板参数的特定排列时,基本上都必须重新编译整个模板层次结构。因此,解决到 API 下几层不兼容的问题最终会提交给糟糕的 API 客户端进行解密。

在 Ada 中,泛型实际上是强类型的,并向客户端提供完整的信息隐藏,就像普通的包和子例程一样。因此,如果您确实收到一条错误消息,它通常只是引用您尝试实例化的一个泛型,而不是用于实现它的整个层次结构。

是的,C++ 模板错误消息比 Ada 的要糟糕得多。

现在调试完全是另一回事了...

关于C++ vs. D、Ada 和 Eiffel(带有模板的可怕错误消息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529295/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com