Existe algum mecanismo de jogo usando uma linguagem de programação funcional? [fechadas]

10

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.

MaiaVictor
fonte
2
Estou usando o ThreeJS, mas, embora esteja cheio de grandiosidade, a falta de uma comunidade ativa e a documentação são um problema sério.
MaiaVictor
5
Por que você deseja programar em uma linguagem de programação funcional? Qual é o problema que você está enfrentando? Por favor seja mais específico. Tal como está, essa pergunta é geral demais para gerar uma resposta correta e é suscetível de gerar uma lista de respostas (todas igualmente "corretas") como esta: - Que tal o Clojure combinado com qualquer mecanismo de jogo Java? - Que tal adotar um estilo de programação funcional em uma linguagem que não é funcional por si só? (Leia Programação funcional em C ++ por Carmack.) - etc.
Eric
2
O Javascript do Unity3D é tão funcional quanto o Javascript comum , você só precisa usar os tipos C # 4.0, algo como:var add : Func<int, int, int> = ...
fableal
2
Consulte as perguntas frequentes sobre as perguntas "Qual tecnologia usar". Esta pergunta, como mostram as respostas, está apenas gerando uma lista. Não é construtivo, pois não existe uma resposta correta (exceto "Sim, existe"). Este não é o lugar para compilar listas.
MichaelHouse
2
Esse é um tipo de problema da "ferramenta certa para o trabalho certo". A programação funcional é fortemente focada em minimizar e eliminar, sempre que possível, o estado mutável. Isso pode funcionar bem para certas classes de aplicativos, mas é completamente antitético à maneira como praticamente qualquer jogo funciona.
Mason Wheeler

Respostas:

7

Existe o LambdaCube que está escrito em Haskell (não é exatamente o mecanismo do jogo, mas sim o mecanismo gráfico).

tumdum
fonte
2
Este também pode ser de interesse para você (comentary geral de Tim Sweeney da Epic)
tumdum
Ligação interessante, há um ppt aqui
bobobobo
2

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.

Sean Middleditch
fonte
1
Veja: Biblioteca Limpa de Jogos (Limpa) e Nikki e os Robôs (Haskell).
Andres F.
1
Essa resposta está errada e parece basear-se em uma compreensão muito pobre das linguagens funcionais reais.
CA McCann
1
Você tem algum contador de pontos real?
Sean Middleditch
4
... Quanta experiência você possui em jogos de qualidade industrial em idiomas funcionais? Se você tem experiência, compartilhe-a. Faça declarações com explicações e justificativas, sem apelar para perícia ou autoridade ou acusações pessoais. A probabilidade desse tipo de discussão indignada e brigas pessoais é exatamente o motivo pelo qual essa questão foi encerrada.
quer
4
Você está colocando palavras na minha boca. Não estou declarando meu nível de experiência porque sua opinião sobre meus conhecimentos é totalmente irrelevante para o tópico. Não afirme que você não tem tempo para expor fatos enquanto tem tempo para atacar os níveis de habilidades pessoais. Você provavelmente tem correções reais, mas precisa indicá-las. "Esse cara está errado", não é uma resposta valiosa para ninguém. Posso apenas afirmar que você está errado, e então temos um ciclo interminável e sem sentido de discussões. Por favor, diga por que uma resposta está errada.
2141313 Sean Middleditch
0

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.

bcsanches
fonte
Se você olhar para a descrição da Wikipedia, rapidamente se torna aparente que o GOAL dificilmente era uma linguagem funcional, apesar da ascendência LISP.
Mason Wheeler