Estourando Pilhas

4 12 2006

Por mais que isso possa parecer um passatempo, de um programador sem ter muito o que fazer, resolvi fazer mais um comparativo entre linguagens de programação, levando em conta, desta vez, quantas execuções recursivas, cada uma executaria antes de termos o famoso Stack Overflow, ou estouro de pilha.

A justificativa desse comparativo vem do desenvolvimento do Anatro Livre, que entre suas as suas funções deve rotular uma imagem, esta função como foi dito no link, nada mais é que um função recursiva, que percorre a imagem procurando por um pixel preto e a partir deste, vai achando os vizinhos também pretos recursivamente.

Em umas das primeira implementações, usando Java, imagens grandes (2000×2000) não conseguiam ser executadas retornando um estouro de pilha, eis que resolvi, como um projeto a parte, testar quantas execuções são possíveis de se realizar com uma função recursiva simples, em cada linguagem de programação, até gerar um estouro de pilha.

Primeiro com uma algorítmo extremamente simples:

int funcao teste(int n){

escreve(n)
teste(n+1)

}

teste(0)

Consegui alguns resultados parciais:

Linguagem Execuções
Haskell Infinito
Perl 2210218
C++ (gcc) 524073
Pascal (tzim) 199736
C#,J#,VB.Net(VS2003) 43034
Java 10281
Bash 7472
C++(VS2003) 4776
Pascal (tp) 3966
Python 999
C++ (Visual C++) 563

 

Talvez algum dia desses eu perca algum tempo procurando as razões de cada um desses resultados, mas o que me agradou muito foi o Haskell que por mais tempo que eu deixasse rodando o programa, não houve aumento de consumo de memória.

Estou programando para, talvez não todas essa linguagens, fazer testes mais complexos, com estruturas mais complexas. Mas isso fica pra depois das provas!

Uptdate : Troquei a ordem na tabela de resultados para decrescente.
Uptdate2 : Adicionei os resultados que o Daniel Abrunhosa mandou nos comentários.