Desenvolvendo jogos no Go? [fechadas]

40

O novo idioma Go do Google ainda está em sua infância e ainda precisa encontrar amplo uso ou suporte no mundo real. Mesmo assim, parece um experimento promissor, e me pergunto se poderia ter um futuro no desenvolvimento de jogos. Não consegui encontrar muita discussão específica do jogo sobre o Go em outro lugar e achei que uma discussão da CW pode ser apropriada.

Alguns pensamentos:

  • Segundo o golang.org , os programas Go "são executados quase tão rapidamente quanto o código C ou C ++ comparável" - rápido o suficiente?
  • A coleta de lixo do Go é adequada para jogos?
  • Quanta reformulação mental é necessária para criar jogos na terra das goroutines simultâneas?
  • O Go é freqüentemente chamado de linguagem de nível "sistemas", com o software de servidor como exemplo. É difícil não pensar em servidores de jogos multiplayer ao ouvir isso.

Seus pensamentos?

TSomKes
fonte
11
Eu aconselho qualquer pessoa que não esteja familiarizada com o GO a realmente seguir o link antes de responder, em vez de apenas responder com base nos "pensamentos" dados, que são ditos se a sua resposta for genérica e não específica para esse idioma, acho que não importa
lathomas64
11
Gostaria de saber se você pode fazer jogos em movimento (o jogo): P
RCIX
4
Não tenho certeza se ' Go ' é considerado como completo (novamente, é operado por humanos). Mas o espaço de armazenamento é muito limitado (pelo menos se estiver usando uma placa de regulamentação).
David C. Bishop
@ DavidC.Bishop Funny ...
Brian Ortiz
11
Se você criar um mecanismo de jogo go, certifique-se de aproveitar o que o idioma pode fazer, em vez de tentar usá-lo da mesma maneira que faria com um idioma mais "convencional" e copiar o que já existe.

Respostas:

34

Minha opinião sobre suas perguntas:

  • A linguagem é bastante rápida o suficiente. A linguagem Java mais lenta é usada para o desenvolvimento de jogos. Até o Python (pygame) é usado para o desenvolvimento de jogos e é significativamente mais lento que o Java. Tudo depende do tipo de jogo e da intensidade do processador.
  • A coleta de lixo em geral não é muito boa para jogos. No entanto, o Go possui um sistema de coleta de lixo particularmente ruim (marcação e varredura) que interrompe o mundo enquanto limpa as coisas. Será difícil lidar com isso e causará uma espécie de taxa de quadros de parar e ir.
  • Uma quantidade decente de reequipamento mental é necessária para criar jogos com goroutines. Gráficos e lógica não podem ser concorrentes no sentido tradicional; mas em um nível menor, partes da lógica são ótimas candidatas a goroutines simultâneas (por exemplo, processamento paralelo de decisões de IA, sistemas de partículas, etc.)
  • Um servidor de jogo multiplayer pode realmente ser um ótimo candidato para o idioma Go.

Na minha opinião, se você tem um desejo forte o suficiente para tentar escrever jogos com um idioma, vá em frente. Obviamente, se você está considerando isso, tem uma paixão por fazê-lo, e por que não seguir essa paixão em vez de se forçar a se adequar à norma? Eu poderia dizer muito mais, mas já disse muito na minha resposta à pergunta: "Ruby é uma linguagem adequada para o desenvolvimento de jogos?"

