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


    粗粒度

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

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

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

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

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

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

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

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

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


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

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

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

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

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

     

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

    1.效率

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      类型的实例:

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

      类型对象:

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

    引用环境的约束

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

    何时填入字典

  • 相关阅读:
    第六次站立会议
    第四次站立会议
    第五次站立会议
    用户场景描述
    第三次站立会议
    第二次站立会议
    maven install 报错Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin
    eclipse配置maven
    maven下载和配置
    maven学习笔记
  • 原文地址:https://www.cnblogs.com/qmcj/p/9253421.html
Copyright © 2020-2023  润新知