Estou escrevendo um pouco de linguagem incorporada para outro projeto. Embora o desenvolvimento de jogos não tenha sido sua intenção original, está começando a parecer um bom ajuste, e acho que vou desenvolvê-lo dessa maneira em algum momento.
Sem revelar detalhes (para evitar preconceitos), estou curioso para saber:
Quais recursos você ama em uma linguagem de script para o desenvolvimento de jogos?
Se você usou Lua, Python ou outra linguagem incorporada, como Tcl ou Guile, como sua principal linguagem de script em um projeto de jogo, quais aspectos você achou mais úteis?
Recursos de linguagem (lambdas, classes, paralelismo)
Recursos de implementação (otimizações de desempenho, JIT, aceleração de hardware)
Recursos de integração (ligações C, C ++ ou .NET)
Ou algo completamente diferente?
Respostas:
Estou procurando duas coisas: velocidade e integração. Geralmente os dois andam juntos e com familiaridade. Infelizmente, para C ++, não há praticamente nenhuma linguagem que ofereça velocidade e integração. Eu usei Lua e foi horrível. Passei o tempo todo escrevendo ligações e sem tempo suficiente escrevendo código.
Caracteristicas do idioma? O ponto de incorporar uma linguagem de script não é para que ele possa ter recursos de linguagem dinâmica whizzy que meu idioma original não possuía, é para que possa ser interpretado em tempo de execução . Eu realmente não me importo além disso, desde que seja basicamente funcional, então tudo bem - e se encaixa na minha linguagem host (neste caso, C ++). No entanto, surpreendentemente, as linguagens projetadas para serem integradas aos aplicativos host falham totalmente na parte da integração .
Preciso de co-rotinas? Não, não preciso de co-rotinas. Preciso de digitação dinâmica? Não, eu preciso saber que tipos estão voltando para mim a partir da minha linguagem de script e, como todo o meu código existente é construído com base em uma digitação muito forte, eu realmente gostaria que meu código de script também respeitasse isso. Preciso de coleta de lixo? Não, meus tipos já gerenciam seus próprios recursos, e eu definitivamente quero destruição determinística. Eu quero ir? Não, eu quero lançar exceções.
O problema que encontrei foi que basicamente todas as linguagens de script existentes foram projetadas para estender C, não C ++, e não suportam adequadamente o modelo C ++ de várias maneiras e, além disso, elas têm semântica totalmente diferente. Como vou traduzir
shared_ptr
, que é a destruição determinística automática, em um ambiente de coleta de lixo? Você pode escrever as bibliotecas de quebra automática que desejar, não alterará a semântica do idioma subjacente, sendo incompatível com o idioma que está tentando estender com ele. Como posso garantir que essevoid*
é o tipo certo? Como posso lidar com a herança? Como faço para lançar e capturar exceções? Simplesmente não funciona.Uma boa linguagem de script para C ++ seria estaticamente digitada, valorizaria a semântica, deterministicamente destruída, lançaria e capturaria exceções e respeitaria meus destruidores / construtores / construtores de cópia, porque todos os meus tipos funcionarão, agradáveis e fáceis, e a linguagem resultante será rápido e suporte toda a minha semântica original, fácil de vincular.
fonte
Para jogos baseados na Web, três fatores importantes para mim são:
Eu particularmente gosto do Perl, em parte porque já estou familiarizado com a linguagem e porque, com um módulo de servidor da Web como o mod_perl2, há um enorme benefício de desempenho e integração - o mod_perl2 mantém uma versão compilada dos scripts na RAM (que são interpretados apenas sob primeiro carregamento), que oferece uma grande vantagem de velocidade em relação a outras linguagens interpretadas que não têm opções de compilação e também se integra ao servidor Apache HTTPd com uma API rica em recursos que fornece acesso a muitos recursos muito poderosos.
Esses fatores podem ser úteis para o desenvolvimento de jogos baseados na Web (e onde o acesso ao banco de dados é necessário, o armazenamento em cache das conexões com o banco de dados ajuda a reduzir ainda mais os tempos de resposta dos usuários). Obviamente, essa pode não ser a solução mais ideal para tudo, pois cada idioma tem suas vantagens (e desvantagens), mas sempre funcionou bem para minhas necessidades.
fonte
Organizados na ordem de importância (decrescente):
fonte