激活记录的结构和大小在翻译时确定,其在存储中的表示和 记录类型的数据对象类似 为了创建激活记录,只需要知道存储块的尺寸,不需知道其 结构细节,因为块中位移已在编译时确定,只是基地址在运 行时确定。因此,不需在运行时存放完全的激活模板,只需 存放尺寸大小即可。 当子程序调用时,有一些隐敝动作发生,这些动作在实际代 码执行前完成 子程序终止时,也有一些动作,这些动作代码是编译插入的。 类属子程序 类属子程序一个名字,但有几个不同定义,用不同基调 区分,是一种重载机制( overload)。 如P207的例子, Enter-子程序是重载的。 如使用类型作参数,则形成多态机制
•激活记录的结构和大小在翻译时确定,其在存储中的表示和 记录类型的数据对象类似。 •为了创建激活记录,只需要知道存储块的尺寸,不需知道其 结构细节,因为块中位移已在编译时确定,只是基地址在运 行时确定。因此,不需在运行时存放完全的激活模板,只需 存放尺寸大小即可。 •当子程序调用时,有一些隐敝动作发生,这些动作在实际代 码执行前完成。 •子程序终止时,也有一些动作,这些动作代码是编译插入的。 •类属子程序 类属子程序一个名字,但有几个不同定义,用不同基调 区分,是一种重载机制(overload)。 如P207的例子,Enter子程序是重载的。 如使用类型作参数,则形成多态机制
子程序定义作为数据对象 大多数语言中,子程序定义独立于子程序执行。 某些语言,如Lisp等,对这两个阶段没有区别,子程序定义 可作为运行时对象 翻译——以字符串形式看待子程序,并产生表示该定义的运 行时形式(编译时操作)。 执行——以运行时形式定义为输入,创建其激活形式,然后 执行激活(运行时操作) 而在Lisp中,翻译也可在运行时进行
子程序定义作为数据对象 大多数语言中,子程序定义独立于子程序执行。 某些语言,如Lisp等,对这两个阶段没有区别,子程序定义 可作为运行时对象。 翻译——以字符串形式看待子程序,并产生表示该定义的运 行时形式(编译时操作)。 执行——以运行时形式定义为输入,创建其激活形式,然后 执行激活(运行时操作)。 而在Lisp中,翻译也可在运行时进行