Números romanos são só um dos ritos de passagem que todo programador, mais cedo ou mais tarde, acaba fazendo. Certa vez eu notei que era uma vergonha nunca ter implementado o conjunto de Mandelbrot na vida. Resolvi isso rapidamente escrevendo uma versão em Actionscript, e acabei ficando impressionado com o resultado! Com um pouquinho de otimização, o arquivo swf resultante tinha menos de 512 bytes.
É claro que eu resolvi tomar como desafio fazer o mesmo em outras linguagens. Em javascript foi tranqüilo, em java eu tive que apelar: só consegui atingir a barreira de 512 bytes escrevendo o bytecode diretamente na unha (source). Em python foi tão tranqüilo que, com a ajuda dos amigos, eu consegui reduzir para menos de 256 bytes:
De todas elas, a mais lenta certamente é a versão em javascript. Mas com todos falando bem do novo interpretador javascript do Firefox 3 Beta 5, eu resolvi usar esse fractal como benchmark. Fiz uma pequena modificação para imprimir o tempo gasto com o traçado, e eis os resultados:
É claro que eu resolvi tomar como desafio fazer o mesmo em outras linguagens. Em javascript foi tranqüilo, em java eu tive que apelar: só consegui atingir a barreira de 512 bytes escrevendo o bytecode diretamente na unha (source). Em python foi tão tranqüilo que, com a ajuda dos amigos, eu consegui reduzir para menos de 256 bytes:
De todas elas, a mais lenta certamente é a versão em javascript. Mas com todos falando bem do novo interpretador javascript do Firefox 3 Beta 5, eu resolvi usar esse fractal como benchmark. Fiz uma pequena modificação para imprimir o tempo gasto com o traçado, e eis os resultados:
- Firefox 3: 4.0 s
- Safari 3.1: 4.0 s
- IE 6: 8.3 s
- Firefox 2: 14.4 s
- Opera: 21.3 s
Você já experimentou reimplementar a versão em javascrit usando "canvas"? deve ser absurdamente mais rápido. (minha versão está aqui: http://www.girino.org/frac/js/jsdraw.html -- é bem lenta porque eu uso "threads" para evitar que o IE trave, mas otimizando apenas para o firefox e reduzindo a resolucao seu ganho de velocidade deve ser grande.)
ResponderExcluirAh sim, é que o constraint original era manter o código menor que 512 bytes. Depois eu faço com canvas pra ver como fica.
ResponderExcluirNo Safari 3.0 o tempo foi 5.4s.
ResponderExcluirVersus 17s no Firefox 2 no mesmo sistema.
Mac OSX - Intel Core 2 Duo
Ubuntu 7.10,
ResponderExcluirEpiphany 2.20.1,
Time Elapsed: 17740 ms
Firefox 2.0.13,
Time Elapsed: 29964 ms
Opera 9.27,
Time Elapsed: 14659 ms
(com a vantagem de não travar durante esse tempo).
Firefox 3, beta 2,
Time Elapsed: 19847 ms