Spiele in Go entwickeln? [geschlossen]

40

Die neue Go-Sprache von Google steckt noch in den Kinderschuhen und wird in der Praxis noch nicht in großem Umfang eingesetzt oder unterstützt. Trotzdem scheint es ein vielversprechendes Experiment zu sein, und ich frage mich, ob es in der Spieleentwicklung eine Zukunft haben könnte. Ich konnte nicht viel spielspezifisches über Go anderswo finden, und eine CW-Diskussion könnte angebracht sein.

Einige Gedanken:

  • Laut golang.org laufen Go-Programme "fast so schnell wie vergleichbarer C- oder C ++ - Code" - schnell genug?
  • Ist Go's Müllsammlung gut für Spiele geeignet?
  • Wie viel mentales Umrüsten ist erforderlich, um Spiele im Land der gleichzeitigen Goroutinen zu erstellen?
  • Go wird häufig als "Systems" -Level-Sprache bezeichnet. Ein Beispiel hierfür ist die Server-Software. Es ist schwer, an Multiplayer-Game-Server zu denken, wenn man das hört.

Ihre Gedanken?

TSomKes
quelle
1
Ich würde jeden nicht vertraut mit GO rät tatsächlich den Link zu folgen , bevor im Gegensatz zu beantworten, nur reagiert auf der Grundlage der gegebenen „Gedanken“ , die being said , wenn Ihre Antwort generisch ist und nicht spezifisch für diese Sprache dann ich denke , es spielt keine Rolle
lathomas64
1
Ich frage mich, ob Sie Spiele in go (das Spiel) machen können: P
RCIX
4
Ich bin mir nicht sicher, ob ' Go ' als vollständig angesehen wird (dann wird es wieder von Menschen bedient). Der Stauraum ist jedoch sehr begrenzt (zumindest bei Verwendung einer Regulierungsbehörde).
David C. Bishop
@ DavidC.Bishop Funny ...
Brian Ortiz
1
Wenn Sie eine Go-Game-Engine erstellen, sollten Sie sicherstellen, dass Sie die Vorteile der Sprache nutzen, anstatt zu versuchen, sie auf die gleiche Weise wie eine "konventionellere" Sprache zu verwenden und das zu kopieren, was bereits vorhanden ist.

Antworten:

34

Meine Antwort auf Ihre Fragen:

  • Die Sprache ist schnell genug. Die langsamere Java-Sprache wird für die Spieleentwicklung verwendet. Sogar Python (Pygame) wird für die Spieleentwicklung verwendet und ist bedeutend langsamer als Java. Es hängt alles von der Art des Spiels und der Prozessorintensität ab.
  • Müllabfuhr im Allgemeinen ist nicht sehr gut für Spiele. Go hat jedoch ein besonders schlechtes Müllsammelsystem (Mark-and-Sweep), das die Welt aufhält, während es Dinge aufräumt. Es wird schwer zu bewältigen sein und eine Art Stop-and-Go-Framerate verursachen.
  • Eine angemessene Menge an geistiger Umrüstung ist notwendig, um Spiele mit Goroutinen zu erstellen. Grafik und Logik können im herkömmlichen Sinne nicht gleichzeitig sein. Auf einer kleineren Ebene eignen sich Teile der Logik jedoch hervorragend für gleichzeitige Goroutinen (z. B. parallele Verarbeitung von KI-Entscheidungen, Partikelsystemen usw.).
  • Ein Multiplayer-Game-Server ist in der Tat ein großartiger Kandidat für die Sprache Go.

Wenn Sie meiner Meinung nach den Drang haben, Spiele in einer Sprache zu schreiben, dann versuchen Sie es. Wenn Sie darüber nachdenken, haben Sie natürlich eine Leidenschaft dafür, und warum nicht dieser Leidenschaft folgen, anstatt sich zu zwingen, sich der Norm anzupassen? Ich könnte noch viel mehr sagen, aber ich habe bereits viel in meiner Antwort auf die Frage gesagt : "Ist Ruby eine geeignete Sprache für die Spieleentwicklung?"

