gpt4 book ai didi

c++ - c++ 概念与 Haskell 类型类有何不同?

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

Concepts TS 中的 C++ 概念最近已合并到 GCC 主干中。概念允许人们通过要求类型满足概念条件(例如“可比较”)来约束通用代码。

Haskell 有类型类。我对 Haskell 不是很熟悉。概念和类型类有什么关系?

最佳答案

概念(由概念 TS 定义)和类型类仅在它们限制可用于泛型函数的类型集的意义上相关。除此之外,我只能想到这两个功能的不同之处。

我应该注意我不是 Haskell 专家。离得很远。但是,我是 Concepts TS 方面的专家(我编写了它,并为 GCC 实现了它)。

  • 概念(和约束)是确定类型是否是集合成员的谓词。您不需要显式声明一个类型是否是概念模型(类型类的实例)。这是由一组要求决定并由编译器检查的。事实上,概念根本不允许您写“TC 的模型”,尽管使用各种元编程技术很容易支持这一点。

  • 概念可用于约束非类型参数,并且由于 constexpr 函数和模板元编程,几乎可以表达您希望编写的任何约束(例如,哈希数组其范围必须是素数)。我不相信类型类是这样的。

  • 概念不是类型系统的一部分。它们限制了声明的使用,在某些情况下还限制了模板参数推导。类型类是类型系统的一部分,参与类型检查。

  • 概念不支持模块化类型检查或编译。模板定义不会根据概念进行检查,因此在实例化过程中仍然可能会延迟捕获类型错误,但这确实为库编写者增加了一定程度的灵 active (例如,将调试代码添加到算法不会改变接口(interface))。因为类型类是类型系统的一部分,所以可以模块化地检查和编译泛型算法。

  • Concepts TS 支持基于约束排序的通用算法和数据结构的专门化。我根本不是 Haskell 的专家,所以我不知道这里是否有等价物。我找不到。

  • 使用概念永远不会增加运行时成本。我上次查看时,类型类可能会产生与虚函数调用相同的运行时开销,尽管我知道 Haskell 非常擅长优化这些。

我认为这些是比较特征(概念 TS)和特征(Haskell 类型类)时的主要区别。

但是两种语言存在根本的哲学差异——与您编写的任何 C++ 风格相比,它不是函数式的。 Haskell 想要模块化:这样有很多不错的属性。 C++ 模板拒绝模块化:实例化时查找允许基于类型的优化而没有运行时开销。这就是 C++ 泛型库提供广泛重用和无与伦比的性能的原因。

关于c++ - c++ 概念与 Haskell 类型类有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124627/

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