¿Existe algún motor de juego que use un lenguaje de programación funcional similar a Scheme, Common Lisp, Clojure o JavaScript?
He probado Unity3D pero su "JavaScript" no es en realidad JavaScript, está fuertemente tipado y no es funcional.
functional
MaiaVictor
fuente
fuente
var add : Func<int, int, int> = ...
Respuestas:
Hay LambdaCube que está escrito en Haskell (no es exactamente un motor de juego, sino más bien un motor de gráficos).
fuente
Siempre puede usar f # o iron python (sí, lo sé, python no es funcional) o cualquier otro lenguaje .netified con XNA en la plataforma .net.
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
editar: Un motor más, escrito en Lisp: http://code.google.com/p/blackthorn-engine/
fuente
No tengo una respuesta a la pregunta tal como está escrita, pero creo que posiblemente estés tratando de preguntarte "por qué no hay motores de juego más funcionales" en lugar de buscar uno específico para usar. Si eso es correcto, debe reformular la pregunta. Si no ... ignórame. :)
Un enfoque funcional puro no es una buena opción para los juegos. Juegos (y gráficos, física e IA) y básicamente todo sobre cambios de estado. El enfoque funcional correcto para estos problemas sería calcular un estado completamente nuevo una vez por bucle, lo que tendrá una penalización de rendimiento muy severa en comparación con la codificación más directa de cómo funciona el hardware real.
Es por esa razón que no ves ningún motor de juego de estilo funcional en producción. Es simplemente el paradigma de programación incorrecto para la mayoría de los problemas que un motor de juego debe resolver. Es el paradigma de programación incorrecto para la mayoría de los problemas que también deben resolverse en scripting de nivel superior y código de lógica de juego. Si bien es casi seguro que sea posible hacer un motor de juego funcional, sería lento, difícil y engorroso de usar, y no tendría otro propósito real que ser una demostración / juguete ordenado para presumir.
Eso no quiere decir que la programación funcional no tenga un lugar en algún lugar de los juegos. Utilizo un estilo de codificación muy funcional (cuando corresponda) en C #, Unity JavaScript e incluso C ++ 11. Algunos problemas muy específicos son mejores o al menos más fáciles de resolver con un estilo funcional, y la mayoría de los lenguajes populares actuales admiten esa forma de programación, aunque de una manera más engorrosa que los lenguajes funcionales "reales". Por lo general, estos problemas resueltos con enfoques funcionales no están en el código del motor central, ni en el código que se ejecuta en el juego en sí. La codificación funcional puede ser bastante beneficiosa para las herramientas y el procesamiento de datos fuera de línea (modelos de horneado y otros activos, por ejemplo). También es discutible que la programación de GPU sea vagamente funcional en cómo se escriben los algoritmos,
Por supuesto, puede ser mejor evitar enfoques funcionales fuera de circunstancias muy específicas, ya que desea que estas herramientas fuera de línea sean lo más rápidas posible. Los lenguajes funcionales se destacan en el paralelismo, lo cual es bueno para algunos problemas, pero las abstracciones del hardware tienden a conducir a un rendimiento de un solo hilo muy ineficiente. (Los lenguajes como LISP funcionan bien aquí porque no son puramente funcionales, y de hecho Common LISP es multi-paradigma). Lo peor para un motor de juego o un kit de herramientas relacionado es ser un cuello de botella para la iteración de contenido. Un motor elegante con muchas características que lleva a los artistas o diseñadores de niveles horas para hacer lo que se podría hacer en 5 minutos (o idealmente, casi al instante) solo conducirá a juegos de baja calidad o cancelación debido a la escalada del presupuesto.
fuente
La compañía Naugthy Dog usó List en sus motores de juego y se llamaba Game Oriented Assembly Lisp.
Puede encontrar información aquí: http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
Algunos ejemplos de código: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html
No está disponible para uso público.
fuente