Ricket
quelle
6
"Ein besonders schlechtes Garbage-Collection-System (Mark-and-Sweep)" Mark-and-Sweep hält die Welt nicht auf - Java hat beispielsweise einen gleichzeitigen Mark-and-Sweep-Collector, und Lua hat lange Zeit einen naiven verwendet - und ein Großteil der Länge der Pause kann über ein vorsichtiges Generationssystem gesteuert werden. That being said, Gos ist Stop-the-World - Mark-and-Sweep. Aber das erstere, nicht das letztere, ist das Thema für Spiele. (Der Ruby-Thread hatte auch einige seltsame Behauptungen darüber.)
1
Das aktuelle Go GC-System scheint ein Platzhalter zu sein: "Die aktuelle Implementierung ist ein einfacher Mark-and-Sweep-Collector, aber ein Ersatz ist in Arbeit" ( golang.org/doc/go_lang_faq.html#garbage_collection ). Ersatzoptionen wurden diskutiert; Feste Entscheidungen dazu sind mir nicht bekannt.
TSomKes
1
Joe, danke für die Klarstellung! Das war mir nicht bewusst. Und ja, TSomKes, das habe ich gesehen, damit wir weiter hoffen können, dass Go irgendwann einen besseren Garbage Collector implementiert.
Ricket
4
Beachten Sie, dass die obige Antwort in Bezug auf den aktuellen Go-Garbage-Collector veraltet ist. Es ist ein ganz anderes Ballspiel mit Go 1.5. Ich frage mich, wie besorgniserregend dies immer noch ist.
Jonas
3
Und es scheint, dass mit go 1.8 der GC auf 100 μs gleichzeitiger Stop-the-World reduziert wird. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor
17

Ich habe eine kleine Engine in Go für OSX geschrieben (mit OpenGl für das Grafikfenster). Ich habe einige Erfahrungen mit C ++ - Spiele-Engines ( http://morganjeff.weebly.com/ ) und habe beschlossen, Go auszuprobieren, nachdem ich einige der darin enthaltenen Funktionen gelesen hatte.

Ab der Go 1.1-Version unterstützt go die meisten Funktionen, die ich zum Schreiben einer Game-Engine benötigte (wirklich ein Game-Core, wie eine Engine Editoren vorschlägt, und was nicht), einschließlich:

  • Mitgliederfunktionsbindung (für das Nachrichtensystem)
  • Reflection ist integriert (nützlich für die Serialisierung, Unterstützung externer Tools usw.)
  • Schnittstellen (zum Implementieren von polymorphem Verhalten für Systeme, Komponenten usw.)

Einige der Vorteile von Go (für ein großes Projekt):

  • Das Testen ist in die Sprache integriert (dies beinhaltet Benchmark-Tests und einige Behauptungen)
  • Beispiele können leicht zur Sprache hinzugefügt werden (und sie werden zur Korrektheit kompiliert)
  • Architekturspezifischer Code ist einfach hinzuzufügen (durch Dateinamenskonventionen)
  • Die Profilerstellung ist in die Sprache integriert
  • Integrierte Versionierung von Importen (ermöglicht das Hinzufügen großer Binärdateien zu einem separaten Repository von der Quelle, wobei die Versionierung und Aktualität beibehalten werden)

Einige Vorteile von Go im Allgemeinen:

  • Einfach zu refaktorierender Code
  • Go unterstützt Threading (im Gegensatz zu C ++, das es überlagert hat)
  • Die superschnelle Kompilierungsgeschwindigkeit reduziert den Bedarf an Unterstützung für Skriptsprachen
  • Statisches Typisierungssystem (Schnittstellen werden über Duck-Typisierung auch implizit erfüllt)
  • mehrere Rückgabewerte, benannte Parameter, getaggte Strukturattribute
  • Tolle integrierte Tools und Dokumentation
  • verwaltete Sprache

Einige Nachteile der Verwendung von Go:

  • Keine Makros oder Vorlagen
  • Hat nicht die Bibliotheksunterstützung von ausgereifteren Sprachen
  • verwaltete Sprache (zweimal absichtlich aufgeführt)
  • KEINE IDE

Es gibt Möglichkeiten, Rohspeicher in go zu bekommen ("unsicher" importieren), und ich werde einen Artikel verlinken, der zeigt, wie ein go-Programm hinsichtlich Speicher und Geschwindigkeit profiliert werden kann. Alles in allem scheint Go's Behauptung, dass es ein modernes C ist, sehr wahr zu sein. Ich denke, es ist "intelligent" gestaltet (aus viel mehr Gründen als ich erwähnt habe) und, was noch wichtiger ist, es ist gut dokumentiert. Eine in Go entwickelte Engine wird sich ein wenig von einer in C ++ entwickelten Engine unterscheiden (etwas, an das ich mich immer noch gewöhnt habe), aber die Go-Engine löst viele Probleme, die in C ++ nicht wirklich gelöst sind (nämlich Parallelität, die Komplexität der Sprache von C ++ und der Missbrauch der Vererbung).

Hier ist der Artikel, den ich versprochen habe: http://blog.golang.org/2011/06/profiling-go-programs.html

-Jeff

jmorgan
quelle
Probieren Sie Sublime mit GoSublime aus, es fühlt sich wirklich wie eine IDE an und ist viel reaktiver als viele (wenn nicht alle) IDEs für Java.
Arne
1
können Sie angeben, was Sie mit "integrierter Versionierung von Importen" meinen, ich bin nur achtsam gegenüber dem Versions-Tag der Sprache go selbst.
Arne
@jmorgan Irgendwelche Perspektivenänderungen seit Go 1.2 und die bevorstehenden Änderungen von Go 1.3?
Ylluminate
@ Arne: Guter Anruf! Ich mag GoSublime wirklich sehr. Was ich für keine IDE gedacht habe, ist, dass man für einen visuellen Debugger gogdb verwenden muss (was ein großartiges Tool ist), aber es ist nicht so schön wie Visual Studio. Folgendes habe
jmorgan
@ylluminate: Ehrlich gesagt denke ich, dass Go immer besser wird. Es wird jetzt mit einem Test-Coverage-Paket geliefert, sodass Sie schnell sehen können, was getestet wurde und was nicht. Ich habe festgestellt, dass eine anständige Testsuite mein Leben viel einfacher macht. Das ist eine große Sache für mich. Go 1.3 scheint Verbesserungen bei der Binärgröße und der Laufzeitgeschwindigkeit (insbesondere beim Garbage Collector) zu bringen, das ist also großartig.
jmorgan
4

Da Go noch relativ neu ist, gibt es möglicherweise noch keine Bindungen für viele der gängigen Bibliotheken, die in der Spieleentwicklung verwendet werden.

Bob Somers
quelle
Auf jeden Fall der Fall. Zum Beispiel bin ich auf zwei Go / SDL-Projekte gestoßen, von denen eines offenbar aufgegeben wurde. Ich habe eine Handvoll (relativ kleiner) Spiele gefunden, die eines von beiden verwenden.
TSomKes
1
Sie sollten auf jeden Fall github.com/go-gl aufsuchen, es ist nicht SDL, aber eine gute Alternative, wenn Sie OpenGl verwenden. Für Vektoren gibt es github.com/Jragonmiris/mathgl , aber ich habe dort Fehler gefunden. Go macht es super einfach, C-Bibliotheken zu verpacken, Makefiles sind überhaupt nicht erforderlich. Sie können auch C-Header-Dateien importieren und deren Funktionen direkt verwenden.
Arne
0

Verwenden Sie Go nicht, um ein Spiel zu entwickeln, es wird nur ein Albatros um Ihren Hals sein. Die Toolchain für die Spieleentwicklung geht so weit über die Sprache hinaus, dass Sie Dinge schreiben, bei denen Sie auf Schritt und Tritt auf Hindernisse stoßen, die einfach nicht vorhanden sind, wenn Sie nur mit etwas Bestimmtem arbeiten.

Versteht mich nicht falsch, ich liebe es, mit neuen Sprachen zu spielen, aber wenn Sie versuchen, Spiele dazu zu bringen, eine Sprache zu wählen, die eine Community und Unterstützung hat, werden Sie viel besser dran sein.

Aaron Brady
quelle
9
Auf der anderen Seite wird die Sorge um die "Toolchain" überbewertet, wenn Sie nur ein kleines Indie-Projekt fest programmieren, um mit einer neuen Sprache zu spielen.
2
Ich muss hier nicht zustimmen. Die meisten Dinge, die mit der Spieleentwicklung zu tun haben, haben nichts mit der Sprache zu tun. Das Stellen von Fragen zu OpenGL hat nichts mit dem zu tun, was Sie in C C ++ Go oder sogar Java programmieren. Übrigens, von welcher Toolchain sprechen Sie? Und warum sollte es unvereinbar sein zu gehen?
Arne