【问题标题】:Is there something like expression templates in Rust?Rust 中是否有类似表达式模板的东西?
【发布时间】:2015-05-08 20:09:51
【问题描述】:

在 C++ 中,表达式模板是一种技术,它依赖于编译器对 C++ 代码中表达式的了解来简化和优化它们,使其超出程序程序的可能范围。这是一种强大的技术,例如Eigen 和 Armadillo 矩阵库可加快矩阵上的某些复合运算。一个incomplete wiki page on the Eigen web page 几乎要开始解释了。

我想知道 Rust 中是否存在类似的技术,即有没有办法让 Rust 编译器在编译时优化某些表达式,以便创建最少数量的临时对象。

【问题讨论】:

  • afaik rustc 不做任何优化,除了常量求值(只依赖于常量的折叠表达式)。所有的优化都在 llvm 中完成。
  • @ker 是的,但这主要是一个实现细节,与运行时性能无关,因为 LLVM 非常擅长优化。
  • @ker 是的,但是由于模板的实例化方式,编译器/优化器实际上有足够的信息来轻松优化这些东西,所以我猜语言或 rustc 本身需要有某种方式做这种操作。

标签: c++ rust


【解决方案1】:

如果我没看错Expression Templates,那么你可以看到它们与 Rust 迭代器的作用:filtertake 等方法返回一个表达式模板,一个代表计算但不代表计算的结构执行它直到请求。这会立即提供您需要的优化,不会创建临时对象。

使用where 子句,我想可以编写专门化来进一步优化某些计算组合。

【讨论】:

  • 主要缺乏(但希望很快会出现)是 rust 中的依赖类型。例如template<int i> 没有 rust 等价物,因此循环展开之类的事情由 LLVM 决定,而 C++ 中的表达式模板(基本上)可以保证这一点。
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2021-09-29
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多