No meu projeto atual, os scripts Lua são chamados pelas funções C ++ no lado do servidor. Depois disso, os scripts chamam novamente as funções C ++ ainda nessa solução. Por que devemos fazer essas coisas e não chamar a função C ++ diretamente? Quais são as situações em que os scripts são necessários?
Os scripts geralmente são compilados em tempo de execução , enquanto o idioma do host será compilado em tempo de compilação. Isso significa que não precisamos recompilar se o script for alterado. A recompilação de um jogo completo pode levar minutos a horas, o que implica um grande impacto na produtividade.
Normalmente, o código crítico ou o código de back-end não será script. Esse código deve ser executado rapidamente e, freqüentemente, o gerenciamento de memória é crucial.
Nos jogos, a lógica e a configuração do jogo geralmente estão contidas nos arquivos de script. Esses scripts podem ser facilmente atualizados por não programadores (como o designer) para ajustar a jogabilidade. As linguagens de script são fáceis e agem de maneira perdoadora para esse propósito.
Freqüentemente, uma linguagem de script também é usada para fazer scripts em tempo real . Isso é útil para ajustar alguns elementos de jogabilidade ou até para depuração. Muitos jogos fornecem um console para esse fim (principalmente interno).
É muito bem possível que você crie um jogo usando um mecanismo de jogo existente, apenas por script. A camada do mecanismo de jogo é assim totalmente dissociada da camada de lógica do jogo . Geralmente, os mecanismos modernos podem ser usados para criar jogos de FPS ou RTS com facilidade, mas isso não é possível para nenhum gênero. Um MMO provavelmente exigiria outro tipo de mecanismo.
Portanto, a linha inferior é a dissociação. Os benefícios listados acima geralmente superam o trabalho extra para criar ou integrar uma linguagem de script.
+1 por dizer que os scripts geralmente são mais fáceis de atualizar por não programadores. Designers nem sempre são programadores e nem precisam ser.
Oak
19
Sinto que estou me repetindo em todas as perguntas sobre scripts - se o seu fluxo de trabalho exigir que não-programadores programem (o que inclui scripts), isso vai te incomodar mais tarde. Designers nem sempre são programadores, mas assim que escrevem scripts não triviais (por exemplo, assim que tentam definir uma função ou usar um loop), eles fingem ser um. Se eles não tiverem treinamento em programação, isso terminará em lágrimas e perderá tempo para todos.
5
Joe - isso não invalida o argumento, apenas significa que você precisa decidir onde desacoplar o "material de programação" do "material de design" e a linha divisória será diferente com base nos conhecimentos técnicos de seus designers (ou na falta de do mesmo).
Ian Schreiber
3
Tenho certeza de que qualquer designer que se preze é bem ensinado em pelo menos um idioma. Para esclarecer um pouco as coisas, eu gostaria de diferenciar o termo "não programador" como alguém cuja profissão não é a de um engenheiro de software. Me arrependo de usar o termo, graças a Joe eu vejo que é ambíguo. Acredito que haja uma ampla gama de programadores, desde aqueles que escrevem XML simples até montagem hardcore e processamento de sinais pesados em matemática. Espero que isso resolva a questão da dualidade "não programador".
Nef
8
Não ouvi ninguém sugerir que os designers escrevessem scripts complexos e críticos para a produção. No entanto, designers com um entendimento modesto da programação ainda podem ajustar alguns scripts experimentalmente (e depois entregá-los aos programadores reais). Eles certamente poderiam escrever scripts ad hoc simples a partir de um console em tempo de execução para facilitar seus próprios testes. Imagino que os designers possam querer aproveitar o script básico para criar protótipos de novos designs de tela (mesmo que nada mais sejam do que modelos interativos e semi-funcionais). Muitos códigos de não produção precisam ser gravados.
quer
38
Você fez a pergunta errada. A verdadeira questão, eu acho, é por que toleramos linguagens "sem script" como C, C ++, Java e assim por diante? E a resposta é uma razão: desempenho. (E talvez inércia, mas essa inércia existe por causa do desempenho, e qualquer pessoa que possa escrever C / C ++ / Java bom pode escrever pelo menos Ruby / Python / Lua / JavaScript aceitável).
Usamos linguagens de "script" (o que realmente significa, muito alto nível, coleta de lixo e geralmente alguma forma de digitação mais flexível e compilação dinâmica) porque geralmente são linguagens mais fáceis para qualquer pessoa - inclusive os programadores - escrever código. coisas estúpidas como lembrar de libertar depois de fazer compras ou garantir que seu código seja seguro para exceções ou lembrar de tornar todos os seus destruidores virtuais. Se nossos computadores fossem infinitamente rápidos, estaríamos usando linguagens de "script" para tudo.
Eu gosto de esse argumento de modo muito melhor do que "para os designers podem programar." É uma péssima idéia descartar o valor do desenvolvimento rápido e poder experimentar mudanças sem recompilar tudo.
ojrac 02/09/10
10
As linguagens de script para a lógica dos jogos são um exemplo muito bom do padrão de arquitetura de software Alternate Hard and Soft Layers . Há uma boa discussão nesse site (e outros, tenho certeza) sobre os benefícios de fazê-lo.
As alterações de script são fáceis de implantar. Por exemplo, você pode manter os scripts em um banco de dados, o que significa que, em vez de uma reimplementação binária completa e possível reinicialização do serviço, basta emitir uma única instrução SQL UPDATE, possivelmente seguida de um sinal para o serviço em execução para recarregar o script.
Além disso, as linguagens de script geralmente são simples de entender e fáceis de programar, para que você não precise dos desenvolvedores 'hardcore' (aqueles que lidam com gerenciamento de memória / ponteiros e otimizações no nível da CPU) para a maioria do código (se um RPG grande, os scripts para IA, feitiços, efeitos de itens e o próprio mundo geralmente são maiores que o código do mecanismo). As linguagens de script permitem muito mais foco no 'quê' em vez do 'como' devido à Coleta de Lixo (no caso de Lua) e a um nível mais alto de abstração.
Um cenário em que os scripts são úteis é quando queremos que nosso mecanismo seja extensível por plugins / addons. Essas extensões são criadas em muitos casos por pessoas não profissionais (como jogadores avançados e entusiastas). Os scripts são mais seguros e fáceis para esse fim. Ao usar scripts, eles não precisam usar compiladores e não precisam estar cientes dos ponteiros ...
Um ótimo exemplo disso é o jogo World of Warcraft. Possui milhares de complementos criados pela comunidade. Esses complementos são gravados usando LUA + XML.
Você fez a pergunta errada. A verdadeira questão, eu acho, é por que toleramos linguagens "sem script" como C, C ++, Java e assim por diante? E a resposta é uma razão: desempenho. (E talvez inércia, mas essa inércia existe por causa do desempenho, e qualquer pessoa que possa escrever C / C ++ / Java bom pode escrever pelo menos Ruby / Python / Lua / JavaScript aceitável).
Usamos linguagens de "script" (o que realmente significa, muito alto nível, coleta de lixo e geralmente alguma forma de digitação mais flexível e compilação dinâmica) porque geralmente são linguagens mais fáceis para qualquer pessoa - inclusive os programadores - escrever código. coisas estúpidas como lembrar de libertar depois de fazer compras ou garantir que seu código seja seguro para exceções ou lembrar de tornar todos os seus destruidores virtuais. Se nossos computadores fossem infinitamente rápidos, estaríamos usando linguagens de "script" para tudo.
fonte
As linguagens de script para a lógica dos jogos são um exemplo muito bom do padrão de arquitetura de software Alternate Hard and Soft Layers . Há uma boa discussão nesse site (e outros, tenho certeza) sobre os benefícios de fazê-lo.
fonte
fonte
As alterações de script são fáceis de implantar. Por exemplo, você pode manter os scripts em um banco de dados, o que significa que, em vez de uma reimplementação binária completa e possível reinicialização do serviço, basta emitir uma única instrução SQL UPDATE, possivelmente seguida de um sinal para o serviço em execução para recarregar o script.
Além disso, as linguagens de script geralmente são simples de entender e fáceis de programar, para que você não precise dos desenvolvedores 'hardcore' (aqueles que lidam com gerenciamento de memória / ponteiros e otimizações no nível da CPU) para a maioria do código (se um RPG grande, os scripts para IA, feitiços, efeitos de itens e o próprio mundo geralmente são maiores que o código do mecanismo). As linguagens de script permitem muito mais foco no 'quê' em vez do 'como' devido à Coleta de Lixo (no caso de Lua) e a um nível mais alto de abstração.
fonte
Um cenário em que os scripts são úteis é quando queremos que nosso mecanismo seja extensível por plugins / addons. Essas extensões são criadas em muitos casos por pessoas não profissionais (como jogadores avançados e entusiastas). Os scripts são mais seguros e fáceis para esse fim. Ao usar scripts, eles não precisam usar compiladores e não precisam estar cientes dos ponteiros ...
Um ótimo exemplo disso é o jogo World of Warcraft. Possui milhares de complementos criados pela comunidade. Esses complementos são gravados usando LUA + XML.
fonte