Concepts TS中的C++概念最近被合并到GCC Backbone.js 中。Concepts允许通过要求类型满足概念的条件(例如“Comparable”)来约束泛型代码。Haskell有类型类。我对Haskell不是很熟悉。概念和类型类是如何联系的?
kmb7vmvb1#
概念(由概念TS定义)和类型类的相关性仅在于它们限制了可以与泛型函数一起使用的类型集。除此之外,我只能想到这两个特性的不同之处。我应该指出,我不是一个HaskellMaven。远非如此。然而,我是TS概念的Maven(我写了它,我为GCC实现了它)。
T
C
constexpr
我认为这些是比较特性(概念TS)和特性(Haskell类型类)的主要区别。但是这两种语言之间有一个根本的哲学差异--它不是函数式的,也不是你正在编写的任何风格的C++。Haskell想要模块化:这样有很多好的属性。C模板拒绝模块化:示例化时查找允许基于类型的优化而没有运行时开销。这就是为什么C泛型库提供广泛的重用和无与伦比的性能。
vcudknz32#
您可能对以下研究论文感兴趣:“A comparison of C++ concepts and Haskell type classes”,Bernardy et al.,WGP 2008. PdfMore details .更新:作为本文的简短总结:本文定义了C++概念术语和Haskell类型类术语之间的精确Map,并使用此Map提供了两者之间的详细功能比较。
在我们的27个标准中,总结在表2中,16个在两种语言中都得到了同等的支持,只有一两个是不可移植的。因此,我们可以安全地得出结论,因为我们开始- C概念和Haskell类型类非常相似。正如下面T.C.所指出的,值得指出的是,这篇论文是比较C0x概念,而不是概念TS。我不知道有什么好的参考文献描述了这些差异。
2条答案
按热度按时间kmb7vmvb1#
概念(由概念TS定义)和类型类的相关性仅在于它们限制了可以与泛型函数一起使用的类型集。除此之外,我只能想到这两个特性的不同之处。
我应该指出,我不是一个HaskellMaven。远非如此。然而,我是TS概念的Maven(我写了它,我为GCC实现了它)。
T
是C
的模型“,尽管这可以使用各种元编程技术来容易地支持。constexpr
函数和模板元编程,可以表达几乎任何你希望编写的约束(例如,范围必须是素数的散列数组)。我认为这些是比较特性(概念TS)和特性(Haskell类型类)的主要区别。
但是这两种语言之间有一个根本的哲学差异--它不是函数式的,也不是你正在编写的任何风格的C++。Haskell想要模块化:这样有很多好的属性。C模板拒绝模块化:示例化时查找允许基于类型的优化而没有运行时开销。这就是为什么C泛型库提供广泛的重用和无与伦比的性能。
vcudknz32#
您可能对以下研究论文感兴趣:
“A comparison of C++ concepts and Haskell type classes”,Bernardy et al.,WGP 2008. PdfMore details .
更新:作为本文的简短总结:本文定义了C++概念术语和Haskell类型类术语之间的精确Map,并使用此Map提供了两者之间的详细功能比较。
在我们的27个标准中,总结在表2中,16个在两种语言中都得到了同等的支持,只有一两个是不可移植的。因此,我们可以安全地得出结论,因为我们开始- C概念和Haskell类型类非常相似。
正如下面T.C.所指出的,值得指出的是,这篇论文是比较C0x概念,而不是概念TS。我不知道有什么好的参考文献描述了这些差异。