Uma linguagem de programação específica para jogos – característica-linguagem jogos design-de-linguagem

Pergunta:


Existe alguma linguagem de programação específica para desenvolvimento de jogos eletrônicos? Uma linguagem que seja otimizada de alto desempenho para usar instruções de processamento de mídia, que seja vinculada à GPU?

Eu sei que muitos vão dizer que quando se fala em jogos se fala em C++, mas essa é uma linguagem de propósito geral, eu queria saber se existe algo realmente específico para área de games e mídia em geral. Não quero saber a respeito de bibliotecas gráficas nem nada do tipo, eu quero saber de uma linguagem.

Existe alguma pesquisa científica nessa área? Algum projeto em desenvolvimento, ou até mesmo um protótipo?

Autor da pergunta Michael Pacheco

Luiz Vieira

Existe alguma linguagem de programação específica para desenvolvimento
de jogos eletrônicos?

Não. Simplesmente porque não há requisitos únicos ou especiais ao se desenvolver jogos que requereriam uma linguagem de programação específica. De fato, a sua pergunta poderia ser refeita para qualquer domínio de problema e a resposta provavelmente continuaria sendo “não”. Por exemplo:

  • existe linguagem de programação específica para desenvolver sistemas de supermercado?
  • existe linguagem de programação específica para desenvolver tags rastreadoras de gado?

Dependendo do domínio do problema pode ocorrer de existir uma linguagem específica porque ela é proprietária, isto é, criada pelo fabricante de um certo equipamento de hardware e, portanto, necessária para uso nesse equipamento. Mas eu diria que isso é raro de ocorrer porque:

  1. os fabricantes não desejam ter esse esforço (de tempo e dinheiro)
  2. os fabricantes desejam que os fornecedores e clientes interessados em usar seus equipamentos o façam com facilidade

É por isso que é comum, mesmo em domínios de problema envolvendo hardwares específicos, que se use linguagens portáveis e já conhecidas como C, C++ e até mesmo Assembly, com a provisão de no máximo um SDK (Software Development Kit) específico para a plataforma.

No caso de jogos, os consoles (PlayStation, XBox, Nintendo, …) são os equipamentos e por isso é bem comum que o desenvolvimento de sistemas (os jogos!) para eles seja executado em C++ ou Java com o auxílio de SDKs dos fabricantes.

Uma linguagem que seja otimizada de alto desempenho para usar
instruções de processamento de mídia, que seja vinculada à GPU?

Depende do que você quer dizer com “otimização de alto desempenho”. Se a linguagem for compilada (caso de Assembly, C, C++, por exemplo) ou utilizar recursos de compilação dinâmica (como o Just-In-Time no Java, por exemplo), seu desempenho vai ser o melhor possível na máquina considerando as soluções implementadas pelo programador.

O uso de GPU não necessariamente depende da linguagem. DirectX e OpenGL fazem justamente essa ponte em se tratando da manipulação e renderização de gráficos. Eu digo “não necessariamente” porque há “linguagens” (vamos chamar assim) voltadas ao uso da GPU para a computação paralela, e que, portanto, não tem nada a ver com um domínio de problema específico.

Cuda, por exemplo, é a “linguagem” (que na verdade está mais para uma plataforma desenvolvida em cima do C/C++) da NVIDIA para a solução de problemas com natureza intrinsecamente paralela (por exemplo, a soma de dois vetores, cujos itens podem ser somados em kernels concorrentes) com altíssimo desempenho. Ela explora a GPU para realizar esse processamento de forma concorrente e a linguagem é construída de forma a abstrair do programador o parelelismo e a consolidação dos resultados (exemplos aqui). Ela pode ser usada em jogos? Claro! Não somente para a renderização de elementos gráficos, mas também para a Inteligência Artificial e qualquer outro problema que se beneficie de paralelismo. Mas veja como não é algo específico para esse domínio de problema.

Eu sei que muitos vão dizer que quando se fala em jogos se fala em
C++, mas essa é uma linguagem de propósito geral, eu queria saber se
existe algo realmente específico para área de games e mídia em geral.
Não quero saber a respeito de bibliotecas gráficas nem nada do tipo,
eu quero saber de uma linguagem.

C++ é muito utilizada porque é muito conhecida e porque é bastante difundida em diversas plataformas de hardware. Há inúmeras outras que podem ser utilizadas. Java é bem comum também. Python, como mencionaram em comentários, está se tornando cada vez mais comum. Só que, como eu respondi antes, nenhuma delas é específica para jogos e dificilmente vai haver uma porque não há necessidade.

Você diz que não tem interesse em saber de bibliotecas gráficas nem “nada do tipo”. Mas aí está justamente o cerne da questão: o que os jogos realmente se diferenciam de outros problemas é nas suas necessidades. E eu não estou falando apenas de gráficos. A física é uma importante necessidade de muitos jogos, envolvendo a detecção de colisões (quando um objeto “toca” outro) e até mesmo a simulação de efeitos naturais como gravidade, atrito, torque, etc.

