Развивающие игры в Go? [закрыто]

40

Новый язык Google для Google все еще находится в зачаточном состоянии, и ему еще предстоит найти широкое применение или поддержку в реальном мире. Несмотря на это, это кажется многообещающим экспериментом, и я думаю, что у него может быть будущее в разработке игр. Я не смог найти много специфических для игры обсуждений Go в другом месте, и подумал, что обсуждение CW может быть уместным.

Некоторые мысли:

  • Согласно golang.org , программы Go "запускаются почти так же быстро, как сопоставимый код C или C ++" - достаточно быстро?
  • Подходит ли сборщик мусора Go для игр?
  • Сколько умственного переоснащения необходимо для создания игр в стране одновременных операций?
  • Go часто называют языком системного уровня, в качестве примера приводится серверное программное обеспечение. Трудно не думать о многопользовательских игровых серверах, услышав это.

Твои мысли?

TSomKes
источник
1
Я бы посоветовал всем, кто не знаком с GO, на самом деле перейти по ссылке, прежде чем отвечать, а не просто отвечать, основываясь на данных «мыслях», которые произносятся, если ваш ответ является общим и не относится к этому языку, тогда я думаю, что это не имеет значения
lathomas64
1
Интересно, можно ли делать игры на ходу (игра): P
RCIX
4
Не уверен, что « Go » считается завершенным (опять же, это человек). Но место для хранения очень ограничено (по крайней мере, если используется регулирующий щит).
Дэвид С. Бишоп
@ DavidC.Bishop Забавно ...
Брайан Ортис
1
Если вы создаете игровой движок go, вы должны убедиться, что вы используете все возможности языка, вместо того чтобы пытаться использовать его так же, как при использовании более «обычного» языка, и копировать то, что уже существует.

Ответы:

34

Мои ответы на ваши вопросы:

  • Язык достаточно быстрый. Более медленный язык Java используется для разработки игр. Даже Python (pygame) используется для разработки игр, и он значительно медленнее, чем Java. Все зависит от типа игры и степени загрузки процессора.
  • Сборка мусора в целом не очень хороша для игр. Тем не менее, Go имеет особенно плохую систему сбора мусора (mark-and-sweep), которая останавливает мир, пока очищает вещи. С этим будет трудно справиться, и это приведет к некоторой частоте смены кадров.
  • Приличное количество умственного переоснащения необходимо для создания игр с подпрограммами. Графика и логика не могут быть параллельными в традиционном смысле; но на более низком уровне части логики являются отличными кандидатами на одновременную обработку программ (например, параллельная обработка решений ИИ, систем частиц и т. д.)
  • Многопользовательский игровой сервер действительно может быть отличным кандидатом на язык Go.

На мой взгляд, если у вас достаточно сильное желание попробовать написать игру на каком-либо языке, сделайте это. Очевидно, что если вы обдумываете это, то у вас есть страсть к этому, и почему бы не следовать этой страсти вместо того, чтобы заставлять себя соответствовать норме? Я мог бы сказать намного больше, но я уже много говорил в своем ответе на вопрос: «Является ли Ruby подходящим языком для разработки игр?»

