JavaScript程序中英文对照外文翻译文献Word格式.docx
《JavaScript程序中英文对照外文翻译文献Word格式.docx》由会员分享,可在线阅读,更多相关《JavaScript程序中英文对照外文翻译文献Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
动态行为;
执行跟踪;
动态指标;
程序分析;
JavaScript
1、介绍
JavaScript是一种面向对象的语言,它可以通过客户端的可执行代码让用户实现和网站的交互,它是在1995年由Netscape公司的BrendanEich设计出的。
它不同于Java、C#或Smalltalk这些传统语言,它不具有类,也不鼓励封装,甚至是结构化编程。
与之对应的是,JavaScript十分强调编程语言的灵活性。
JavaScript的成功是不可否认的。
据相关数据显示,当前最流行的100个网站中有97个都使用了它.同时,JavaScript语言还成为了许多办公应用、浏览器应用以及开发环境等的通用计算平台。
它一直被誉为互联网界的“汇编语言”,和Java以及Scheme语言类似,JavaScript需要代码生成工具的解释。
由于这种成功,
JavaScript的已经赢得了学术界的重视和尊重,而研究人员也开始将目光都集中在三个主要问题:
安全性,正确性和性能。
安全性可以说是JavaScript所要解决的最紧迫的问题:
到目前为止,已经发生了一些利用语言的动态性能进行恶意攻击的案例(主要是能够利用JavaScript访问和修改共享文件的特点,通过eval函数植入恶意代码)。
研究人员已经提出一些解决方法,比如将静态分析和实时监控结合起来,以防御一些已知的攻击。
另一个研究方向则致力于提供更好的检测工具,以帮助开发者尽早的发现程序中的漏洞。
作为一种弱类型语言,JavaScript没有类型声明,并且只有再被访问和调用时才进行实时监控,因此为JavaScript提供静态类型的系统也就成为了很自然的事情。
最后,在被忽视了很长时间以后,
JavaScript实现很大的进步,目前最先进的即时编译技术得到了应用。
2、动机及相关工作
我们最初研究JavaScript的动力在于评估一个静态类型的系统是否能成功的验证现有的JavaScript程序。
其他动态语言,如Scheme语言就成功的逐步应用到了类型系统中,但是其他方面的进展就相对有些停滞,比如缺乏有关面向对象的扩展的类型检查(Scheme中用宏来实现)。
对于JavaScript,Anderson等人提出了一种具有明确类型和潜在类型的类型系统,而Heidegger和Thiemann等人则把他们之前的工作向前推进了一步,加入了一些最新的类型,Furr等人则为
DRuby提出了一种相关的系统。
所有这些类型系统都可以接受目标语言的一些简单的简化,但是他们要依靠相当类似假设。
举例来说,Thiemann写道:
“通常情况下,在初始化后几不会再定义其他的类型了,而且对象的类型也基本不会发生变化。
”
常见的关于JavaScript的动态行为的假设。
我们将在下文中继续列举一些
被公开发表或约定俗成的假设,这些假设已经在参考文献和具体程序中得到了广泛的应用。
1.prototype对象的层次结构是不变的。
在创建一个新对象时,Prototype层次的结构不会改变的假设对于一个类型系统的运行是非常重要的,因此我们甚至不会选择给出prototype对象的模型。
关于静态分析的研究很典型,通常它们不涉及到prototype的更新或变化,然而,任何关于prototype层次结构的改变都有可能影响到应用程序的控制流程,而那些受到影响的对象的类型也会出现变数。
2.在对象初始化时属性被添加。
大家一般都认为,对于动态语言来说,存在一个类似于“初始化阶段”的时段,大部分的动态行为在这个时段发生,而在这个时段后应用程序大多都是静态的。
那么具体到JavaScript的情形,就是假设作用域和对象方法的大部分变化都是在初始化阶段完成的,因此在创建对象时就已经确定类型的大部分,只留有一小部分属性待定这样的方法就显得合情合理了。
3.属性很少被删除。
在一个类型系统中删除方法或作用域是很难的,因为这样一来就等于它允许了类型的发展非单调,这会破坏现代类型语言中默认执行的子类型化保证。
如果删除的是一个特殊的情况(一个可以预测的情况),人们可以对这些未来可能被删除的属性使用一些潜在的类型。
但是,这样做会减少我们使用类型系统所带来的好处,这可能是为什么一些相关的研究禁止这种做法的原因。
静态分析方法通常更能接受这种不严密的做法,也可以对删除做出处理,但我们到目前还没有发现任何关于现有数据流分析技术的解释。
4.使用eval函数是罕见的而且不影响语义。
Eval函数通常被用来计算任意字符串,它有可能使静态分析或静态类型检查得到结果是无效的。
因此,很多文献就直接忽视了它,而另一些文献则假定这些使用的影响是微不足道的,或者使
用这些参考了JSON反序列化协议。
5.已声明函数的特征能够说明其类型。
JavaScript里的类型系统已经声明的函数的元数能够说明它在调用时所使用的方法,当然这种情况不是必须的,因为
JavaScript允许不同元数的调用。
6.程序的大小是合适的。
很多论文都花费大量笔墨明确指出,他们假定所研究的JavaScript程序是一些小型的程序,而且另一些则暗示了这一点,因为他们向大家介绍说现有的理论分析不能扩展到大型系统中去。
7.调用现场的动态行为很少。
一些出色的JavaScript程序的完善和优化,如谷歌的V8,需要依赖一些已经成名的实现技术,比如对象创建类(就像Java一样)和内联缓存。
如果JavaScript的行为大致类似于其它面向对象的语言,这些技术会带来良好的性能和使用效果。
8.执行时间主要由循环决定。
一些基于跟踪的即时编译器,比如TraceMonkey等,它们工作的基础就建立在程序的执行时间主要由小循环决定这个传统的假设上。
9.行业基准能够反映JavaScript的工作负荷。
如SunSpider,Dromaeo和V8这样的基准测试平台是用来评价和比较JavaScript的实现性能和计算静态分析技术的准确性的。
但是,从使用这些基准测试平台得到的结论只有在一种情况下是有意义的,那就是它们能够准确地反映出在现实世界中运行的JavaScript程序的工作负荷区间。
本文的目的是提供支持或否定以上假设的证据。
我们不是要质疑以前的研究成果的准确性,即使上述假设的一部分是被证明毫无依据的,以前的研究成果仍然可以为我们研究JavaScript提供一个有用的基础和出发点。
但是我们想要强调
这些已经广泛采用的现有技术的限制,并且指出在今后的研究中要面临的挑战。
相关工作。
到目前为止,据我们所知,还没有可以在深度和广度上具有相当
规模的JavaScript程序的动态行为的研究。
Ratanaworabhan等人已经进行过和我们类似的研究,其最终结果也是和我们相似的。
以前在javascript应用到安全领域时也确实有一些关于其动态行为的研究,但是那些研究只侧重于和安全性紧密相关的部分。
我们也曾进行过一些小规模的JavaScript研究,并得出了一些初步结果Harland,这些结果与这里提出的最新研究结果也是相吻合的。
Holkner和也曾就Python语言动态特性的应用进行过研究(添加和删除作用域和方法),它们的研究重点集中在一系列小的程序上面,并得出了它们之间存在明确区别的结论。
他们的研究表明,动态特性中的大部分都出现在程序的初始化阶段,而在程序的主要运算阶段,动态行为就逐渐减少了。
我们的研究结果表明,在应用方面,
JavaScript比Python更加动态化。
关于面向对象语言在实时运行中的特性研究也有很多,比如Garret等人研究了Self语言中信息发送的动态程度,Calder等人则分析了C和C++程序运行中的差异,Temporo等人研究了Java中继承的应用等。
之前的这些研究都对某种特定语言的某个特殊方面进行了非常详尽的研究,收到他们的鼓舞,我们决定争取为JavaScript也做出一个类似的概述,并为未来的研究留下一些详细的数据以供参考。
最后,我们的工作得到了Dufour等人的启发,他们就Java的运行指标进行了严格的框架讨论。
3、跟踪和分析技术基础
本文对基础结构和跟踪的研究是基于WebKit的网页浏览器引擎的一个可以测量数据的版本,这个引擎现在被应用到了Apple的Safari浏览器上。
虽然有可用的独立解释程序,他们却无法处理目前在大部分支持JavaScript的网站常见的
DOM和AJAX技术。
为了提高实验的灵活性,我们的分析是在离线状态下进行的。
我们的浏览器记录下由解释程序带来的大部分操作(读,写,删除,调用,定义等),同样作为垃圾收集和源文件加载的事件也会被跟踪。
Eval函数触发一个特定事件的情形和源文件加载的情形是相似的,而经过计算的字符串也将被保存,并像程序执行时的其他部分一样被追踪分析。
已经追踪到的痕迹被压缩并存储到磁盘中。
虽然它在执行时有一些额外的开销,但是我们用来测试的工具在运行交互应用时的速度并没有受到影响,并且我们的用户也没有对性能有任何的抱怨。
然后我们在离线状态下分析了这些数据,并将结果存储在一个数据库中进行数据挖掘。
离线痕迹分析组件实质上是对抽象流的解释。
它是能够重现这些痕迹的,并为相应的JavaScript程序得出一个关于堆状态的抽象解释。
痕迹分析仪中把包括了关于程序动态行为的丰富的和可定制的历史信息,比如访问每个对象的历史,调用现场和分配网站等等。
最后,一些静态分析(EVAL分类,代码大小的度量)是基于被恢复的源文件运行的,它使用了Rhino的JavaScript编译器的框架解析技术。
4、结论
本文提供了第一个大规模的研究JavaScript程序在运行时的行为。
我们已经识别出一组字节代表实际的程序,这组字节的大小范围为数百千字节到兆字节,我们对每个网站都记录了很多痕迹,然后使用相应的编译仪器与离线分析工具从痕迹中提取了行为信息。
我们使用此信息来评估清单中的9个关于JavaScript程序的常用假设。
AnAnalysisoftheDynamicBehaviorofJavaScriptPrograms
Abstract
TheJavaScriptprogramminglanguageiswidelyusedforwebprogrammingand,increasingly,forgeneralpurposecomputing.Assuch,improvingthecorrectness,securityandperformanceofJavaScriptapplicationshasbeenthedrivingforceforresearchin
typesystems,staticanalysisandcompilertechnique