Développer des jeux dans Go? [fermé]

40

Le nouveau langage Go de Google en est encore à ses balbutiements et il n'a pas encore trouvé d'utilisation ou de soutien généralisé dans le monde réel. Malgré tout, cela semble être une expérience prometteuse, et je me demande si cela pourrait avoir un avenir dans le développement de jeux. Je n'ai pas réussi à trouver beaucoup de discussions spécifiques à un jeu sur Go ailleurs, et je me suis dit qu'une discussion en CW pourrait être appropriée.

Quelques idées:

  • Selon golang.org , les programmes Go "fonctionnent presque aussi rapidement que du code C ou C ++ comparable" - assez rapidement?
  • La collecte des ordures de Go convient-elle bien aux jeux?
  • Combien de ré-outillage mental est nécessaire pour créer des jeux au pays des goroutines concurrentes?
  • Go est souvent appelé langage de "systèmes", le logiciel serveur étant donné à titre d'exemple. Il est difficile de ne pas penser aux serveurs de jeux multijoueurs en entendant cela.

Tes pensées?

TSomKes
la source
1
Je conseillerais à toute personne ne connaissant pas GO de suivre le lien avant de répondre, au lieu de simplement répondre en se basant sur les "pensées" données si votre réponse est générique et non spécifique à cette langue, alors je suppose que cela n'a pas d'importance
lathomas64
1
Je me demande si vous pouvez créer des jeux de go (le jeu): P
RCIX le
4
Je ne sais pas si « Go » est considéré comme étant en train de tourner complètement (encore une fois, il est opéré par l'homme). Mais l'espace de stockage est très limité (du moins si vous utilisez un tableau de régulation).
David C. Bishop
@ DavidC.Bishop Funny ...
Brian Ortiz Le
1
Si vous créez un moteur de jeu, vous devez vous assurer de tirer parti de ce que le langage peut faire, au lieu d'essayer de l'utiliser comme vous le feriez avec un langage plus "conventionnel" et de copier ce qui existe déjà.

Réponses:

34

Ma prise sur vos questions:

  • La langue est assez rapide. Le langage Java plus lent est utilisé pour le développement de jeux. Même Python (pygame) est utilisé pour le développement de jeux et il est nettement plus lent que Java. Tout dépend du type de jeu et de l'intensité du processeur.
  • La collecte des ordures en général n'est pas très bonne pour les jeux. Cependant, Go possède un système de récupération des ordures particulièrement mauvais (balise) qui bloque le monde pendant qu'il nettoie des éléments. Ce sera difficile à gérer et provoquera une sorte de ralentissement de l'image.
  • Une quantité décente de réoutillage mental est nécessaire pour créer des jeux avec des goroutines. Les graphiques et la logique ne peuvent pas être concurrents au sens traditionnel du terme. mais à un niveau inférieur, certaines parties de la logique sont d'excellents candidats pour des goroutines simultanées (par exemple, traitement parallèle des décisions relatives à l'IA, systèmes de particules, etc.)
  • Un serveur de jeu multijoueur peut en effet être un excellent candidat pour la langue Go.

À mon avis, si vous avez assez envie d'essayer d'écrire des jeux avec une langue, allez-y. Évidemment, si vous envisagez de le faire, vous avez une passion pour le faire et pourquoi ne pas le suivre au lieu de vous forcer à vous conformer à la norme? Je pourrais en dire beaucoup plus, mais j'ai déjà beaucoup dit dans ma réponse à la question: "Ruby est-il un langage approprié pour le développement de jeux?"

Ricket
la source
6
"Un système de collecte des détritus particulièrement mauvais (marquage et balayage)" Le marquage par balayage n'arrête pas le monde de manière inhérente - Java, par exemple, possède un collecteur de marquage et balayage simultané, et Lua en a utilisé un pendant longtemps. - et une grande partie de la durée de la pause peut être contrôlée via un système générationnel prudent. Cela étant dit, Go's est un jeu d' envergure mondial. Mais le premier, pas le dernier, est le problème des jeux. (Le fil Ruby avait des affirmations étranges à ce sujet également.)
1
Le système Go GC actuel semble être un espace réservé: "L'implémentation actuelle est un simple collecteur, mais son remplacement est en cours" ( golang.org/doc/go_lang_faq.html#garbage_collection ). Les options de remplacement ont été discutées; Je ne suis au courant d'aucune décision ferme en la matière.
TSomKes
1
Joe, merci de clarifier! Je n'étais pas au courant de ça. Et oui TSomKes, je l’ai vu, alors nous pouvons garder notre espoir que Go mettra en place un meilleur ramasse-miettes à un moment donné.
Ricket
4
Notez que la réponse ci-dessus est obsolète en ce qui concerne le ramasse-miettes actuel de Go. C'est un jeu de balle complètement différent avec Go 1.5. Je me demande à quel point cela reste une préoccupation.
Jonas
3
Et il semble qu'avec la version 1.8, le GC sera réduit à 100 μs de stop-the-world simultané. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor
17

J'ai écrit un petit moteur dans Go pour OSX (en utilisant OpenGl pour la fenêtre graphique). J’ai une certaine expérience des moteurs de jeu C ++ ( http://morganjeff.weebly.com/ ) et j’ai décidé d’essayer Go après avoir lu certaines des fonctionnalités qu’il offre.

À compter de la version Go 1.1, Go a pris en charge la plupart des fonctionnalités dont j'avais besoin pour écrire un moteur de jeu (un noyau de jeu, car un moteur suggère aux éditeurs et à d'autres choses), notamment:

  • Liaison de fonction membre (pour le système de messagerie)
  • La réflexion est intégrée (utile pour la sérialisation, le support des outils externes, etc.)
  • Interfaces (pour implémenter un comportement polymorphe pour des systèmes, des composants, etc.)

