【问题标题】:Similarities and differences between Scala macros and C++ templates [closed]Scala宏和C++模板之间的异同[关闭]
【发布时间】:2012-09-29 17:22:24
【问题描述】:

Scala 的宏和 C++ 模板都提供了对编译时元编程的访问。您能否详细说明相同点和不同点?它们在表现力方面是否相同?

【问题讨论】:

  • 不难看出要问什么。请在点击关闭之前阅读并思考。

标签: c++ templates scala macros


【解决方案1】:

它们都提供编译时元编程,并且都图灵完备,但这就是它们的共同点。我不是 C++ 专家,但据我所知,C++ 模板正在完善这一事实很少被利用,并且很难将它们用于实际编程。通常,模板仅用于提供参数多态性(也称为泛型),而 Scala 宏是用 Scala 编写的,可以在编译时使用该语言的全部功能。

【讨论】:

  • C++ 模板确实很难用于实际编程——像计算阶乘这样的显而易见的例子很简单,但不是很有用。 Boost 和 C++11 使某些事情变得更容易,例如更多的内置类型特征,以及像 enable_if 这样的工具。 C++11 还引入了constexpr,这是一个完全独立的编译时计算工具。我想说,C++ 中模板的常见用途是用于编译时计算对类型进行操作。除此之外的任何事情都是罕见的/困难的/神秘的。
  • 图灵完备的事实很少被利用,但模板本身却经常被利用。另一方面,即使出现decltypeconstexpr,在编译时可用的工具也非常有限。我不知道Scala有什么限制,你能打印(至少到屏幕上)吗?
  • @MatthieuM.:Scala 宏是用 Scala 编写的。你可以在编译时做所有你可以在运行时做的事情。没有限制。 (好吧,编译器有一些超时和内存上限,旨在阻止失控的宏,但仅此而已。)
  • Scala 没有限制。甚至还有在编译时访问数据库的宏。
  • @SteveJessop:cmets 不适合提出单独的问题。没有。
【解决方案2】:

它们之间的一个重要区别是 Scala 宏是用 Scala 编写的,而 C++ 模板是它们自己的编程语言,这与 C++ 完全不同。 C++ 是一种命令式的面向对象的严格不纯语言,C++ 模板是一种声明性混合逻辑/功能的非严格纯语言,它从未打算用作成熟的编程语言,因此缺乏许多必要的特性大型编程。

【讨论】:

  • 我同意大部分答案,除了面向对象的花絮。 C++ 是多范式,它从 OO 中汲取了一些东西,但如果它是 OO 模型,Alan Kay 会很合适,另一方面,它提供的东西比 OO 传统提供的要多得多。
猜你喜欢
  • 2014-01-23
  • 2013-12-11
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多