执行角度看待一切语言特性
执行为主,其余一切提供参数(执行环境)
运算符——函数
运算对象——参数
赋值——临时中转?
带着状态执行(执行环境):闭包
执行环境的切换:协程,生成器(真迭代器?)
执行环境
一个语句的执行环境:前一条语句跳入此句,决定下一条执行语句(跳转)。环境:当前能用(在作用域内的)的对象集合(实现为字典?)
函数的执行环境:函数是个调用语句——所以包含普通语句的执行环境。(各语言可见性控制不同)
另外,函数在打包屏蔽的同时,暴露出接口(参数,返回值),只有传参完成了,执行环境才完整,可以执行。
但存在不完整环境,则需要在调用的时候指定(参数)
闭包:形式上表现为嵌套函数,外层返回内层函数
给外层提供参数后,内层函数的执行环境完整了(作为可调用对象返回),但还需传递给内层参数,才能进行完整的调用执行。
参数的两种语义:提供执行环境,定制化函数行为;提供数据,供操作使用
执行环境的各种处理:
默认参数:定义时绑定,在函数外层搜索变量。语义:与具体执行无关,初始化确定且唯一
嵌套函数多次传参:每完成一次传参,得到的参数(形参)加入执行环境,并暴露出内层可调用对象,
一次次传参,一次次丰富执行环境,一层层解出内层嵌套
方法:绑定对象实例。作用域=自身函数作用域(参数+局部变量)+实例内部作用域(属性访问self.限定符)
类方法:绑定类对象实例。作用域=自身函数作用域(参数+局部变量)+类作用域(声明处,唯一)
搜索机制:作用域里放指针,引用父作用域?
搜索算法:有向图确定拓扑序,分支优先选长路径?
执行环境的修改
1.科里化
确定一部分执行环境
2.装饰器
引入更多的执行环境变量,从而强化函数的语义
可调用对象之间的区分:对象的同一性
1.基于引用复制,得到同一对象不同引用
2.函数多次调用,自身保持不变(连续性)
3.闭包定制可调用对象——闭包作为一种构造函数,返回可调用对象
###从执行环境的角度来说,作用域是执行环境不发生变化的最大区域
执行环境是起效作用域的并?