Quelques avantages à utiliser Go (pour un grand projet):

  • Le test est intégré au langage (cela inclut les tests d'évaluation et certaines assertions)
  • Les exemples sont faciles à ajouter au langage (et ils sont compilés pour l'exactitude)
  • Le code spécifique à l'architecture est facile à ajouter (via les conventions de dénomination des fichiers)
  • Le profilage est intégré à la langue
  • gestion intégrée des versions des importations (permet d'ajouter des fichiers binaires volumineux à un référentiel distinct de la source, tout en le gardant mis à jour et à jour)

Quelques avantages de l'utilisation de Go en général:

  • Facile à refactoriser le code
  • Go supporte les threads (contrairement au C ++ qui le superpose)
  • une vitesse de compilation ultra rapide réduit le besoin de prise en charge du langage de script
  • système de typage statique (les interfaces sont satisfaites via le typage de canard, aussi appelé implicitement)
  • valeurs de retour multiples, paramètres nommés, attributs de structure étiquetés
  • d'excellents outils intégrés et de la documentation
  • langue gérée

Quelques inconvénients à utiliser Go:

  • Pas de macros ou de modèles
  • N'a pas le support de bibliothèque de langages plus matures
  • langage géré (répertorié deux fois à dessein)
  • NO IDE

Il existe des moyens de récupérer de la mémoire brute (importation "non sécurisée") et je vais lier un article qui montre comment un programme de transfert peut être profilé pour gagner de la mémoire et gagner de la vitesse. Globalement, l'affirmation de Go selon laquelle il s'agit d'un C moderne semble très vraie. Je pense que c'est "intelligemment" conçu (pour beaucoup plus de raisons que j'ai mentionné) et, plus important encore, c'est bien documenté. Un moteur conçu dans Go sera légèrement différent d’un moteur conçu en C ++ (auquel je m’habitue encore), mais le moteur Go résout de nombreux problèmes qui ne sont pas vraiment résolus en C ++ (à savoir le parallélisme, la complexité du langage C ++, et la mauvaise utilisation de l’héritage).

Voici l'article que j'ai promis: http://blog.golang.org/2011/06/profiling-go-programs.html

-Jeff

jmorgan
la source
essayez Sublime avec GoSublime, cela ressemble vraiment à un IDE, et il est beaucoup plus réactif que beaucoup (sinon tous) des IDE pour Java.
Arne
1
pouvez-vous préciser ce que vous entendez par "versioning intégré des importations", je ne suis au courant de la balise de version de la langue go elle-même.
Arne
@jmorgan des changements de perspective depuis Go 1.2 et de voir les prochains changements pour Go 1.3?
Ylluminate
@Arne: Bon appel! J'aime beaucoup GoSublime, beaucoup. Ce que je voulais dire pour aucun IDE, c'est que pour obtenir un débogueur visuel, vous devez utiliser gogdb (qui est un excellent outil), mais ce n'est pas aussi beau qu'un visual studio. Voici ce que je voulais dire à propos des dépendances de paquets et du contrôle de version: golang.org/cmd/go/… golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan
@ylluminate: Honnêtement, je pense que Go va de mieux en mieux. Il est maintenant livré avec un package de couverture de test, qui vous permet de voir rapidement ce qui est testé et ce qui ne l’est pas. J'ai découvert qu'avoir une suite de tests décente rend ma vie beaucoup plus facile ... c'est donc une grande fonctionnalité pour moi. Go 1.3 semble apporter des améliorations à la taille binaire et à la vitesse d'exécution (en particulier le ramasse-miettes), ce qui est excellent.
Jmorgan
4

Une autre chose à laquelle il faut penser est que, puisque Go est encore relativement nouveau, il n’existe peut-être pas encore de liaisons pour de nombreuses bibliothèques communes utilisées dans le développement de jeux.

Bob Somers
la source
Certainement le cas. Par exemple, j'ai rencontré deux projets Go / SDL, dont l'un semble avoir été abandonné. J'ai trouvé une poignée de jeux (relativement petits) qui utilisent l'un ou l'autre.
TSomKes
1
Vous devriez certainement vérifier github.com/go-gl que ce n’est pas SDL mais une bonne alternative si vous utilisez OpenGl. Pour les vecteurs, il y a github.com/Jragonmiris/mathgl , mais j'ai trouvé des bugs là-bas. Go make est super facile à envelopper les bibliothèques C, il n'y a pas du tout besoin de makefiles. Vous pouvez également importer des fichiers d’en-tête C et utiliser directement leurs fonctions.
Arne
0

Ne pas utiliser Go pour développer un jeu, ce sera juste un albatros autour du cou. La panoplie d'outils pour le développement de jeux va bien au-delà du langage dans lequel vous écrivez des choses dans lesquelles vous allez trouver à chaque tournant des obstacles qui ne seront tout simplement pas là si vous vous contentez de quelque chose de établi.

Ne vous méprenez pas, j'aime jouer avec de nouvelles langues, mais si vous essayez de créer des jeux, choisissez une langue qui a une communauté, un soutien et vous serez beaucoup mieux lotie.

Aaron Brady
la source
9
D'un autre côté, si vous allez simplement coder en dur sur un petit projet indépendant pour jouer avec un nouveau langage, l'inquiétude pour la "chaîne d'outils" est surestimée.
2
Je ne suis pas d'accord ici. La plupart des choses liées au développement de jeux n'ont rien à voir avec le langage. Poser des questions sur OpenGL n'a rien à voir avec la programmation en C C ++ Go ou même en Java. Et au fait, de quelle chaîne d'outils parlez-vous? Et pourquoi devrait-il être incompatible d'y aller?
Arne