Ruby 1.9 ownando em desempenho!
Janeiro 7, 2008 at 5:54 pm | In Linux | 3 CommentsBom, eu soube hoje(apesar de já ter sido há alguns dias), que foi lançado o ruby 1.9, e entre as novidades principais desta versão, está um interpretador de Bytecode! Isso, traduzido em palavras não geeky-ish, significa uma palavra: desempenho!
Então, depois de muito pesquisar sobre ele, resolvi instalar um pacote, que estava no AUR(a nova versão ainda não tá no repositório oficial, vai saber porque), com o novo ruby. Como o pacote instala o ruby 1.9 em um diretório diferente do 1.8.6, resolvi então fazer um “benchmark” básico para comparar a diferença de desempenho :]
A máquina de teste é um Pentium 4 2.8Ghz(não HT) rodando Arch Linux.
Então, eu resolvi primeiramente calar a boca de uns pythonianos(claro que foi melhor, se não nem postava aqui XD). A fórmula escolhida foi a fórmula de Fibonnaci, e os fontes foram esses:
def fib(n)
if n == 0 || n == 1
n
else
fib(n-1) + fib(n-2)
end
end36.times do |i|
puts “n=#{i} => #{fib(i)}”
end
Em ruby. E em python:
def fib(n):
if n == 0 or n == 1:
return n
else:
return fib(n-1) + fib(n-2)for i in range(36):
print “n=%d => %d” % (i, fib(i))
Então, munido destes códigos, eu parti para o ataque
A ferramenta escolhida foi o comando time, que já é padrão do linux, coisa e tal.
E… chegando ao momento que todos esperavam! Eu vou mostrar! Posso mostrar*platéia: pode!*? Ok então, eu vou mostrar, mas só depois dos comerciais.
* Pausa para comerciais *
Primeiramente, eu testei o Ruby 1.8.6, o que me mostrou o seguinte resultado:
real 3m36.034s
user 2m40.666s
sys 0m21.735s
Nossa, rápido hein? Quase dormi esperando terminar isso =\
Vamos para o próximo concorrente, o python(em sua versão 2.5.1):
real 1m13.487s
user 1m4.912s
sys 0m0.813s
Uia, muito melhor, vai ver os pythonianos tavam com razão
E então, o teste final, o Ruby 1.9.0:
real 0m22.808s
user 0m19.229s
sys 0m0.220s
E isso significa… Vitória!O novo ruby foi 3,2 vezes mais rápido que o Python, e 9,5 vezes mais rápido que a versão anterior dele mesmo.
Então, para concluir esse artigo, é uma mostra que pelo menos o desempenho não é mais um motivo tão sério para não se usar ruby, pelo menos em comparação a python.
PS: Aproveitando o clima do post, eu resolvi testar a mesma fórmula, ou pelo menos uma parecida(feita pelo meu amigo jfsantos, do #archlinux.br, e que pode ser encontrado aqui):
real 0m0.224s
user 0m0.213s
sys 0m0.000s
É, algum dia chegamos lá, não é mesmo? ![]()
Só para constar, o programa em C foi compilado com as seguintes flags:
-O3 -march=pentium4 -mtune=native -pipe -fomit-frame-pointer
Bom, até a próxima então, pessoal!
- Sryche
3 Comentários »
Feed RSS dos comentários deste post URI do TrackBack
Deixe um comentário
Blog no WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.

Um aumento de 9.5x na velocidade realmente não é pouca coisa. Tava meio em dúvida se instalava o 1.9 (instável ainda), mas depois dessa…
E quanto ao C, bem… covardia, né?
Mas ele deve ter levado umas 9.5x mais tempo que você pra escrever o código.
Comentário por Elomar — Janeiro 8, 2008 #
Hahaha, não, se você ver, o código é basicamente o mesmo, nesse caso não utilizamos códigos complexos então fica fácil de fazer em todas :]
Eu pretendo fazer um teste desse em fortran, mas é difícil arranjar alguém que programe
Comentário por Cainã Costa — Janeiro 10, 2008 #
// Fibonacci.java
public class Fibonacci {
public static void main(String[] args) {
Result resp = new Result();
for (int i=0; i<36; i++) {
System.out.println(resp.Fib(i));
}
}
}
// Result.java
public class Result {
public int Fib(int n){
if (n == 0 || n == 1) {
return n;
}
return Fib(n – 1) + Fib(n – 2);
}
}
real 0m0.766s
user 0m0.540s
sys 0m0.008s
Comentário por chavao — Junho 5, 2008 #