名字、绑定和作用域 1程序设计语言——实践之路 Michael L. Scott, Programming Languages Pragmatics Morgan Kaufmann, 2000, 2005) 中文版由裘宗燕译电子工业出版社出版,2005 2编译原理及实践 Kenneth c. louden机械工业出版社.1997
名字、绑定和作用域 1.程序设计语言——实践之路 Michael L. Scott, Programming Languages Pragmatics, Morgan Kaufmann, 2000, 2005) 中文版由裘宗燕译.电子工业出版社出版,2005 2.编译原理及实践.Kenneth C.Louden.机械工业出版社.1997
本节要点 ■名字、绑定、静态绑定、动态绑定 ■对象的生存期 ■典型的存储分配方式 ■作用域
本节要点 ◼ 名字、绑定、静态绑定、动态绑定 ◼ 对象的生存期 ◼ 典型的存储分配方式 ◼ 作用域
名字和绑定 名字 口助记符,如:标识符,符号(+) 口是程序语言里最基本的抽象机制 口用来指称程序中出现的各种“东西”:变量、常量、过程/函数 结构/记录的成分、类型等等。 绑定( binding)是两个东西之间的关联,如一个名字和 它所指的东西。 注:不是所有的数据都有名字,例:C、Ada95和 Fortran9O用指针 来引用动态存储;类似的,Java和C#用引用来间接访问
名字和绑定 ◼ 名字 助记符,如:标识符,符号(+) 是程序语言里最基本的抽象机制 用来指称程序中出现的各种“东西”:变量、常量、过程/函数、 结构/记录的成分、类型等等。 ◼ 绑定(binding)是两个东西之间的关联,如一个名字和 它所指的东西。 ◼ 注:不是所有的数据都有名字,例:C、Ada 95和Fortran 90用指针 来引用动态存储;类似的,Java和C#用引用来间接访问
声明和定义 名字与事物(包括程序对象)之间的约束关系由定义 或声明建立。 个定义或声明引进一个名字,被定义/声明的事物及 相关属性就是该名字的意义。这个声明/定义建立了名字 与相关事物和属性之间的约束关系。 例:C声明 const doub|ex=3.876; 将名字X约束于一个 double类型的变量, const和值 3.876为其属性 例:C声明 dint fun(int, double); 使名字fun约束于函数类型int× double→int。这 函数的定义应该具有这种类型,它的使用必须符合这一类 型
声明和定义 名字与事物(包括程序对象)之间的约束关系由定义 或声明建立。 一个定义或声明引进一个名字,被定义/声明的事物及 相关属性就是该名字的意义。这个声明/定义建立了名字 与相关事物和属性之间的约束关系。 例:C 声明const double x = 3.876; 将名字x 约束于一个double 类型的变量,const 和值 3.876 为其属性 例:C 声明int fun (int, double); 使名字fun 约束于函数类型int×double →int。这个 函数的定义应该具有这种类型,它的使用必须符合这一类 型
绑定时间(约束时间) ■绑定时间指一个绑定的活跃时间 ■与高级语言和程序有关的重要时间概念: 口语言设计时。如:程序结构、类型。 口语言实现时。如:ⅣO,算术溢出,类型等价 口编程时。如:算法和名字 口编译时。数据对象的布局,从程序中高级结构到机器代码的映射。 □连接时。整个程序在内存的布局,如:静态数据对象分配,跨模 块对象约束,库对象约束 口装载时。物理地址的选择,完成虚地址到实地址的映射 口运行时。变量的值绑定,运行时的其他事项
绑定时间(约束时间) ◼ 绑定时间指一个绑定的活跃时间。 ◼ 与高级语言和程序有关的重要时间概念: 语言设计时。如:程序结构、类型。 语言实现时。如:I/O,算术溢出,类型等价 编程时。如:算法和名字 编译时。数据对象的布局,从程序中高级结构到机器代码的映射。 连接时。整个程序在内存的布局,如:静态数据对象分配,跨模 块对象约束,库对象约束 装载时。物理地址的选择,完成虚地址到实地址的映射 运行时。变量的值绑定,运行时的其他事项