[发明专利]将程序执行从编译代码变换到解释代码有效
申请号: | 201380008460.2 | 申请日: | 2013-01-31 |
公开(公告)号: | CN104115120A | 公开(公告)日: | 2014-10-22 |
发明(设计)人: | L·拉弗里尼尔;C·曼 | 申请(专利权)人: | 微软公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F9/30 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 顾嘉运 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序 执行 编译 代码 变换 解释 | ||
1.一种系统,包括:
计算设备的至少一个处理器;
所述计算设备的存储器;以及
包括加载到所述存储器中的至少一个模块的跳出引擎,所述至少一个模块使所述至少一个处理器:
响应于检测到关于程序在其上操作的数据的特性的至少一种假设的无效性,将以动态语言编写的程序的执行从机器代码执行器执行的经编译的代码变换到由解释器解释的经解释的字节代码,所述经编译的代码基于所述至少一种假设被优化,所述经解释的字节代码没有基于所述至少一种假设被优化;
在所述经解释的字节代码中的一个点处恢复在解释器中的所述程序的执行,所述点对应于在经优化的编译的代码中检测到无效性处的点。
2.如权利要求1所述的系统,其特征在于,还包括:
加载到所述存储器中的至少一个模块,所述至少一个模块使所述至少一个处理器:
从由所述机器代码执行器所使用的对应变量中重新物化由所述解释器所使用的变量。
3.如权利要求1所述的系统,其特征在于,还包括:
加载到所述存储器中的至少一个模块,所述至少一个模块使所述至少一个处理器:
在所述经优化的编译的字节代码中插入至少一个跳出点,所述至少一个跳出点与持有所述解释器恢复所述程序的执行所需要的值的一组变量相关联。
4.如权利要求1所述的系统,其特征在于,其中执行是在经优化的编译的代码中预先确定的跳出点处被从经优化的编译的代码变换到未经优化的字节代码。
5.一种方法,包括:
在计算设备的处理器处接收字节代码,所接收的字节代码包括源自以动态语言编写的程序的未经优化的字节代码;
接收关于由所述程序操作的数据的至少一种假设;
基于所述至少一种假设生成经优化的编译的代码;
执行所述经优化的编译的代码;
响应于确定所述至少一种假设的无效性,停止所述经优化的编译的代码的执行;
还原与所述经优化的编译的代码相关联的变量相对应的解释器变量;
在所述未经优化的字节代码中的一个点处恢复在解释器中的所述程序的执行,所述点对应于在经优化的编译的代码中确定所述无效性处的点。
6.如权利要求5所述的方法,其特征在于,还包括:
捕捉在所述未经优化的字节代码中与在所述经优化的编译的代码中的至少一个预先确定的跳出点相对应的位置。
7.如权利要求6所述的方法,其特征在于,还包括:
捕捉与在所述经优化的编译的代码中的至少一个预先确定的跳出点相关联的变量的位置。
8.如权利要求7所述的方法,其特征在于,还包括:
执行所述经优化的编译的代码;以及
在所述至少一个预先确定的跳出点处重新物化与所述经优化的编译的代码变量相关联的对应的解释器变量。
9.如权利要求5所述的方法,其特征在于,还包括:
复活由所述解释器所使用的变量。
10.一种包括当执行时使计算设备的至少一个处理器执行下列操作的计算机可执行指令的计算机可读存储介质:
响应于在跳出点处检测到至少一个无效情况,从执行源自以动态语言编写的程序的经优化的编译的代码中跳出,所述经优化的编译的代码基于至少一种无效假设被优化;
基于所述经优化的编译的代码变量的状态来还原解释器变量的状态;
在未经优化的字节代码中与在所述经优化的编译的代码中的所述跳出点相对应的点处,在所述解释器中恢复所述程序的执行;
执行源自所述程序的经优化的编译的代码,所述程序以JavaScript编写;以及
保存包括在所述经优化的编译的程序执行期间在其处存储了变量的位置的跳出信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软公司,未经微软公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201380008460.2/1.html,转载请声明来源钻瓜专利网。