【问题标题】:Are "subroutine" and "routine" the same concept?“子程序”和“程序”是同一个概念吗?
【发布时间】:2018-02-02 21:43:59
【问题描述】:

我在编程语言书籍中看到过“子例程”和“例程”。它们是同一个概念吗? “子”是什么意思?

我想你可能在计算机科学书籍中看到过很多例子,除了以下来自Programming Language Pragmatics, by Scott:的例子

在第 3.2.2 节中,我们讨论了 子程序e 上的空间分配 调用堆栈(图 3.1)。每个被称为例程的程序都被赋予了一个新的 堆栈顶部的堆栈帧或激活记录。这个框架 可能包含参数和/或返回值、簿记信息 (包括返回地址和保存的寄存器),局部变量, 和/或临时工。当一个子程序返回时,它的框架被弹出 从堆栈中。

谢谢。

【问题讨论】:

  • 曾几何时,“例程”将应用于程序中的顶级代码。 “子程序”是由顶层代码或其他子程序调用的代码。

标签: programming-languages computer-science subroutine routines


【解决方案1】:

据我了解,子例程或例程只是程序运行的自包含代码块或指令的名称。例如,在 Ruby 中我们会调用子例程方法,而在 JavaScript 中它们被称为函数。

在您提供的 Programming Language Pragmatics 示例的上下文中,子例程似乎是要执行的操作的调用堆栈,堆栈的每个项都是启动自己的自包含堆栈的例程。执行完所有过程后,例程退出,子例程向下移动到下一个例程。

Wikipedia 对调用堆栈中发生的事情以及子例程如何得名有一个很好的高级解释。

【讨论】:

  • 谢谢。如果您阅读了我刚刚添加的书的链接,则子例程和例程在堆栈中都有一个框架。所以我认为它们是同一个概念。你同意吗?
  • 更详细地阅读摘录,我明白你在说什么。听起来子例程和例程是同一概念的不同名称。脱离上面韦恩康拉德的评论,“子程序”这个词似乎只是多年前的残余。子例程是在另一个例程中执行的例程。说了这么多,是的,我同意你的观点,子程序和程序是一样的。感谢您的帖子和研究。这是很酷的东西。
【解决方案2】:

这两个术语指的是同一件事:子例程是在例程内部调用的例程。把它想象成一个主程序(一个例程),里面有函数调用,每次调用一个函数都是一个子例程。不过函数和例程区别不大,可以阅读更多here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 2012-07-16
    • 1970-01-01
    • 2018-03-31
    • 2011-07-24
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多