Dans quelle mesure les langages fonctionnels fonctionnent-ils sur Android?

10

Il s'agit d'un cas particulier de cette question qui me semble particulièrement pertinent.

Je travaille sur un jeu pour Android et je prévois d'utiliser Scala avec libgdx. Je prévois de faire un jeu performant, mais pas nécessairement un jeu hyper-performant. J'ai vu la documentation de libgdx sur Garbage Collection , et cela me fait penser:

  1. La programmation fonctionnelle implique beaucoup d'objets immuables.
  2. Par conséquent, la mutation d'un objet nécessite de créer un nouvel objet.
  3. Ainsi, de nombreux objets sont récupérés, ce qui dégrade les performances.

Est-ce un problème insurmontable? Y a-t-il d'autres problèmes importants avec le style fonctionnel sur Android?

Jason Baker
la source

Réponses:

3

Vous pouvez être bien avec Scala, mais vous ne voulez vraiment pas allouer trop fréquemment de nouveaux objets . GC sans pauses n'est toujours plus qu'un mythe (sur Android), et les joueurs n'aiment pas quand votre jeu pépine. Mais cela ne signifie pas que vous ne pouvez tirer aucun avantage d'utiliser un langage plus sérieux - en effet, vous le pouvez. Et vous serez OK avec un "style fonctionnel" qui ne se déroule pas dans la boucle de jeu principale. En outre, Scala sur Android lui-même nécessite de lutter contre certains problèmes de construction supplémentaires, mais une fois que vous l'avez appris, c'est supportable. Et il n'est pas très précis de nommer Scala un langage fonctionnel, il a cependant quelques fonctionnalités liées à la programmation fonctionnelle.

Afficher un nom
la source
2

Pour les jeux? Évitez les langages fonctionnels. Tout leur paradigme ne correspond pas bien aux jeux. Les langages OOP procéduraux correspondent mieux aux besoins des jeux de changements d'état fréquents, de gestion explicite de la mémoire et des ressources, d'abstraction des données et du modèle utiles à de nombreux endroits, de conception orientée données dans certains systèmes, etc. Les éléments fonctionnels sont une chose, un vrai langage fonctionnel en est une autre.

Le langage fonctionnel le plus performant pour Android donnera toujours une expérience de développement pire que Java ou C ++. Non pas parce que ce sont de meilleures langues partout, mais parce qu'elles conviennent mieux à la tâche spécifique à accomplir. Le bon outil pour le travail et tout ça.

Cela est vrai sur mobile, PC, consoles, etc. Personne n'utilise de langages fonctionnels pour les jeux. Naughty Dog utilise LISP pour les scripts , mais pas le code de jeu principal. Ils ne peuvent pas. Cela ne fonctionnerait pas s'ils essayaient.

Les shaders les plus proches sont les shaders, qui sont fonctionnels à certains égards mais écrits dans des langages hautement procéduraux comme HLSL ou GLSL.

Sean Middleditch
la source
> Pour les jeux? Évitez les langages fonctionnels. Il est intéressant de noter que le Google AI Challenge 2010 a été remporté par un bot Lisp. Cela pourrait ne pas être bon pour écrire des jeux, mais c'est apparemment assez pratique pour les jouer. semanticweb.com/…
Sûr. Cas d'utilisation différent. LISP est commun à la véritable IA, qui n'a pas grand-chose à voir avec l'IA de jeu. L'IA de jeu consiste à faire des choix efficaces qui trompent le joueur en lui permettant de voir l'intelligence et de créer un jeu amusant. La vraie IA consiste à prendre des décisions réellement intelligentes, les opinions humaines soient damnées (la puce peut parfois sembler stupide, car les observateurs humains ne voient souvent pas l'image entière comme l'IA).
Sean Middleditch
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.En fait, j'ai lu des articles de développeurs de jeux de haut niveau exprimant un intérêt pour la programmation fonctionnelle. Il y en avait un par Tim Sweeney scribd.com/doc/5687/… et John Carmack semble avoir un intérêt actif dans l'évaluation des langages fonctionnels et fait actuellement un portage de Wolfenstein 3d à Haskell, tinyurl.com/cnzx57u
James McMahon
Avez-vous également une citation pour Naughty Dog utilisant uniquement Lisp pour les scripts? J'avais l'impression qu'ils avaient un dialecte maison personnalisé de Lisp, avec un compilateur personnalisé ciblant le matériel PS2 et qu'ils y avaient écrit la majorité des séries Jax et Dexter. EDIT: Ça ne fait rien , 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