PL/SQL 是否执行尾调用优化?

发布于 2024-07-29 13:55:00 字数 105 浏览 7 评论 0原文

我对这门语言相当陌生,我想知道尾部调用是否得到了优化。 在其他语言中,我可以检查机器代码或中间表示并自己计算出来,但我不知道如何在 PL/SQL 中做到这一点。

提前致谢。

I'm fairly new to the language, and I was wondering if tail calls were optimized. In other language I could examinate the machine code or an intermediate representation and figure it for myself but I have no idea about how to do that in PL/SQL.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

可是我不能没有你 2024-08-05 13:55:01

在线文档建议不要:

http: //download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884

每次递归调用都会创建一个新的
中声明的任何项目的实例
子程序,包括参数,
变量、游标和异常。
同样,新的 SQL 实例
在每个级别创建语句
在递归下降中。

和:

至少有一条路径通向
终止条件。 否则,
递归会一直持续到 PL/SQL
内存不足并提高
预定义异常STORAGE_ERROR。

如果尾部调用优化可用,它不会耗尽存储空间(尽管如果让它运行太长时间,它可能会超时。)

您也许能够通过实验看到它的作用:编写一个以对自身进行尾调用,并观察调用时 Oracle 进程的内存使用情况,或者查看收到的错误消息。 看看是否可以让它无限期挂起而不使用增加内存。

The online docs suggest not:

http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884

Each recursive call creates a new
instance of any items declared in the
subprogram, including parameters,
variables, cursors, and exceptions.
Likewise, new instances of SQL
statements are created at each level
in the recursive descent.

And:

At least one path must lead to a
terminating condition. Otherwise, the
recursion would go on until PL/SQL
runs out of memory and raises the
predefined exception STORAGE_ERROR.

If tail call optimisation was available, it wouldn't run out of storage (though it might hit some timeout if you let it run for too long.)

You may be able to experimentally see what it does: write a recursive function that ends with a tail call to itself, and observe the memory usage of the Oracle process when you call it, or see what error message you get. See if you can get it to hang indefinitely without using increasing memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文