Wie gut funktionieren funktionale Sprachen unter Android?

10

Dies ist ein Sonderfall dieser Frage , der meiner Meinung nach besonders relevant ist.

Ich arbeite an einem Spiel für Android und plane, Scala mit libgdx zu verwenden. Ich habe vor, ein performantes Spiel zu machen, aber nicht unbedingt ein hyper-performantes Spiel. Ich habe die Dokumentation von libgdx zur Garbage Collection gesehen , und das lässt mich denken:

  1. Funktionale Programmierung impliziert viele unveränderliche Objekte.
  2. Um ein Objekt zu mutieren, muss daher ein neues Objekt erstellt werden.
  3. Auf diese Weise wird bei vielen Objekten Müll gesammelt, was die Leistung beeinträchtigt.

Ist das ein unüberwindbares Problem? Gibt es andere wichtige Probleme mit dem Funktionsstil unter Android?

Jason Baker
quelle

Antworten:

3

Sie können mit Scala gut zurechtkommen, möchten aber wirklich nicht zu häufig neue Objekte zuweisen . GC ohne Pausen sind immer noch kein Mythos (auf Android), und Gamer mögen es nicht, wenn Ihr Spiel Pannen hat. Dies bedeutet jedoch nicht, dass Sie keinen Nutzen aus der Verwendung einer ernsthafteren Sprache ziehen können - in der Tat. Und Sie werden mit "funktionalem Stil" einverstanden sein, der nicht in der Hauptspielschleife stattfindet. Außerdem muss Scala unter Android selbst mit einigen zusätzlichen Build-Problemen kämpfen, aber sobald Sie es gelernt haben, ist es erträglich. Und es ist nicht sehr genau, Scala als funktionale Sprache zu bezeichnen, es hat jedoch einige Funktionen im Zusammenhang mit der funktionalen Programmierung.

Anzeigename
quelle
2

Zum Spielen? Vermeiden Sie funktionale Sprachen. Ihr gesamtes Paradigma passt nicht gut zu Spielen. Prozedurale OOP-Sprachen passen besser zu den Anforderungen von Spielen an häufige Statusänderungen, explizites Speicher- und Ressourcenmanagement, Abstraktion von Daten und Modellen, die an vielen Stellen nützlich sind, datenorientiertes Design in einigen Systemen und so weiter. Funktionselemente sind eine Sache, eine echte funktionale Sprache eine andere ist.

Die leistungsstärkste Funktionssprache für Android bietet immer noch eine schlechtere Entwicklungserfahrung als Java oder C ++. Nicht weil dies rundum bessere Sprachen sind, sondern weil sie für die jeweilige Aufgabe besser sind. Richtiges Werkzeug für den Job und das alles.

Dies gilt für Mobilgeräte, PCs, Konsolen usw. Niemand benutzt funktionale Sprachen für Spiele. Naughty Dog verwendet LISP für die Skripterstellung , jedoch nicht den Kerncode des Spiels. Sie können nicht. Es würde nicht funktionieren, wenn sie es versuchen würden.

Am nächsten kommen die meisten Shader, die in gewisser Weise funktionieren, aber in hochprozeduralen Sprachen wie HLSL oder GLSL geschrieben sind.

Sean Middleditch
quelle
> Zum Spielen? Vermeiden Sie funktionale Sprachen. Interessant, dass die Google AI Challenge 2010 von einem Lisp-Bot gewonnen wurde. Könnte nicht gut zum Schreiben von Spielen sein, aber es ist anscheinend ziemlich praktisch, wenn es darum geht, sie zu spielen. semanticweb.com/…
Sicher. Anderer Anwendungsfall. LISP ist üblich für echte KI, was wenig mit Spiel-KI zu tun hat. Bei der Spiel-KI geht es darum, effizient Entscheidungen zu treffen, die den Spieler dazu verleiten, Intelligenz zu sehen und ein unterhaltsames Spiel zu machen. Bei echter KI geht es darum, tatsächlich intelligente Entscheidungen zu treffen, menschliche Meinungen sind verdammt (klug kann und sieht manchmal dumm aus, da menschliche Beobachter oft nicht das ganze Bild sehen wie die KI).
Sean Middleditch
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.Eigentlich habe ich einige Artikel von hochkarätigen Spieleentwicklern gelesen, die ein Interesse an funktionaler Programmierung zum Ausdruck bringen. Es gab eine von Tim Sweeney scribd.com/doc/5687/… und John Carmack scheint ein aktives Interesse an der Bewertung funktionaler Sprachen zu haben und macht derzeit eine Portierung von Wolfenstein 3d in Haskell, tinyurl.com/cnzx57u
James McMahon
Haben Sie auch ein Zitat für Naughty Dog, das nur Lisp für Skripte verwendet? Ich hatte den Eindruck, dass sie einen eigenen Dialekt von Lisp hatten, mit einem benutzerdefinierten Compiler, der auf die PS2-Hardware abzielte, und dass sie den Großteil der Serien Jax und Dexter darin geschrieben hatten. EDIT: Egal, fand es, 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