Mit welcher funktionalen Sprache lassen sich Spiele am besten erstellen? [geschlossen]

19

Ich habe eine Weile ein Auge auf funktionierende Programmiersprachen geworfen, zögere aber, mich darauf einzulassen. Aber ich denke, es ist an der Zeit, zumindest einen Blick in diese Richtung zu werfen, um sicherzugehen, dass ich zu allem bereit bin.

Ich habe gesehen, wie von Haskell, F #, Scala und so weiter gesprochen wurde. Aber ich habe keine Ahnung von den Unterschieden zwischen den Sprachen und ihren Gemeinschaften und kümmere mich auch nicht besonders darum. außer im Rahmen der Spieleentwicklung.

Welche funktionale Programmiersprache eignet sich aus Sicht der Spieleentwicklung am besten für die Spieleprogrammierung? Gibt es zum Beispiel funktionale Spieleentwicklungsbibliotheken / Engines / Frameworks oder Grafikengines für funktionale Sprachen? Gibt es eine Sprache, die bestimmte Datenstrukturen, die üblicherweise in der Spieleentwicklung verwendet werden, besser handhabt?

Fazit: Welche funktionale Programmiersprache eignet sich am besten für die funktionale Spielprogrammierung und warum?

Ich glaube / hoffe, dass diese Frage eine klar beste Sprache darstellt, daher habe ich sie trotz ihrer subjektiven Tendenz nicht als CW markiert.

Ricket
quelle
2
"Was meinst du mit 2D-Spielen oder 3D-Spielen?" "Huh? Ich weiß nicht - aieeee "
Cyclops
@ Cyclops äh, was? Ich verstehe nicht ...
Ricket
@Ricket, teilweise war es eine Aufforderung zu klären, um welche Art von Spiel es sich handelt, 2D oder 3D (und möglicherweise in Echtzeit oder rundenbasiert). Teilweise war es ein Monty-Python-Witz, der den ersten Teil verdeckte. Wups. :) Und ich denke, es ist nützlich, die Art des Spiels zu spezifizieren - wenn es nicht eine einzige funktionale Sprache gibt, die für alles perfekt ist , können verschiedene Sprachen in verschiedenen Dingen besser sein.
Cyclops
Ich glaube nicht, dass 2D oder 3D eine Sprachauswahl beeinflussen, außer durch die Vielzahl der für eine Sprache verfügbaren Engines / Bibliotheken. Ich persönlich interessiere mich sowohl für 2D als auch für 3D, daher habe ich beim Schreiben dieser Frage nicht an das eine oder andere gedacht. Insgesamt haben 2D- und 3D-Spiele jedoch viele gemeinsame Systeme und Datenstrukturen (z. B. Audio, Eingabe, KI, Programmstruktur, Spieleschleife), und es gibt viele 3D-Spiele, die auf 2D oder umgekehrt portiert werden können. Und ja, ich habe Monty Python noch nicht gesehen, deshalb habe ich es überhaupt nicht verstanden. :)
Ricket
1
Ich glaube nicht, dass es eine eindeutige Antwort auf die beste Sprache gibt.
Wei Hu

Antworten:

12

F #, das Teil der .net-Familie von Microsoft ist, hat Zugriff auf XNA, eine fantastische Basis zum Erstellen von Spielen. Ein bisschen googeln bringt einige Tutorials, Videos und Artikel. Die großartigen XNA-Dokumente sollten ebenfalls helfen.

Auch für Haskell hat sich einiges getan, siehe hier . Sie werden wahrscheinlich OpenGL-Bindungen verwenden.

Da Scala im Java-Land spielt, integriert es sich in alle verfügbaren Java-Engines / Bindings, siehe diesen SO- Beitrag.

Ich denke, es kommt auf die Vorlieben an, obwohl ich nur mit Haskell gespielt habe, würde ich mir vorstellen, dass jede funktionale Sprache ihre eigenen Besonderheiten hat. Es kann sich lohnen, in jedem ein kleines Testspiel auszuprobieren und zu sehen, welches sich für Sie besser anfühlt.

Wie gesagt, ich habe nur minimale Haskell-Erfahrung, daher kann ich nicht die besten kommentieren, aber diese Ressourcen sollten Ihnen hoffentlich den Einstieg erleichtern.

cmjreyes
quelle
2
Zwischen Problemen mit JVMs und der Unreife der Compiler-Implementierung fand ich, dass die Leistung von Scala bei Verwendung eines funktionalen Stils inakzeptabel ist, obwohl die Sprache selbst dies gut unterstützt. Es ist ungefähr so ​​schnell wie Python oder Ruby, nicht wie F # oder OCaml. (Scala Geschwindigkeit ist wettbewerbsfähig für mehr OO / prozedurale Stile.)
Ich habe tatsächlich ein F # -Projekt mit XNA (das ist ein leeres XNA-Fenster mit Kornblumenblau, nur der Code war F # und nicht C #.
RCIX
8

Ich würde Lisp sagen.

Es wurde in Spielen als Skriptsprache verwendet, zumindest bei Naughty Dog (oder wie ich finde), und ist eine sehr ausgereifte Sprache.