Ricket
fonte
6
"um sistema de coleta de lixo particularmente ruim (marcação e varredura)" a marcação e varredura não para de maneira inerente o mundo - Java possui um coletor simultâneo de marcação e varredura, por exemplo, e Lua usou um ingênuo por um longo tempo - e grande parte da duração da pausa pode ser controlada por um cuidadoso sistema geracional. Dito isto, o Go's é marca e varredura de parar o mundo. Mas o primeiro, não o último, é o problema dos jogos. (O fio de Ruby tinha algumas reivindicações estranhas sobre isso também.)
11
O sistema atual do Go GC parece ser um espaço reservado: "A implementação atual é um coletor simples de marcação e varredura, mas uma substituição está em andamento" ( golang.org/doc/go_lang_faq.html#garbage_collection ). Opções de substituição foram discutidas; Não conheço nenhuma decisão firme sobre o assunto.
TSomKes
11
Joe, obrigado por esclarecer! Eu não estava ciente disso. E sim, TSomKes, eu vi isso, para que possamos manter nossas esperanças de que o Go implemente um coletor de lixo melhor em algum momento.
Ricket 16/09/10
4
Observe que a resposta acima está desatualizada quando se trata do coletor de lixo Go atual. É um jogo totalmente diferente com o Go 1.5. Eu me pergunto o quanto de preocupação ainda é essa.
Jonas
3
E parece que com a versão 1.8, o GC será reduzido para 100μs de parada simultânea no mundo. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor
17

Eu escrevi um pequeno mecanismo no Go for OSX (usando o OpenGl para a janela de gráficos). Tenho alguma experiência com os mecanismos de jogos C ++ ( http://morganjeff.weebly.com/ ) e decidi experimentar o Go depois de ler sobre alguns dos recursos que ele oferece.

Desde o lançamento do Go 1.1, o go tem suporte para a maioria dos recursos necessários para escrever um mecanismo de jogo (realmente um núcleo de jogo, pois o mecanismo sugere editores e o que não), incluindo:

  • Associação de função de membro (para o sistema de mensagens)
  • A reflexão é incorporada (útil para serialização, suporte a ferramentas externas, etc.)
  • Interfaces (para implementar comportamento polimórfico para sistemas, componentes, etc.)

Alguns dos benefícios de usar o Go (para um projeto grande):

  • O teste é incorporado ao idioma (isso inclui testes de benchmark e algumas asserções)
  • É fácil adicionar exemplos ao idioma (e eles são compilados para correção)
  • É fácil adicionar código específico à arquitetura (por meio de convenções de nomenclatura de arquivos)
  • A criação de perfil é incorporada ao idioma
  • controle de versão interno das importações (permite adicionar binários grandes a um repositório separado da fonte, mantendo-o com versão e atualizado)

Alguns benefícios do uso do Go em geral:

  • Código fácil de refatorar
  • O Go suporta encadeamento (ao contrário do C ++, que foi colocado em camadas no topo)
  • velocidade de compilação super rápida reduz a necessidade de suporte à linguagem de script
  • sistema de digitação estática (as interfaces são satisfeitas por meio da digitação de pato, aka implicitamente)
  • vários valores de retorno, parâmetros nomeados, atributos de estrutura marcados
  • ótimas ferramentas e documentação incorporadas
  • idioma gerenciado

Algumas desvantagens do uso do Go:

  • Sem macros ou modelos
  • Não possui suporte de biblioteca para idiomas mais maduros
  • idioma gerenciado (listado duas vezes de propósito)
  • NO IDE

Existem maneiras de obter memória bruta em movimento (importação "insegura") e irei vincular um artigo que mostra como um programa em movimento pode ser perfilado para memória e velocidade. Em suma, a afirmação de Go de que é um C moderno parece muito verdadeira. Eu acho que ele foi "inteligentemente" projetado (por muito mais razões do que eu mencionei) e, mais importante, está bem documentado. Um mecanismo projetado no Go será um pouco diferente de um mecanismo projetado em C ++ (algo com o qual ainda estou me acostumando), mas o mecanismo Go resolve muitos problemas que não são realmente resolvidos no C ++ (paralelismo, a complexidade da linguagem C ++ e o mau uso da herança).

Aqui está o artigo que prometi: http://blog.golang.org/2011/06/profiling-go-programs.html

-Jeff

jmorgan
fonte
experimente o Sublime com o GoSublime, ele realmente parece um IDE e é muito mais reativo do que muitos (se não todos) IDEs para Java.
Arne #
11
você pode especificar o que você quer dizer com "controle de versão interno das importações", não tenho conhecimento da tag de versão do próprio idioma go.
Arne24
@jmorgan alguma mudança de perspectiva desde o Go 1.2 e vendo as próximas alterações do Go 1.3?
usar o seguinte comando
@ Arne: Boa chamada! Eu realmente gosto muito do GoSublime. O que eu quis dizer com nenhum IDE é que, para obter um depurador visual, você precisa usar o gogdb (que é uma ótima ferramenta), mas não é tão bom quanto o visual studio. Aqui está o que eu quis dizer sobre as dependências de pacotes e controle de versão: golang.org/cmd/go/... golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan
@ylluminate: Sinceramente, acho que o Go está cada vez melhor. Agora ele vem com um pacote de cobertura de teste, para que você possa ver rapidamente o que é testado e o que não é. Descobri que ter uma suíte de testes decente facilita muito a minha vida ... então esse é um grande recurso para mim. O Go 1.3 parece que haverá melhorias no tamanho binário e na velocidade de execução (especificamente o coletor de lixo), então isso é ótimo.
jmorgan
4

Outra coisa a se pensar é que, como o Go ainda é relativamente novo, talvez ainda não haja ligações para muitas das bibliotecas comuns usadas no desenvolvimento de jogos.

Bob Somers
fonte
Definitivamente o caso. Por exemplo, me deparei com dois projetos Go / SDL, um dos quais parece ter sido abandonado. Eu encontrei um punhado de jogos (relativamente pequenos) que usam qualquer um deles.
TSomKes
11
Você definitivamente deve conferir github.com/go-gl , não é SDL, mas uma boa alternativa se você usa o OpenGl. Para vetores, há github.com/Jragonmiris/mathgl , mas encontrei bugs lá. O Go makes é super fácil de quebrar as bibliotecas C, não há necessidade de makefiles. Você também pode importar arquivos de cabeçalho C e usar suas funções diretamente.
Arne
0

Não use o Go para desenvolver um jogo, será apenas um albatroz no pescoço. A cadeia de ferramentas para o desenvolvimento de jogos se estende muito mais do que apenas a linguagem em que você escreve, e encontrará obstáculos a cada passo que simplesmente não estarão lá se você optar por algo estabelecido.

Não me entenda mal, adoro brincar com novos idiomas, mas se você estiver tentando fazer com que os jogos escolham um idioma que tenha comunidade e suporte, você estará muito melhor.

Aaron Brady
fonte
9
Por outro lado, se você está apenas codificando coisas em um pequeno projeto indie para brincar com um novo idioma, a preocupação com o "conjunto de ferramentas" é superestimada.
2
Eu tenho que discordar aqui. A maioria das coisas relacionadas ao desenvolvimento de jogos não tem nada a ver com a linguagem. Fazer perguntas sobre o OpenGL não tem nada a ver com o tempo que você programa no C C ++ Go ou mesmo em Java. E, a propósito, de que cadeia de ferramentas você está falando? E por que deveria ser incompatível ir?
21814 Arne