【问题标题】:Does @tailrec affect compiler optimizations?@tailrec 会影响编译器优化吗?
【发布时间】:2014-05-08 23:41:40
【问题描述】:

我查看了 this question 试图更好地理解 scala 中的 @tailrec 注释。

我不确定注解是否还提示编译器进行一些优化,或者它仅在您标记不是尾递归的方法时用于警告?

更具体地说 - 此注释是否会以任何方式影响性能?比如我不放这个注解,编译器会把尾递归函数编译成非尾递归?

【问题讨论】:

  • 查看this answer specifically,Scala 编译器似乎会自动优化它确定为尾递归的方法 - 注释仅用于向编译器发出信号,表明您期望 i> 这个方法能够参与那些优化。
  • 我也这么认为,但我不确定。同样在与降低我信心的同事交谈后,我决定验证它。
  • 请注意,如果有多个递归点并且其中只有一些(甚至只有一个)是尾递归的,而其他不是尾递归的,编译器不会在使用 @tailrec 时将其标记为错误.

标签: scala recursion compiler-optimization tail-recursion


【解决方案1】:

根据 scaladoc:

验证方法是否被编译的方法注解 尾调用优化。

如果它存在,编译器将发出错误,如果该方法 不能优化成循环。

如果您认为自己编写了可优化的函数而实际上并没有,这是触发错误的验证。就算不放,编译器也会尽可能优化代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2012-05-10
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    相关资源
    最近更新 更多