SquirrelFish Extreme (ou a engine de JavaScript mais rápida de todos os tempos da última semana)
Eu não disse?
Ontem, o pessoal do webkit publicou em seu blog um post anunciando o SquirrelFish Extreme. Com benchmarks que demonstram que no mesmo período de tempo, o SquirrelFish consegue executar o teste SunSpider muito mais vezes que o Tracemonkey ou o V8.
Entre as novidades dessa engine, está o Polymorphic Inline Cache, que assim como as hidden classes do V8, foi baseado em algoritmos e detalhes da implementação da linguagem Self. Além disso, o Context Threaded JIT, faz a conversão de bytecode para código de máquina (relembrando, o v8 não gera bytecode, vai direto para código de máquina).Regular Expression JIT ajuda na velocidade de expressões regulares. (Você pode estar se perguntando o porque disso. Depois que eu vi que o V8 limitava o tamanho das expressões regulares a 32767 caracteres, e que tinha alguém ultrapassando esse limite, eu comecei a achar que isso deve ser realmente MUITO importante.)
E é claro, não poderiam faltar gráficos:
Uma curiosidade: Mark Shuttleworth (Canonical) e Ted Leung(Sun), demonstraram na Pycon UK 2008 uma preocupação de que, devido a essas novas engines, JavaScript possa tomar o lugar do Python! (Ao menos é o que diz o blog do Pypy). Será isso um exagero?
Mais benchmarks em http://www.satine.org/archives/2008/09/19/squirrelfish-extreme-fastest-javascript-engine-yet/
Notícia recorrente
- 2 de junho de 2008: SquirrelFish é a engine de JavaScript mais rápida do mundo!
- 22 de agosto de 2008: TraceMonkey é a engine de JavaScript mais rápida do mundo!
- 1 de setembro de 2008: V8 é a engine de JavasSript mais rápida do mundo!
- 1 de abril de 2009: VeryHotSpot é a engine de JavaScript mais rápida do mundo!

photo credit: Lauri Väin
V8 x Tracemonkey
Ok, depois de compilar o v8, eu pensei: e agora? Após ler sobre o tracemonkey, minha idéia caiu no seguinte: eu compilo o tracemonkey e faço testes com ambos.
Eu adaptei o shell script que roda o benchmark do tracemonkey para rodar o mesmo benchmark, só que usando o v8.
Sobre as duas VMS:
- O líder do desenvolvimento do V8 é Lars Bak, que foi o líder técnico do Strongtalk e do HotSpot (Java) e também um grande contribuidor da maquina virtual original do Self. Segundo o projeto, o V8 é otimizado para acesso de propriedades e tem um coletor de lixo agressivo.
- O Tracemonkey usa código do Tamarin, a máquina virtual de JavaScript da Adobe, que doou o código para a Mozilla Foundation. A otimização e o JIT é feito usando um processo chamado Tracing Trees. Se você estiver disposto a ler um paper comprido, complicado e interessante, pode ler o Incremental Dynamic Code Generation With Trace Trees.
No geral, o tempo total dos testes foi menor para o tracemonkey, embora comparando os quadros, não teve uma máquina virtual que tenha vencido em todos os testes.
Os testes foram feitos usando a revisão 110 do v8 (disponível em http://v8.googlecode.com/svn/trunk) e a revisão db4260e7ee13 do tracemonkey (disponível em http://hg.mozilla.org/tracemonkey/), e foi usado o próprio benchmark do tracemonkey para testar as duas VMs.
Agora a pouco, eu refiz os testes com as últimas versões das máquinas virtuais, e os resultados se alteraram um pouco:
Diferente do teste do Brendan Eich, foi testado apenas VM e não o desempenho dela dentro do navegador, mas no geral, os resultados do meu teste aqui condizem com o dele.
Mais sobre o v8 e assuntos relacionados
- Benchmarks no Google Chrome (Alexander Limi)
- Ruby rodando no V8
- Tentando aplicar várias técnicas dos novos runtimes de JS para as linguagens dinâmicas da JVM - discussão na lista JVM-Languages, uma lista que agrega muitas pessoas que estão trabalhando em linguagens dinâmicas na JVM (JRuby, Jython, Scala e muitas outras).
- Lua JIT x Javascript







