[发明专利]变量闭包有效
申请号: | 201110080598.6 | 申请日: | 2011-03-23 |
公开(公告)号: | CN102200911A | 公开(公告)日: | 2011-09-28 |
发明(设计)人: | I·任科夫斯基;H·坎恩塔姆那尼 | 申请(专利权)人: | 微软公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 顾嘉运 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 变量 | ||
1.一种基于计算机的方法,所述方法用于当计算机程序的函数的实例(218)活动时,从调用自所述函数之外的计算机程序位置(206)的拉姆达表达式访问在所述函数中定义的闭包变量,所述变量被存储在运行时栈(202)上的框架(214)中,所述框架对应于所述函数实例,所述方法包括:
a)响应于在程序执行期间进入所述函数(304),将指向所述变量的指针存储(306)在数据结构中;
b)响应于提取所述变量的值的指令,所述拉姆达表达式中的指令使用所述变量指针来定位(404)运行时栈(202)上的框架(214)中的变量并提取(406)变量值。
2.如权利要求1所述的基于计算机的方法,其特征在于,还包括生成对应于所述函数实例的闭包对象;以及使用所述闭包对象来定位所述变量指针。
3.如权利要求1所述的基于计算机的方法,其特征在于,还包括响应于对所述变量进行赋值的指令,所述拉姆达表达式中的指令使用所述变量指针来定位所述运行时栈上的框架中的变量并将所述值存储在所述变量中。
4.如权利要求1所述的基于计算机的方法,其特征在于,还包括自动将一个或多个指令插入函数以便于响应于在程序执行期间进入所述函数而存储指向所述变量的指针。
5.如权利要求1所述的基于计算机的方法,其特征在于,还包括自动将一个或多个指令插入所述拉姆达表达式以便于使用所述变量指针来定位所述运行时栈上的框架中的变量。
6.如权利要求1所述的基于计算机的方法,其特征在于,还包括插装所述函数以便于响应于进入所述函数而存储指向所述变量的指针;以及插装所述拉姆达表达式以便于定位所述运行时栈上的框架中的变量。
7.如权利要求1所述的基于计算机的方法,其特征在于,还包括:
a)自动插入闭包创建指令以响应于对所述函数的调用而创建闭包对象;
b)自动插入变量引用指令以从所述拉姆达表达式中提取闭包变量值;
c)提供程序代码以创建所述闭包对象;以及
d)提供程序代码以提取所述闭包变量值。
8.如权利要求1所述的基于计算机的方法,其特征在于,所述函数包括引用所述变量的指令,所述方法还包括不插装所述指令,以允许所述指令访问所述运行时栈上的框架中的变量。
9.一种基于计算机的系统,所述系统用于访问在计算机程序的闭包函数中定义的闭包变量,所述系统包括:
a)代码插装组件(108),其被配置为执行以下动作:
i.解析(502)所述函数并插入(506)程序代码以将指向所述闭包变量的指针存储在数据结构中;
ii.解析(508)拉姆达函数以确定对所述闭包变量的一个或多个引用,并插入(510)指令以访问运行时栈框架中的与所述函数的实例相对应的闭包变量;
b)执行以下动作的第一助手函数(112):提取指向所述闭包变量的指针,使用所述指针来定位(404)所述运行时栈框架中的所述闭包变量,并从所述闭包变量的位置中提取(406)值;以及
c)执行以下动作的第二助手函数(112):存储(306)指向所述程序变量的指针。
10.如权利要求9所述的基于计算机的系统,其特征在于,存储指向所述闭包变量的指针的程序代码包括调用所述第二助手函数的指令,所述指令被插入在所述函数中。
11.如权利要求9所述的基于计算机的系统,其特征在于,插入访问所述闭包变量的指令包括将对所述闭包变量的一个或多个引用中的每一个均替换为调用所述第一助手函数的指令。
12.如权利要求9所述的基于计算机的系统,其特征在于,包括用于以下功能的装置:使所述闭包函数中的拉姆达表达式能够访问所述闭包变量而不在堆存储器中创建所述闭包变量的副本。
13.如权利要求9所述的基于计算机的系统,其特征在于,还包括响应于对所述函数实例的调用而创建与每一个函数实例相对应的闭包对象的程序代码,所述闭包对象包括用于提取指向所述闭包变量的指针的引用。
14.如权利要求9所述的基于计算机的系统,其特征在于,还包括用于使用所述指针来将另一个值存储在所述运行时栈框架中的所述闭包变量中的装置。
15.如权利要求9所述的基于计算机的系统,其特征在于,还包括用于使多个拉姆达函数实例能够访问所述运行时栈框架中的所述闭包变量的装置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软公司,未经微软公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110080598.6/1.html,转载请声明来源钻瓜专利网。