Tail-call optimization 5. Solutions 1....Tail-call optimization You may have heard the term call stack....The answer is tail-call optimization....Let’s rewrite our factorial function to be eligible for tail-call optimization: function fact(acc, n)...In some functional languages, tail-call optimization can also be achieved using continuation-passing
1.3.0 public fun Flow.launchIn(scope: CoroutineScope): Job = scope.launch { collect() // tail-call
用于这类递归问题的最快优化方法是 Tail-Call Optimization,Julia 语言可以随时添加这类优化。...但是 Julia 因为一些原因并没有添加,主要是:任何需要使用 Tail-Call Optimization 的案例同时也可以使用循环语句。...但是循环对于优化显得更加鲁棒,因为有很多递归都不能使用 Tail-Call 优化,因此 Julia 还是建议使用循环而不是使用不太稳定的 TCO。
Binding is done using the heap instead of the stack, * allowing tail-call elimination. */ sealed abstract
这不是巧合,而是为了利用“尾调用优化”(tail-call optimization)技术,令“跳至方法实现”这一操作变得更简单些。
*/ public fun Flow.launchIn(scope: CoroutineScope): Job = scope.launch { collect() // tail-call
当前编译器并未实现尾递归优化(tail-call optimization)。
CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__(void *msg) { _dispatch_main_queue_callback_4CF(msg); asm __volatile__(""); // thwart tail-call
递归深度问题 Python不支持tail-call elimination(尾调用消除)。因此,如果我们使用了更多的桟帧,并且超过了默认的调用栈的深度,那么你将会引起栈溢出的问题。
后多将不能正确得到程序栈信息; backtrace_symbols的实现需要符号名称的支持,在gcc编译过程中需要加入-rdynamic参数; 内联函数没有栈帧,它在编译过程中被展开在调用的位置; 尾调用优化(Tail-call
code 1 public fun Flow.launchIn(scope: CoroutineScope): Job = scope.launch { collect() // tail-call
natChains, existingNATChains[chain]) writeLine(natRules, "-X", chainString) } } // Finally, tail-call
Starovoitov, A. 2015a. bpf: allow bpf programs to tail-call other bpf programs.
)this), this); objc_overrelease_during_dealloc_error(); return 0; // allow rootRelease() to tail-call
还有一个概念需要理解一下:“尾调用优化”(tail-call optimization)技术: 如果某函数的最后一项操作是调用另外一个函数且不会返回值另作他用时,那么就可以运用“尾调用优化”技术。
领取专属 10元无门槛券
手把手带您无忧上云