Com qual linguagem funcional é mais adequada a criação de jogos? [fechadas]

19

Estou de olho nas linguagens de programação funcionais há algum tempo, mas estou hesitando em realmente entrar nelas. Mas acho que está na hora de pelo menos começar a olhar nessa direção para me certificar de que estou pronta para qualquer coisa.

Já vi falar de Haskell, F #, Scala e assim por diante. Mas não tenho idéia das diferenças entre os idiomas e suas comunidades, nem me importo particularmente; exceto no contexto de desenvolvimento de jogos.

Então, do ponto de vista do desenvolvimento de jogos, qual linguagem de programação funcional possui os recursos mais adequados para a programação de jogos? Por exemplo, existem bibliotecas / mecanismos / estruturas / estruturas de desenvolvimento de jogos funcionais ou mecanismos gráficos para linguagens funcionais? Existe uma linguagem que lida com certas estruturas de dados que são comumente usadas no desenvolvimento de jogos?

Conclusão: qual linguagem de programação funcional é melhor para a programação funcional de jogos e por quê?

Acredito / espero que esta pergunta declare uma melhor linguagem clara, portanto, não a marquei CW, apesar de sua tendência subjetiva.

Ricket
fonte
2
"Como assim, jogos 2D ou 3D?" "Hein? Eu não sei - aieeee "
Ciclope
@ Cyclops uh, o que? Eu não entendo ...
Ricket
@Ricket, em parte foi um pedido para esclarecer que tipo de jogo você está falando, 2D ou 3D (e talvez em tempo real ou baseado em turnos). Em parte, foi uma piada de Monty-Python que obscureceu a primeira parte. Wups. :) E eu acho que especificar o tipo de jogo é útil - a menos que haja uma única linguagem funcional que seja perfeita para tudo , então diferentes idiomas podem ser melhores em coisas diferentes.
Ciclope
Não acredito que o 2D ou o 3D tenham impacto na escolha de um idioma, exceto pela variedade de mecanismos / bibliotecas disponíveis para um idioma. Pessoalmente, estou interessado em 2D e 3D, por isso não pensei em um ou outro ao escrever esta pergunta. Porém, no geral, os jogos 2D e 3D compartilham muitos sistemas e estruturas de dados comuns (por exemplo, áudio, entrada, IA, estrutura do programa, loop do jogo) e existem muitos jogos em 3D que podem ser portados para 2D ou vice-versa. E sim, eu não vi Monty Python, por isso não entendi nada. :)
Ricket 28/07/10
1
Eu não acho que haja uma resposta definitiva sobre a melhor linguagem.
Wei Hu

Respostas:

12

F # fazer parte da família Microsofts .net tem acesso ao XNA, que é uma base fantástica para criar jogos. Um pouco de pesquisa mostra alguns tutoriais, vídeos e artigos. Os excelentes documentos XNA devem ajudar também.

Houve algum movimento nos jogos para Haskell também, veja aqui . Você provavelmente estará usando ligações openGL.

Como o Scala é reproduzido em Java, ele se integra a todos os mecanismos / ligações Java disponíveis, consulte esta publicação do SO .

Eu acho que se resume a preferência, enquanto eu só brinquei com Haskell, eu imaginaria que cada linguagem funcional tem suas próprias idiossincrasias. Pode valer a pena preparar um pequeno jogo de teste em cada um e ver qual deles se sente melhor para você.

Como eu disse, tenho apenas uma experiência mínima com Haskell, então não posso comentar sobre o melhor, mas esses recursos devem ajudar você a começar.

cmjreyes
fonte
2
Entre os problemas com as JVMs e a imaturidade da implementação do compilador, achei o desempenho do Scala inaceitável ao usar um estilo funcional, mesmo que a própria linguagem o suporte bem. Ele acaba sendo tão rápido quanto, digamos, Python ou Ruby, não F # ou OCaml. (Velocidade do Scala é competitivo para mais estilos OO / processual.)
Eu realmente tenho um projeto F # correndo XNA (que é uma janela XNA vazio com azul-violáceo, apenas o código foi F # e não C #.
RCIX
8

Eu diria Lisp.

Ele foi usado em jogos como uma linguagem de script, pelo menos na Naughty Dog (ou era eu acho), e é uma linguagem muito madura.

