Tại sao scalac (trình biên dịch Scala) tối ưu hóa đệ quy đuôi?Tại sao scalac không thể tối ưu hóa đệ quy đuôi trong các tình huống nhất định?
Mã và trình biên dịch lời gọi đó chứng tỏ điều này:
> cat foo.scala class Foo { def ifak(n: Int, acc: Int):Int = { if (n == 1) acc else ifak(n-1, n*acc) } } > scalac foo.scala > jd-gui Foo.class import scala.ScalaObject; public class Foo implements ScalaObject { public int ifak(int n, int acc) { return ((n == 1) ? acc : ifak(n - 1, n * acc)); } }
lưu ý rằng tối ưu hóa tailcall cấp JVM được đóng góp cho java 7 xem http://wikis.sun.com/display/mlvm/TailCalls –