Safari将开发新的解释器SquirrelFish

转自:http://blog.csdn.net/isaaq/archive/2008/06/18/2559967.aspx

 

为适应浏览器市场的发展Tamarin系的另一个分支SquirrelFish近期也有不小的动向,下面让我们来看一些资料。

1、新闻背景

 

上周,WebKit开发团队向外正式宣布他们正在为WebKit的JavaScript引擎开发一个新解释器--SquirrelFish。根据WebKit官方博客,SquirrelFish的速度比之前的解释器快1.6倍”。

与之前的解释器使用遍历语法树的实现方式不同的是,SquirrelFish的实现采用字节码。

遍历语法树实现方式存在的高代价问题,在SquirrelFish字节码引擎中基本都不存在。首先,一个字节码流能够精确描述执行程序所需的操作,编译成字节码实际上隐性地跳过了不相关的语法结构。其次,字节码调度程序只是一个简单地从内存中直接读取,转而间接调度分支程序的过程。因此,执行字节码指令要比访问语法树节点快得多。第三,由于不再需要语法树,解释器无需继续在语法树节点间传送执行状态。

解释器使用字节码之后能够直接从字节码解释的所有的优化中获益匪浅,这也意味着SquirrelFish的速度还会继续得到提升。

在解析器使用字节码之后,我们目前实现的编译时优化有:
  • 常量折叠(constant folding)
  • 更强的拷贝传播
  • 类型推断——包括精确和推测两种方式
  • 基于表达式上下文的特化——尤其是void和boolean上下文
  • 窥孔优化(peephole optimization)
  • 逃逸分析 (escape analysis)

SquirrelFish团队特别对那些在同一领域工作的人们表示了感谢,正是他们的研究成果激发了SquirrelFish的开发灵感。

SquirrelFish的设计很大程度上来自于高效虚拟机领域的一些最新研究成果,其中包括M. Anton Ertl教授、David Gregg教授等人以及Lua编程语言的开发者们的研究。

 

以上转自InfoQ的《WebKit小组宣布开发基于字节码的JavaScript解释器——SquirrelFish

2、SquirrelFish的核心WebKit

 

WebKit,Safari和Safari Mobile的核心引擎,尚未发布的Android也采用WebKit框架。开发者宣布WebKit的核心JavaScript 引擎将有一个新的解释器,代号为SquirrelFish,速度将比前一个版本的解释器有大幅度的提升。

WebKit团队希望推进Safari在JavaScirpt解析器上的呈现能力。通过简化语法,使用更多字节码避免重复使用相同代码。

SquirrelFish是基于寄存器、直接线程的高级字节码引擎,目前的开发才刚刚起步。开发者称已计划好的6个最优化方案将能使速度再次飞跃。

它将通过延时从语法树生成字节码,使用简单的一次编译实现复制生成(copy propagation)。 在 SunSpider JavaScript性能测试中,可以看到性能上的大幅提升:

浏览器

由上图可知,SquirrelFish的速度要大幅领先WebKit先前的解释器。实际数据显示,在SunSpider JavaScript性能测试中,SquirrelFish的速度是WebKit先前的解释器的1.6倍。

 

以上转自《Safari将开发新的解释器SquirrelFish

3、与Tamarin的性能比较

由上图可以看出  SquirrelFish的速度明显大于Tamarin系列。

具体性能如下表:

      

 

Test squirrelfish

tamarin-tracing

untyped

tamarin-tracing

typed

 

     

 

sunspider/access-binary-trees.as 339899

 

sunspider/access-fannkuch.as 108164119

 

sunspider/access-nbody.as 126186182

 

sunspider/access-nsieve.as 307157

 

sunspider/bitops-3bit-bits-in-byte.as 351615

 

sunspider/bitops-bits-in-byte.as 354723

 

sunspider/bitops-bitwise-and.as 5923139

 

sunspider/bitops-nsieve-bits.as 706146

 

sunspider/controlflow-recursive.as 203438

 

sunspider/crypto-aes.as 52193179

 

sunspider/crypto-md5.as 38175190

 

sunspider/crypto-sha1.as 404640

 

sunspider/math-cordic.as 676047

 

sunspider/math-partial-sums.as 10422796

 

sunspider/math-spectral-norm.as 373834

 

sunspider/s3d-cube.as 84179145

 

sunspider/s3d-morph.as 938978

 

sunspider/s3d-raytrace.as 97255138
      

 

sunspider/string-fasta.as 87183178

 

sunspider/string-validate-input.as 8042094185

 

Aggregate (without string-validate-input) 121523531743

 

     

 

     

 

Test squirrelfishtamarin untypedtamarin typed

 

     

 

sunspider/access-binary-trees.as 378083

 

sunspider/access-fannkuch.as 10913973

 

sunspider/access-nbody.as 125202185

 

sunspider/access-nsieve.as 317643

 

sunspider/bitops-3bit-bits-in-byte.as 262614

 

sunspider/bitops-bits-in-byte.as 37416

 

sunspider/bitops-bitwise-and.as 5929121

 

sunspider/bitops-nsieve-bits.as 697845

 

sunspider/controlflow-recursive.as 206065

 

sunspider/crypto-aes.as 509673

 

sunspider/crypto-md5.as 385667

 

sunspider/crypto-sha1.as 405553

 

sunspider/math-cordic.as 6612484
      

 

sunspider/math-partial-sums.as 10528991

 

sunspider/math-spectral-norm.as 3711045

 

sunspider/s3d-cube.as 8713449

 

sunspider/s3d-morph.as 978455

 

sunspider/s3d-raytrace.as 9916394

 

sunspider/string-fasta.as 89152129

 

sunspider/string-validate-input.as 82140128

 

Aggregate 130323961403

上表详细列出了不同项目运行不同测试用例的耗时比较,可以明显看出他们之间的差距来。

4、项目网址: http://webkit.org/blog/189/announcing-squirrelfish/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值