JavaScript程序的动态行为分析-外文翻译.docVIP

JavaScript程序的动态行为分析-外文翻译.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript程序的动态行为分析 摘要 JavaScript编程语言是广泛用于编程也越来越多地用于计算因此提高正确性、安全性和JavaScript应用程序性能静态分析和编译。许多这些技术旨在在一些最动态特性的语言然而如何利用语言的这些特性。在本文中我们广泛使用JavaScript程序并分析如何以及为什么使用动态特性。我们 关键词: 1、介绍 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程序的工作负荷区间。 本文的目的是提供支持或否定以上假设的证据。我们不是要质疑以前的研究成果的准确性,即使上述假设的一部分是被证明毫无依据的,以

文档评论(0)

绿风 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年11月27日上传了教师资格证

1亿VIP精品文档

相关文档