Ricket
источник
6
«особенно плохая система сбора мусора (mark-and-sweep)» mark-and-sweep по сути своей не останавливает мир - в Java, например, имеется параллельный сборщик mark-and-sweep, а Lua долгое время использовал наивный. - и большая часть паузы может контролироваться с помощью тщательно продуманной системы поколений. Тем не менее, Го - это знак остановки и остановки мира. Но первое, а не второе, является проблемой для игр. (В ветке Ruby тоже было несколько странных утверждений по этому поводу.)
1
Нынешняя система Go GC выглядит как заполнитель: «Текущая реализация представляет собой простой сборщик меток и зачисток, но замена находится в разработке» ( golang.org/doc/go_lang_faq.html#garbage_collection ). Варианты замены уже обсуждались; Я не знаю каких-либо твердых решений по этому вопросу.
ЦомКес
1
Джо, спасибо за разъяснения! Я не знал об этом. И да, TSomKes, я видел это, так что мы можем надеяться, что Go в какой-то момент внедрит лучший сборщик мусора.
Рикет
4
Обратите внимание, что приведенный выше ответ устарел, когда речь идет о текущем сборщике мусора Go. Это совершенно другая игра в мяч с Go 1.5. Интересно, насколько это все еще беспокоит.
Джонас
3
И кажется, с ходом 1.8, GC будет уменьшен до 100 мкс одновременной остановки мира. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Доланор
17

Я написал небольшой движок в Go для OSX (используя OpenGl для графического окна). У меня есть некоторый опыт работы с игровыми движками C ++ ( http://morganjeff.weebly.com/ ) и я решил попробовать Go после прочтения о некоторых функциях, которые он предлагает.

Начиная с версии Go 1.1, Go поддерживает большинство функций, которые мне нужны для написания игрового движка (на самом деле игровое ядро, поскольку движок предлагает редакторов, а что нет), включая:

  • Привязка функции-члена (для системы обмена сообщениями)
  • Отражение встроено (полезно для сериализации, поддержки внешних инструментов и т. Д.)
  • Интерфейсы (для реализации полиморфного поведения систем, компонентов и т. Д.)

Некоторые из преимуществ использования Go (для большого проекта):

  • Тестирование встроено в язык (в том числе тесты производительности и некоторые утверждения)
  • Примеры легко добавить к языку (и они составлены для корректности)
  • Код, специфичный для архитектуры, легко добавить (благодаря соглашениям об именах файлов)
  • Профилирование встроено в язык
  • встроенное управление версиями импорта (позволяет добавлять большие двоичные файлы в отдельный репозиторий из исходного кода, сохраняя его версионным и актуальным)

Некоторые преимущества использования Go в целом:

  • Легко рефакторинг кода
  • Go поддерживает многопоточность (в отличие от C ++, который размещал его сверху)
  • супер быстрая скорость компиляции уменьшает необходимость поддержки языка сценариев
  • система статической типизации (интерфейсы удовлетворяются посредством неявной типизации утки)
  • множественные возвращаемые значения, именованные параметры, теговые атрибуты структуры
  • отличные встроенные инструменты и документация
  • управляемый язык

Некоторые недостатки использования Go:

  • Нет макросов или шаблонов
  • Не поддерживает библиотеку более зрелых языков.
  • управляемый язык (указан дважды по назначению)
  • НЕТ ИДЕ

Есть способы получить необработанную память в go (импортировать «unsafe»), и я приведу ссылку на статью, которая показывает, как программа go может быть профилирована по памяти и скорости. В общем, утверждение Go о том, что это современный C, кажется очень верным. Я думаю, что он «умно» разработан (по гораздо большему количеству причин, чем я упомянул), и, что более важно, он хорошо документирован. Движок, разработанный в Go, будет немного отличаться от движка, разработанного в C ++ (к чему я все еще привыкаю), но движок Go решает множество проблем, которые на самом деле не решаются в C ++ (а именно параллелизм, сложность языка C ++ и неправильное использование наследования).

Вот статья, которую я обещал: http://blog.golang.org/2011/06/profiling-go-programs.html

-Джефф

jmorgan
источник
Попробуйте Sublime с GoSublime, он действительно ощущается как IDE, и он гораздо более реактивный, чем многие (если не все) IDE для Java.
Арне
1
Можете ли вы указать, что вы имеете в виду под «встроенным контролем версий импорта», я только опасаюсь тега версии самого языка go.
Арне
@jmorgan какие-нибудь перспективные изменения после Go 1.2 и увидеть предстоящие изменения Go 1.3?
Иллюминат
@Arne: Хороший звонок! Мне действительно очень нравится GoSublime. Для IDE я имел в виду, что для получения визуального отладчика вы должны использовать gogdb (который является отличным инструментом), но он не так хорош, как Visual Studio. Вот что я имел в виду зависимостей пакетов и управления версиями: golang.org/cmd/go/... golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan
@ylluminate: я искренне думаю, что Go становится все лучше и лучше. Теперь он поставляется с тестовым пакетом покрытия, так что вы можете быстро увидеть, что проверено, а что нет. Я обнаружил, что наличие приличного набора тестов делает мою жизнь намного проще ... так что это большая особенность для меня. Похоже, что в Go 1.3 будут улучшены бинарный размер и скорость выполнения (особенно сборщик мусора), так что это здорово.
Джморган
4

Что еще нужно подумать, так это то, что, поскольку Go все еще относительно нов, не может быть привязок для многих общих библиотек, используемых при разработке игр.

Боб Сомерс
источник
Определенно дело. Например, я сталкивался с двумя проектами Go / SDL, один из которых, похоже, был заброшен. Я нашел несколько (относительно небольших) игр, которые используют любую из них.
ЦомКес
1
Вы должны обязательно проверить github.com/go-gl, что это не SDL, а хорошая альтернатива, если вы используете OpenGl. Для векторов есть github.com/Jragonmiris/mathgl , но я нашел ошибки там. Go делает это очень легко, чтобы обернуть библиотеки C, нет никакой потребности в make-файлах вообще. Вы также можете импортировать файлы заголовков C и использовать их функции напрямую.
Арне
0

Не используйте Go для разработки игры, это просто альбатрос на шее. Набор инструментов для разработки игр простирается гораздо глубже, чем просто язык, на котором вы пишете вещи, и на каждом шагу вы будете сталкиваться с препятствиями, которых просто не будет, если вы просто сделаете что-то установленное.

Не поймите меня неправильно, я люблю играть с новыми языками, но если вы пытаетесь заставить игры выбрать язык, который имеет сообщество и поддержку, и вам будет намного лучше.

Аарон Брейди
источник
9
С другой стороны, если вы просто собираетесь жестко закодировать материал в небольшом инди-проекте, чтобы поиграть с новым языком, беспокойство о «наборе инструментов» переоценивается.
2
Я должен не согласиться здесь. Большинство вещей, связанных с разработкой игр, не имеет ничего общего с языком. Задавать вопросы об OpenGL не имеет никакого отношения к тому, что вы программируете на C C ++ Go или даже Java. И, кстати, о каком наборе инструментов ты говоришь? А почему это должно быть несовместимо?
Арне