[发明专利]动态编程语言的基于跟踪器的运行时优化有效
申请号: | 201380007188.6 | 申请日: | 2013-01-31 |
公开(公告)号: | CN104081361A | 公开(公告)日: | 2014-10-01 |
发明(设计)人: | F·J·皮茨罗;G·巴瑞克罗 | 申请(专利权)人: | 苹果公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/455;G06F9/45 |
代理公司: | 中国国际贸易促进委员会专利商标事务所 11038 | 代理人: | 李晓芳 |
地址: | 美国加*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 动态 编程 语言 基于 跟踪 运行 优化 | ||
相关专利申请的交叉引用
本申请与由Filip Pizlo等人于2012年2月3日提交的名称为“RUNTIME COMPILATION FOR DYNAMIC PROGRAMMING LANGUAGES”的美国临时专利申请号61/594,983、由Filip Pizlo等人于2012年2月15日提交的名称为“RUNTIME COMPILATION FOR DYNAMIC PROGRAMMING LANGUAGES”的美国临时专利申请号61/599,309相关并要求其权益,这两个专利据此全文以引用方式并入本文。
技术领域
本发明整体涉及运行时编译。更具体地,本发明涉及基于动态语言的源代码的运行时编译。
背景技术
不含任何种类的类型注释的动态语言越来越普遍。例如,JavaScript已经成为万维网的通用语言,而Ruby、Python、Perl和PHP已经成为服务器端基础架构的标准语言。然而,当可能未提供优化编译策略以编译代码时,基于动态语言的代码的运行时可能需要显著开销。
例如,JavaScript不允许程序指定变量的类型。因此,在运行时期间,变量可被动态转换为不同执行路径中的独立类型。此类转换可能在计算上开销大,使整体性能受到重大影响。另外,动态创建的数据类型可能需要索引数据结构例如字典间大量的查找或搜索操作,以将类型分配到数据或访问特定类型数据的属性。
此外,需要现代JavaScript引擎来非常快速地执行非可信代码,并且由于这个原因,通过诸如即时(JIT)编译的机制使用运行时代码生成,攻击者可利用这一点绕过操作系统/硬件保护。现有保护技术,例如常量盲化,可用于阻止此类攻击。然而,这些技术可在存储器使用和处理器执行时间两方面引发目标代码的性能成本,无论所执行的目标代码是否具有风险。
因此,传统的动态运行时编译方法往往是昂贵、低效和未优化的。
发明内容
可随机地且不频繁地分配跟踪器数据(例如,堆分配单元或跟踪弹(tracer bullet))以分析从起源代码位置和目标代码位置流出的值以便优化编译代码。跟踪器数据可包括或装箱某个值以及该值在源代码或程序中的相应起源(或来源)。值的起源可指示值在源代码中的生成位置。在一个实施例中,可在运行时期间将值存储在存储器中时创建跟踪器数据。来源可以是标识用于存储该值的代码位置(例如行号)的指针宽度字。可将特定的类型或标签与跟踪器数据相关联以迫使使用(或访问、引用)跟踪器数据的代码执行或操作采用慢速路径,因为可能无法在源代码中对跟踪器数据进行现有类型检查。所述慢速路径可记录跟踪器数据中的值的起源(或源)代码位置和正在使用跟踪器数据的接收(或目标)代码位置之间的链接。该链接可分配有权重以指示值传递(或跟踪)通过链接的次数。
在一个实施例中,可基于运行时期间在值的起源代码位置和目标代码位置之间记录的链接来生成概率数据流程图。可对图形的每个边加权以对应于占用边的值流的相对概率。值如何流过程序以及使用那些值的不同操作执行频率有多高可从概率数据流程图识别。因此,概率数据流程图可提供执行程序的运行时概率视图以揭示运行时编译的优化机会。
在一个实施例中,可根据概率数据流程图来执行运行时编译器上的优化操作。例如,如果流过整数路径的值更可能用于浮点运算,则整数路径可被转化为浮点路径。同样,如果以浮点格式存储的整数极有可能(例如基于概率数据流程图)在以后用于整数运算,则可将其转换为整数格式。作为另外一种选择,如果整数堆存储(例如,整数格式的值)具有流入浮点加载中的高概率,则可优化编译器而替代地以浮点数据的形式堆存储,但要进行另外的类型检查操作以确保可靠性。
在一个实施例中,可使用相对于数据结构集合描述了键的属性的元数据,对使用键索引数据结构(例如字典、哈希表、关联数组等)集合中的键的操作进行优化。元数据可对应于动态更新的高速缓存以指示不变量,该不变量对于处于数据结构集合的当前状态的键而言为真。可避免用于在键的数据结构集合上进行搜索的昂贵计算。例如,如果已知键始终(或从不)引用某些特定的值,或者由于这些值具有在处于当前状态的系统的全局范围内的任何数据结构集合中的某些元属性,则可能根本无需在数据结构(或字典)集合上进行昂贵的查找操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苹果公司,未经苹果公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201380007188.6/2.html,转载请声明来源钻瓜专利网。