Mas existe linguagem específica para isso? Não. O C++ é muito utilizado na construção de bibliotecas que auxiliam nesse desenvolvimento, mas há bibliotecas com diversas linguagens. O mesmo vale para Inteligência Artificial, comunicação em redes, simulação de luz e sombras, processamento de imagens (captura a partir de câmera), processamento de som (desde simplesmente “tocar” músicas e efeitos sonoros, até a simular variações de percepção com relação a obstáculos e tipos de materiais obstrutores), e por aí vai.

Existe alguma pesquisa científica nessa área? Algum projeto em
desenvolvimento, ou até mesmo um protótipo?

Se você fala sobre pesquisa científica a respeito da criação de uma linguagem específica para jogos, eu acho que não existe. Creio que não há muitas pessoas interessadas em empregar esforços na criação de mais uma linguagem, pelos argumentos colocados até então. O que há, na verdade, é muito esforço para criar linguagens mais palatáveis (leia como “fáceis de usar para um público não-especializado”), principalmente para crianças. O Scratch (do MIT), por exemplo, é bem famoso e usa uma abordagem visual. Embora possa ser considerado uma nova “linguagem” (isso é um tanto polêmico), e tenha sido usado em motores/bibliotecas como, por exemplo, o Stencyl, ele não é específico para jogos! Você pode construir qualquer coisa com uma linguagem desse tipo. O Stencyl é bem mais voltado para jogos por ser um ambiente com muitas das necessidades de jogos prontas (detecção de colisão, animação, etc), e por isso está mais para uma biblioteca do que pra uma linguagem.

Tela de um exemplo feito no Scratch:
inserir a descrição da imagem aqui

Do ponto de vista da indústria, o que existe mesmo é uma enorme proliferação de motores de jogos (engines), tal como o Stencyl. A é uma das mais famosas, mas a lista é enorme.

Um adendo importante

Tudo o que foi mencionado acima está relacionado à programação de jogos. Vale lembrar que a palavra “desenvolvimento” é ampla e genérica demais, e não inclui apenas a programação. O desenvolvimento de jogos inclui também o planejamento de tarefas, a publicidade, venda, etc, e principalmente, o Game Design: o processo de concepção do jogo em termos de seus objetivos, condições de término, vitória e derrota, fases, elementos artísticos, elementos mecânicos (regras e como ações se mapeiam em resultados), métodos de interação, experiências emocionais esperadas, etc. Sei que a sua pergunta não envolvia todos esses aspectos, mas há também estudos a respeito de linguagens para a formalização do Game Design.

A formalização do Game Design (necessária não apenas para a documentação e entendimento do “problema”, mas também para a comunicação entre membros do time, stakeholders, clientes, etc) é comumente feita de forma livre (com o tal do GDD – o Game Design Document). Porém, há quem trabalhe em formalismos para a descrição de mecânicas, por exemplo.

Por exemplo, um colega na Universidade de São Paulo propôs uma linguagem para a análise e especificação de mecânicas elementares (que ele chamou de “componentes”) em jogos. Informações do trabalho dele podem ser encontradas neste artigo.

Observe, porém, que essa discussão é bem mais polêmica. O processo de Game Design é bastante criativo, e por isso mesmo produzindo um sistema de software, há quem diga que tentativas de formalizar regras só servem para analisar jogos existentes ou fazer variações e combinações destes, mas dificilmente seriam úteis para a construção de novos jogos, com temáticas e mecânicas inovadoras.

Nenhuma séria com os requisitos colocados na pergunta. Até existe uma linguagens de brinquedo que facilitam a criação de jogos, mas só dá para fazer coisas bem toscas. É praticamente pra criança brincar de fazer jogo (exemplo). Se quer fazer jogo sério de alto desempenho se usa linguagens de propósito geral com bibliotecas específicas para jogos. Nem faz muito sentido ter uma linguagem específica. Biblioteca faz sentido. Ferramenta de apoio faz sentido (muita coisa mais ligada aos ativos do que à programação).

Mesmo se pegar uma linguagem como BlitzBASIC, o que diferencia ela é a biblioteca e não a linguagem.

Existem linguagens que foram adaptadas para facilitar o uso por desenvolvedores de jogos, mas no fundo ainda são linguagens de propósito geral que servem a uma aplicação/jogo específico, não é o que está procurando. Um exemplo é QuakeC. Outra é UnrealScript.

Experimento é possível que exista, mas será mais para provar que pode ser feito e depois praticamente descartado. O mercado não precisa disto. Precisa de melhores bibliotecas.

É improvável que venha existir ou pelo menos ter força no mercado. O que existe está adequado. Não querendo usar PHP para fazer jogos de alto desempenho gráfico já é um bom começo

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *