Gibt es eine Spiel-Engine, die eine funktionale Programmiersprache verwendet, die Scheme, Common Lisp, Clojure oder JavaScript ähnelt?
Ich habe Unity3D ausprobiert, aber ihr "JavaScript" ist eigentlich kein JavaScript, ist stark typisiert und funktioniert nicht.
functional
MaiaVictor
quelle
quelle
var add : Func<int, int, int> = ...
Antworten:
Es gibt LambdaCube, der in Haskell geschrieben ist (es ist nicht gerade eine Spiel-Engine, sondern eher eine Grafik-Engine).
quelle
Sie können jederzeit f # oder Iron Python (ja, ich weiß, Python funktioniert nicht) oder eine andere .netified-Sprache mit XNA auf der .net-Plattform verwenden.
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
Bearbeiten: Eine weitere Engine, geschrieben in Lisp: http://code.google.com/p/blackthorn-engine/
quelle
Ich habe keine Antwort auf die Frage wie geschrieben, aber ich glaube, Sie versuchen möglicherweise zu fragen, "warum es keine funktionaleren Spiel-Engines gibt", anstatt nach einer bestimmten zu suchen. Wenn das richtig ist, sollten Sie die Frage umformulieren. Wenn nicht ... ignoriere mich. :) :)
Ein rein funktionaler Ansatz passt nicht zu Spielen. Spiele (und Grafiken, Physik und KI) und im Grunde alles über Zustandsänderungen. Der richtige funktionale Ansatz für diese Probleme wäre, einmal pro Schleife einen völlig neuen Zustand zu berechnen, was eine sehr schwerwiegende Leistungseinbuße mit sich bringt, verglichen mit einer direkteren Codierung der tatsächlichen Hardware.
Aus diesem Grund sehen Sie in der Produktion keine funktionalen Game-Engines. Es ist einfach das falsche Programmierparadigma für die meisten Probleme, die eine Spiel-Engine lösen soll. Es ist das falsche Programmierparadigma für die meisten Probleme, die auch in übergeordneten Skripten und im Spielelogikcode gelöst werden müssen. Während es mit ziemlicher Sicherheit möglich ist, eine funktionierende Spiel-Engine zu erstellen, wäre ihre Verwendung langsam, schwierig und umständlich und würde keinem anderen Zweck dienen, als eine ordentliche Demo / ein Spielzeug zu sein, um sich zu präsentieren.
Das heißt nicht, dass funktionale Programmierung keinen Platz in Spielen hat. Ich verwende einen sehr funktionalen Codierungsstil (wo zutreffend) in C #, Unity JavaScript und sogar C ++ 11. Einige sehr spezifische Probleme lassen sich am besten oder zumindest am einfachsten mit einem funktionalen Stil lösen, und die meisten gängigen Sprachen unterstützen diese Form der Programmierung heutzutage, wenn auch umständlicher als "echte" funktionale Sprachen. Normalerweise sind diese mit funktionalen Ansätzen gelösten Probleme weder im Code der Kern-Engine noch im Code enthalten, der im Spiel selbst ausgeführt wird. Die funktionale Codierung kann für Tools und die Offline-Datenverarbeitung (z. B. Backmodelle und andere Assets) von großem Vorteil sein. Es ist auch fraglich, ob die GPU-Programmierung bei der Schreibweise von Algorithmen vage funktioniert.
Natürlich kann es immer noch am besten sein, funktionale Ansätze außerhalb ganz bestimmter Umstände zu vermeiden, da diese Offline-Tools so schnell wie möglich sein sollen. Funktionale Sprachen zeichnen sich durch Parallelität aus, was für einige Probleme gut ist, aber die Abstraktionen von der Hardware führen tendenziell zu einer sehr ineffizienten Single-Threaded-Leistung. (Sprachen wie LISP machen sich hier gut, weil sie nicht rein funktional sind, und tatsächlich ist Common LISP ein Multi-Paradigma.) Das absolut Schlimmste für eine Game Engine oder ein verwandtes Toolkit ist, ein Engpass für die Iteration von Inhalten zu sein. Eine ausgefallene Engine mit vielen Funktionen, für die Künstler oder Leveldesigner Stunden benötigen, um das zu tun, was in 5 Minuten (oder im Idealfall fast sofort) erledigt werden kann, führt aufgrund der Budgeteskalation nur zu Spielen von geringer Qualität oder zur Stornierung.
quelle
Die Firma Naugthy Dog verwendete List für ihre Game Engines und hieß Game Oriented Assembly Lisp.
Einige Informationen finden Sie hier: http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
Einige Codebeispiele: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html
Es ist nicht für den öffentlichen Gebrauch verfügbar.
quelle