Existe algum mecanismo de jogo usando uma linguagem de programação funcional semelhante ao Scheme, Common Lisp, Clojure ou JavaScript?
Eu tentei o Unity3D, mas o "JavaScript" deles não é realmente JavaScript, é fortemente digitado e não é funcional.
functional
MaiaVictor
fonte
fonte
var add : Func<int, int, int> = ...
Respostas:
Existe o LambdaCube que está escrito em Haskell (não é exatamente o mecanismo do jogo, mas sim o mecanismo gráfico).
fonte
Você sempre pode usar f # ou iron python (sim, eu sei, python não é funcional) ou qualquer outra linguagem .netified com XNA na plataforma .net.
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
editar: Mais um mecanismo, escrito em Lisp: http://code.google.com/p/blackthorn-engine/
fonte
Não tenho uma resposta para a pergunta escrita, mas acredito que você esteja tentando perguntar "por que não existem mecanismos de jogo mais funcionais" em vez de procurar um específico para usar. Se estiver correto, você deve reformular a pergunta. Se não ... me ignore. :)
Uma abordagem funcional pura não é adequada para jogos. Jogos (e gráficos, física e IA) e basicamente tudo sobre mudanças de estado. A abordagem funcional correta para esses problemas seria calcular um novo estado inteiro uma vez por loop, o que terá uma penalidade de desempenho muito severa em comparação com a codificação mais direta de como o hardware real funciona.
É por esse motivo que você não vê nenhum mecanismo de jogo de estilo funcional em produção. É simplesmente o paradigma de programação errado para a maioria dos problemas que um mecanismo de jogo deve resolver. É o paradigma de programação errado para a maioria dos problemas que precisam ser resolvidos também em scripts de nível superior e código de lógica de jogos. Embora seja quase certamente possível criar um mecanismo de jogo funcional, seria lento, difícil e complicado de usar e não serviria a outro propósito real além de ser uma demonstração / brinquedo elegante para mostrar.
Isso não quer dizer que a programação funcional não tenha lugar nos jogos. Eu uso um estilo muito funcional de codificação (quando apropriado) em C #, Unity JavaScript e até C ++ 11. Alguns problemas muito específicos são melhores ou, pelo menos, mais facilmente resolvidos com um estilo funcional, e a maioria das linguagens populares hoje suporta essa forma de programação, embora de uma maneira mais complicada do que as linguagens funcionais "reais". Normalmente, esses problemas resolvidos com abordagens funcionais não estão no código do mecanismo principal nem no código que é executado no próprio jogo. A codificação funcional pode ser bastante benéfica para ferramentas e processamento de dados offline (modelos de panificação e outros ativos, por exemplo). Também é discutível que a programação da GPU seja vagamente funcional na forma como os algoritmos são escritos,
É claro que ainda pode ser melhor evitar abordagens funcionais fora de circunstâncias muito específicas, pois você deseja que essas ferramentas offline sejam o mais rápido possível. As linguagens funcionais se destacam no paralelismo, o que é bom para alguns problemas, mas as abstrações do hardware tendem a levar a um desempenho de thread único muito ineficiente. (Idiomas como o LISP se saem bem aqui porque não são totalmente funcionais e, na verdade, o Common LISP é multiparadigma.) A pior coisa para um mecanismo de jogo ou kit de ferramentas relacionado é o gargalo da iteração de conteúdo. Um mecanismo sofisticado com muitos recursos que leva horas de artistas ou designers de nível para fazer o que poderia ser feito em 5 minutos (ou idealmente, quase instantaneamente) levará a jogos de baixa qualidade ou cancelamento devido à escalada do orçamento.
fonte
A empresa Naugthy Dog usou a List em seus motores de jogo e foi chamada de Game Oriented Assembly Lisp.
Algumas informações podem ser encontradas aqui: http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
Alguns exemplos de código: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html
Não está disponível para uso público.
fonte