Wagner Andrade

A Vida, Programação, o Universo e Tudo Mais

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-openglextension modules that are bindings for the OpenGL
  • ChinguLightning fast OpenGL accelerated 2D graphics
  • Gosua 2D game development library
  • G3DRubyA Ruby Library for Advanced 3D Graphics
  • Rubygameis a cross-platform multimedia library for the most beautiful programming language in the world
  • Ruby/SDLenables you to use SDL from Ruby
  • RUDLinterfaces 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.