作用域:粗粒度的划分,对象打包,集中内存管理,权限管理

粗粒度

作用域:划分程序正文中出现的对象,控制划分之间的可见性。全集——划分成各个不相交集合(互不可见),或划分出一块子集(嵌套)

作用域是对象起作用的正文区域,但对象的语义可能提前结束了,

所以作用域是对象语义的不精确划分

更多的是将对象分组(区别开不同使用范围的对象,而非对单个对象划出精确的使用范围)
从集合的角度来说,作用域是一组变量语义范围的并集,然后将每个对象的语义范围都映射到这一并集上。

 

细粒度的内存控制
回收(只有堆?):(提升语义精度)高效使用空间。引用计数(语句副作用),或删除不可达(反向索引)。

利用作用域打包回收?:java

 
划分(权限控制)
另一方面,作用域可以成批考虑对象(按作用域区分对象)

不同作用域之间的相互访问控制(权限):导入(访问别的作用域)导出(提供给别的作用域访问)

#只需考虑嵌套关系下的互访问


特例:跨作用域
同一变量,需要跨作用域保持语义(细粒度:单个变量。粗粒度:作用域:一块代码中出现的变量)

1.同一函数,调用之间保持:static静态

2.堆作为中转,独立于各个调用,全局保持(替代方案:作为参数传递(代价);使用全局变量(生存期过长)?)

 
声明——定义;定义类型——实例化对象
声明(指定作用域)与定义(编译所需信息)

调用顺序的不确定性(以及分支与循环)用状态转移图解释?

 

为什么栈不使用大小可变的对象?

1.效率

2.语义精简,与堆分工明确

 

 

块,流程控制块,类,函数的作用域(细粒度的权限控制)

通过引入相应的作用域,完成屏蔽与内存管理、权限管理

各自实现细粒度的权限控制

1.块引入了嵌套的作用域

2.流程控制作为一个整个块还是嵌套块?

2.类与函数使用块的方式引入各自的作用域(为什么python没有类作用域)

 

流程控制:引入非线性地执行,用块替换一对goto包围语句块

 

函数:流程控制+局部变量(用完就丢)完成功能

   形参:允许定制化流程控制

   返回参数+形式参数:代码块的最小暴露

   职能:修改参数(副作用)/返回值(调用表达式)

栈作用域:同时存在多个实例,用线性结构与线性访问相邻单元

 

结构体:相关变量打包,提供一致入口(限定符)

 

:结构体(成员集合)+成员修改+成员访问控制

  类型的实例:

  作用域:实例化声明所在作用域。自定义类型——内置类型的实例保持语义一致

  类型对象:

  作用域:类声明所在作用域。

 

引用环境的约束

作用域规则确定了 语句的引用环境(变量字典)——作用域作为变量字典

何时填入字典

posted on 2018-07-02 13:33  秦梦超  阅读(231)  评论(0编辑  收藏  举报

导航