A vantagem do Lisp está na desserialização, que é uma parte importante do que chamamos de gerenciamento de ativos. Desserializar o lisp é trivial, o código e os dados são um. Isso facilita a criação de um formato de arquivo para ativos e comportamentos. Não é como você em json / xml / yaml / bin e um arquivo F # para AI. Você pode salvar tudo como expressões s, o que simplificará muito o pipeline de ativos.

Jonathan Fischoff
fonte
TBH eu recomendaria contra isso. Linguagens de script não são apenas para o desenvolvedor usar; Os modders quererão modificar o jogo, e não há nada que os assuste mais rapidamente do que (() ()))) () ((()). Além disso, mesmo no que diz respeito às linguagens funcionais, o Lisp é esotérico.
RCIX
7
Se assustar os modders é algo que o preocupa, optar por uma linguagem funcional provavelmente não é o movimento certo.
Paul Wicks
3
@RCIX & @Joe - Necro poderes ATIVAR. De qualquer forma, o Scheme é usado como uma linguagem de ensino. O SICP é algo como meio grau de CS em um livro e é usado por várias escolas (incluindo o MIT até recentemente), e o HTDP é uma introdução menos explícita.
Jesse Millikan
1
@RCIX & Joe, de fato. Lisp & Scheme são os idiomas introdutórios em muitas universidades.
Oberhamsi #
1
Lisp não é algo que você deseja usar. Naughty Dog tinha ONE, único programador Lisp e quando ele saiu, eles fizeram a transição de todos os seus mecanismos para C ++. Não faço ideia por um motor obsoleto de uma empresa é arrastado para fora como um exemplo brilhante o tempo todo =)
Patrick Hughes
8

Depois de ganhar alguma experiência prática, eu votaria no Clojure - já escrevi um joguinho nele e planejava fazer mais.

Razões:

  • Produtividade - Clojure é uma linguagem dinâmica. Possui ótimos recursos para desenvolvimento interativo no estilo REPL, por exemplo, você pode usar o REPL para consultar ou alterar o estado dentro de uma instância de aplicativo de jogo em execução. O código em Clojure também é muitas vezes ridiculamente conciso. Eu acho que sou 3-5 vezes mais produtivo no Clojure do que em Java ou C #.
  • Impuro - enquanto aprecio a beleza e a elegância de linguagens funcionais puras como Haskell, a programação de jogos é uma busca confusa onde o pragmatismo vence. Quero poder colocar efeitos colaterais em minhas funções quando precisar deles, e Clojure permite isso. Dito isto, o estilo idiomático de Clojure deve ser puramente funcional na maioria das vezes .
  • Metaprogramação - a herança Lisp da Clojure como uma linguagem homoicônica o torna ótimo para metaprogramação / geração de código. É fácil "estender o idioma" para criar seus próprios DSLs ou eliminar o biolerplate. Você pode usar facilmente o Clojure como sua própria linguagem de script de jogos, e a compilação dinâmica de código significa que seus scripts serão executados tão rápido quanto o seu mecanismo de jogo principal.
  • Acesso a bibliotecas Java . Você pode usar todas as bibliotecas de som / gráficos / AI / rede do Java, o que é uma grande vantagem em relação à maioria das outras linguagens funcionais (onde você precisará escrevê-las do zero ou desenvolver muitos códigos de interface complicados). Isso pode ser um salva-vidas.
  • Plataforma cruzada - isso é gratuito para rodar na JVM, mas é um bônus interessante.
  • Desempenho - para uma linguagem funcional dinâmica, o Clojure é o mais rápido possível. É sempre JIT compilado, nunca interpretado. com a otimização inteligente, você pode igualar a velocidade do código Java puro e de baixo nível no Clojure. Por exemplo, você pode usar matrizes primitivas Java ou fornecer dicas de tipo para garantir que o compilador produz chamadas de função com tipo estatístico em código crítico de desempenho.
  • Concorrência - O Clojure possui um ótimo modelo para gerenciar o estado simultâneo, suportado por um impressionante sistema de memória transacional de software. Vale a pena assistir a este vídeo para obter mais informações sobre como isso funciona.

A única vez que eu não faria consideraria o Clojure seria se estivesse escrevendo um jogo graficamente intensivo de ponta em que você precisa de desempenho de ponta (onde ainda acho que você precisa de C / C ++).

Mikera
fonte