Desenvolver jogos em Ruby é uma boa ideia?
Essa pergunta me ocorre quando vejo o quanto um sistema de partículas feito em Ruby é custoso para máquina.
Mesmo desenvolvendo pequenos joguinhos experimentais, Ruby permanece prazeroso e rápido, assim como pretende ser. Mas vamos ao problema: Porque apresenta baixo rendimento quando o assunto é game?
Lag… nããão!
Um jogo que se preze tem como objetivo rodar 60fps. Expectativa alcançada somente quando os ciclos de processamento chegam, no máximo, a 16 milisegundos. Quando o processamento ultrapassa essa pequena fração de tempo, o frame rate cai, as vezes vai a níveis tão baixos que temos os famosos lags.
Tive o maior exemplo de lag quando tentei rodar Fifa 98 no meu 486. Nesse caso a medida de calculo mais óbvia não era frames per secound, mas sim secounds per frame.
Enfim, lags não são bem-vindos. Claro que esse foi um caso extremo, e o desenvolvedor do Fifa não tem culpa do idiota querer rodar o jogo em um micro da geração passada.
E o Ruby?
Ruby não é uma das tecnologias mais rápidas do mercado e o blá blá blá de sempre. Mesmo assim Python também não é um foguete e se sai melhor quando o assunto é velocidade em games.
Encontrei um artigo que resume o problema. Quem escreve é Glenn Fiedler, um desenvolvedor de jogos que trabalha na Sony.
Segundo ele o problema está no GC do Ruby, que ainda utiliza o método mark-sweep, mais lento que os GCs de outras tecnologias concorrentes. Então, o problema não está diretamente ligado à performance, mas sim na arquitetura.
E porque o mesmo problema não acontece com aplicações web? Na verdade acontece, mas a necessitade é outra. Nesse caso a requisição web chega ao servidor, é processada, e depois encarrega-se de limpar seu proprio lixo.
Enfim, continuo gostando de Ruby para estudos na área e pequenos joguinhos experimentais. E para isso existem diversos frameworks que ajudam:
- ruby-opengl “extension modules that are bindings for the OpenGL”
- Chingu “Lightning fast OpenGL accelerated 2D graphics”
- Gosu “a 2D game development library”
- G3DRuby “A Ruby Library for Advanced 3D Graphics”
- Rubygame “is a cross-platform multimedia library for the most beautiful programming language in the world”
- Ruby/SDL “enables you to use SDL from Ruby”
- RUDL “interfaces the Simple Directmedia Library to the Ruby language”
Mas quando a coisa é comercial e exige performance, talvez não seja uma boa escolha.
E antes que perguntem: Não testei com RubyEE, JRuby, IronRuby, MacRuby ou qualquer outra variante. E sim, teremos resultados diferentes.