Der Vorteil von Lisp liegt in der Deserialisierung, die ein wesentlicher Bestandteil des sogenannten Asset Managements ist. Das Deserialisieren von Lisp ist trivial, der Code und die Daten sind eins. Dadurch wird es einfacher, ein Dateiformat für Assets und Verhaltensweisen zu haben. Es ist nicht so, dass Sie eine in json / xml / yaml / bin und eine F # -Datei für AI haben. Sie können alles als s-Ausdrücke speichern, was die Asset-Pipeline erheblich vereinfachen wird.

Jonathan Fischoff
quelle
TBH würde ich dagegen empfehlen. Skriptsprachen können nicht nur von Entwicklern verwendet werden. Modder werden das Spiel modifizieren wollen und es gibt nichts, das sie schneller abschreckt als (() ())) () (()). Außerdem ist Lisp selbst in funktionalen Sprachen esoterisch.
RCIX
7
Wenn es Sie beunruhigt, Modder abzuschrecken, ist die Entscheidung für eine funktionierende Sprache wahrscheinlich nicht der richtige Schritt.
Paul Wicks
3
@RCIX & @Joe - Nekro-Kräfte AKTIVIEREN. Wie auch immer, Schema wird als Unterrichtssprache verwendet. SICP ist so etwas wie ein halber CS-Abschluss in einem Buch und wird von einer Reihe von Schulen (einschließlich MIT bis vor kurzem) verwendet, und HTDP ist eine weniger harte Einführung.
Jesse Millikan
1
@ RCIX & Joe in der Tat. lisp & scheme sind die Einführungssprachen vieler Universitäten.
Oberhamsi
1
Lisp ist nichts, was Sie verwenden möchten. Naughty Dog hatte EINEN einzigen Lisp-Programmierer und als er aufhörte, stellten sie alle ihre Engines auf C ++ um. Keine Ahnung, warum ein veralteter Motor einer Firma immer wieder als leuchtendes Beispiel herausgezogen wird =)
Patrick Hughes
8

Nachdem ich einige praktische Erfahrungen damit gesammelt hatte, würde ich für Clojure stimmen - ich habe bereits ein kleines Spiel geschrieben und plane, mehr zu tun.

Gründe dafür:

  • Produktivität - Clojure ist eine dynamische Sprache. Es bietet großartige Funktionen für die interaktive Entwicklung im REPL-Stil. Mit REPL können Sie beispielsweise den Status einer laufenden Spielanwendungsinstanz abfragen oder ändern. Code in Clojure ist auch oft lächerlich kurz. Ich denke, ich bin in Clojure 3-5-mal produktiver als in Java oder C #.
  • Unrein - während ich die Schönheit und Eleganz von reinen funktionalen Sprachen wie Haskell schätze, ist das Programmieren von Spielen ein chaotisches Unterfangen, bei dem der Pragmatismus gewinnt. Ich möchte Nebenwirkungen in meine Funktionen einbauen können, wenn ich sie benötige, und Clojure lässt dies zu. Trotzdem soll der idiomatische Clojure-Stil die meiste Zeit rein funktional sein .
  • Metaprogrammierung - Clojures Lisp-Erbe als homoikonische Sprache eignet sich hervorragend für die Metaprogrammierung / Codegenerierung. Es ist einfach, die Sprache zu erweitern, um eigene DSLs zu erstellen oder Biolerplate zu entfernen. Sie können Clojure problemlos als eigene Skriptsprache für Spiele verwenden. Die dynamische Codekompilierung bedeutet, dass Ihre Skripts genauso schnell ausgeführt werden wie Ihre Kern-Game-Engine.
  • Zugriff auf Java-Bibliotheken . Sie können alle Sound- / Grafik- / AI- / Netzwerkbibliotheken von Java verwenden, was ein enormer Vorteil gegenüber den meisten anderen funktionalen Sprachen ist (wobei Sie diese entweder von Grund auf neu schreiben oder eine Menge kniffligen Schnittstellencodes entwickeln müssen). Dies kann ein Lebensretter sein.
  • Plattformübergreifend - dies ist für die JVM kostenlos, aber ein netter Bonus.
  • Leistung - für eine dynamische funktionale Sprache ist Clojure so schnell wie möglich. Es wird immer JIT kompiliert, nie interpretiert. Mit intelligenter Optimierung können Sie die Geschwindigkeit von reinem Java-Code auf niedriger Ebene in Clojure erreichen. Beispielsweise können Sie primitive Java-Arrays verwenden oder Typhinweise bereitstellen, um sicherzustellen, dass der Compiler statisch typisierte Funktionsaufrufe in leistungskritischem Code erzeugt.
  • Parallelität - Clojure verfügt über ein hervorragendes Modell für die Verwaltung des gleichzeitigen Status, das von einem beeindruckenden Software-Transaktionsspeichersystem unterstützt wird. Sehenswert ist dieses Video, um weitere Einblicke in die Funktionsweise zu erhalten.

Das einzige Mal, dass ich Clojure nicht in Betracht ziehen würde, wäre, wenn ich ein hochmodernes, grafisch intensives Spiel schreibe, in dem Sie Spitzenleistung benötigen (in dem ich immer noch denke, dass Sie C / C ++ benötigen).

mikera
quelle