¿Qué tan bien funcionan los lenguajes funcionales en Android?

10

Este es un caso especial de esta pregunta que creo que es particularmente pertinente.

Estoy trabajando en un juego para Android y planeo usar Scala con libgdx. Estoy planeando hacer un juego con rendimiento, pero no necesariamente un juego hiper-rendimiento. Vi la documentación de libgdx sobre Garbage Collection , y esto me hace pensar:

  1. La programación funcional implica muchos objetos inmutables.
  2. Por lo tanto, mutar un objeto requiere hacer un nuevo objeto.
  3. Por lo tanto, se recolectan muchos objetos, lo que degrada el rendimiento.

¿Es este un problema insuperable? ¿Hay otros problemas importantes con el estilo funcional en Android?

Jason Baker
fuente

Respuestas:

3

Puede estar bien con Scala, pero realmente no desea asignar nuevos objetos con demasiada frecuencia . GC sin pausas todavía no es más que un mito (en Android), y a los jugadores no les gusta cuando su juego falla. Pero esto no significa que no pueda beneficiarse del uso de un lenguaje más serio; de hecho, puede hacerlo. Y estará de acuerdo con el "estilo funcional" que no tiene lugar en el ciclo principal del juego. Además, Scala en Android requiere luchar con algunos problemas de compilación adicionales, pero una vez que lo aprende, es soportable. Y no es muy preciso nombrar a Scala un lenguaje funcional, aunque tiene algunas características relacionadas con la programación funcional.

Nombre para mostrar
fuente
2

Para juegos? Evita los lenguajes funcionales. Todo su paradigma no encaja bien con los juegos. Los lenguajes procedimentales de OOP se ajustan mejor a las necesidades de los juegos de cambios frecuentes de estado, memoria explícita y gestión de recursos, abstracción de datos y modelos útiles en muchos lugares, diseño orientado a datos en algunos sistemas, etc. Los elementos funcionales son una cosa, un verdadero lenguaje funcional es otra.

El lenguaje funcional de mejor rendimiento para Android aún ofrecerá una peor experiencia de desarrollo que Java o C ++. No porque sean mejores idiomas en general, sino porque son mejores para la tarea específica en cuestión. La herramienta adecuada para el trabajo y todo eso.

Esto es cierto en dispositivos móviles, PC, consolas, etc. Nadie usa lenguajes funcionales para juegos. Naughty Dog usa LISP para las secuencias de comandos , pero no el código central del juego. No pueden No funcionaría si lo intentaran.

Lo más cercano a la mayoría de las personas son los sombreadores, que son funcionales de alguna manera pero escritos en lenguajes altamente procesales como HLSL o GLSL.

Sean Middleditch
fuente
> ¿Para juegos? Evita los lenguajes funcionales. Es interesante que el Google AI Challenge 2010 fue ganado por un bot de Lisp. Puede que no sea bueno para escribir juegos, pero aparentemente es bastante útil cuando se trata de jugarlos. semanticweb.com/…
Seguro. Caso de uso diferente. LISP es común para la IA real, que tiene poco que ver con la IA del juego. Game AI se trata de tomar decisiones de manera eficiente que engañan al jugador para que vea inteligencia y haga un juego divertido. La IA real se trata de tomar decisiones realmente inteligentes, las opiniones humanas sean condenadas (la inteligencia puede parecer tonta a veces, ya que los observadores humanos a menudo no ven la imagen completa como lo hace la IA).
Sean Middleditch
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.En realidad, he leído algunos artículos de desarrolladores de juegos de alto perfil que expresan un interés en la programación funcional. Hubo uno de Tim Sweeney scribd.com/doc/5687/… y John Carmack parece tener un interés activo en la evaluación de lenguajes funcionales y actualmente está haciendo un puerto de Wolfenstein 3d en Haskell, tinyurl.com/cnzx57u
James McMahon
¿También tienes una cita para Naughty Dog que solo usa Lisp para las secuencias de comandos? Tenía la impresión de que tenían un dialecto interno personalizado de Lisp, con un compilador personalizado dirigido al hardware de PS2 y que habían escrito la mayoría de las series Jax y Dexter en él. EDITAR: No importa encontrarlo, gamasutra.com/view/feature/131394/… Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
James McMahon