Go 게임 개발? [닫은]


40

Google의 새로운 Go 언어는 아직 초기 단계이며 아직 널리 사용되거나 지원되지 않습니다. 그럼에도 불구하고, 그것은 유망한 실험처럼 보이고, 그것이 게임 개발의 미래를 가질 수 있을지 궁금합니다. Go 다른 곳에서 Go에 대한 많은 게임 관련 토론을 찾을 수 없었고 CW 토론이 적절하다고 생각했습니다.

몇 가지 생각 :

  • golang.org 에 따르면 , Go 프로그램은 "비슷한 C 또는 C ++ 코드만큼 빨리 실행된다"고 충분히 빠른가?
  • Go의 가비지 수집은 게임에 적합합니까?
  • 동시 goroutines의 땅에서 게임을 만들려면 얼마나 많은 정신 재 도구가 필요합니까?
  • Go는 종종 "시스템"수준의 언어로 불리며 서버 소프트웨어를 예로 들어 설명합니다. 이 말을들을 때 멀티 플레이어 게임 서버를 생각하기 어렵습니다.

당신의 생각?


1
사실 난 단지 당신의 대답은 일반적이며,이 언어에없는 특정 그때 나는 그것이 중요하지 않습니다 생각하면 존재가 말했다 주어진 "생각"을 기준으로 응답 반대에 응답하기 전에 링크를 따라 GO에 익숙하지 않은 사람을 권합니다
lathomas64

1
나는 당신이 게임을 할 수 있는지 궁금합니다 (게임) : P
RCIX

4
' Go '가 회전이 완료된 것으로 간주 되는지 확실하지 않은 경우 (다시 인간이 운영) 그러나 저장 공간은 매우 제한적입니다 (적어도 규제 보드를 사용하는 경우).
David C. Bishop

@ DavidC.Bishop Funny ...
Brian Ortiz

1
이동 게임 엔진을 만드는 경우보다 "기존의"언어와 기존 방식으로 복사하는 것과 같은 방식으로 언어를 사용하는 대신 언어로 수행 할 수있는 기능을 활용해야합니다.

답변:


34

귀하의 질문에 대한 나의 의견 :

  • 언어는 충분히 빠릅니다. 느린 Java 언어는 게임 개발에 사용됩니다. Python (pygame)도 게임 개발에 사용되며 Java보다 훨씬 느립니다. 그것은 게임의 종류와 프로세서 집약적 인 정도에 달려 있습니다.
  • 가비지 콜렉션은 일반적으로 게임에 적합하지 않습니다. 그러나 Go에는 특히 가비지 수집 시스템 (마크 앤 스윕)이있어 물건을 청소하는 동안 세상을 멈추게합니다. 대처하기가 어려우며 스톱 앤 고 프레임 레이트가 발생합니다.
  • 고 루틴을 사용하여 게임을 만들려면 적절한 양의 정신적 도구가 필요합니다. 전통적인 의미에서 그래픽과 로직을 동시에 사용할 수는 없습니다. 그러나 더 작은 수준에서 논리의 일부는 동시 고 루틴 (예 : AI 결정, 입자 시스템 등의 병렬 처리)에 대한 훌륭한 후보입니다.
  • 멀티 플레이어 게임 서버는 실제로 Go 언어의 훌륭한 후보가 될 수 있습니다.

제 생각에는 언어를 사용하여 게임을 작성해 보라고 충동이 있다면 강해보십시오. 분명히 당신이 그것을 고려하고 있다면 그렇게 할 열정이 있으며, 자신이 규범을 따르도록 강요하는 대신 그 열정을 따르지 않는 이유는 무엇입니까? 더 많이 말할 수는 있지만 이미 답변에서 "루비가 게임 개발에 적합한 언어입니까?"라는 질문 에 대해 많은 답변을했습니다.


6
"특히 잘못된 가비지 수집 시스템 (마크 앤 스윕)"마크 앤 스윕은 본질적으로 세계를 멈추지 않습니다. Java에는 예를 들어 동시 마크 앤 스윕 수집기가 있으며 Lua는 오랫동안 순진한 것을 사용했습니다. -일시 정지의 많은 길이는 신중한 세대 시스템을 통해 제어 할 수 있습니다. 즉, Go 's 세계 최고 기록입니다. 그러나 후자는 아니라 전자가 게임의 문제입니다. (루비 스레드도 이것에 대해 이상한 주장을했습니다.)

1
현재 Go GC 시스템은 자리 표시 자의 일부인 것 같습니다. "현재 구현은 단순한 마크 앤 스윕 수집기이지만 교체 작업이 진행 중입니다"( golang.org/doc/go_lang_faq.html#garbage_collection ). 대체 옵션이 논의되었습니다. 나는 그 문제에 대한 확실한 결정을 알지 못한다.
TSomKes

1
Joe, 설명해 주셔서 감사합니다! 나는 그것을 몰랐다. 그래, TSomKes, 나는 그것을 보았으므로 Go가 어느 시점에서 더 나은 가비지 수집기를 구현 할 것이라는 희망을 유지할 수 있습니다.
Ricket

4
위의 답변은 현재 Go 가비지 수집기의 경우 오래되었습니다. Go 1.5와는 완전히 다른 볼 게임입니다. 나는 아직도 이것이 얼마나 많은 걱정인지 궁금합니다.
Jonas

3
그리고 1.8에 가까워지면 GC가 100μs의 동시 정지 세계로 줄어 듭니다. groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor

17

Go for OSX에서 작은 엔진을 작성했습니다 (그래픽 창에 OpenGl 사용). C ++ 게임 엔진 ( http://morganjeff.weebly.com/ )에 대한 경험이 있으며 제공하는 기능 중 일부를 읽은 후 Go를 사용해보기로 결정했습니다.

Go 1.1 릴리스부터 go는 다음을 포함하여 게임 엔진을 작성하는 데 필요한 대부분의 기능 (실제로 엔진이 에디터를 제안하는 게임 코어)을 지원합니다.

  • 멤버 함수 바인딩 (메시징 시스템 용)
  • 리플렉션 내장 (직렬화, 외부 도구 지원 등에 유용)
  • 인터페이스 (시스템, 구성 요소 등의 다형성 동작 구현)

대규모 프로젝트의 경우 Go를 사용하면 다음과 같은 이점이 있습니다.

  • 테스트는 언어에 내장되어 있습니다 (벤치 마크 테스트 및 일부 어설 션 포함)
  • 예제는 언어에 쉽게 추가 할 수 있으며 정확성을 위해 컴파일됩니다.
  • 아키텍처 별 코드를 쉽게 추가 할 수 있습니다 (파일 이름 지정 규칙을 통해)
  • 프로파일 링은 언어에 내장되어 있습니다
  • 내장 된 가져 오기 버전 관리 (버전을 최신 상태로 유지하면서 소스에서 별도의 저장소에 큰 바이너리를 추가 할 수 있음)

일반적으로 Go를 사용하면 다음과 같은 이점이 있습니다.

  • 코드 리팩터링 용이
  • Go는 스레딩을 지원합니다 (C ++과 달리
  • 초고속 컴파일 속도로 스크립팅 언어 지원 필요성 감소
  • 정적 타이핑 시스템 (인터페이스는 오리 타이핑을 통해 암시 적으로 만족합니다)
  • 여러 반환 값, 명명 된 매개 변수, 태그가 지정된 구조체 속성
  • 훌륭한 내장 도구 및 문서
  • 관리되는 언어

Go를 사용하면 몇 가지 단점이 있습니다.

  • 매크로 나 템플릿이 없습니다
  • 보다 성숙한 언어에 대한 라이브러리 지원이 없습니다
  • 관리되는 언어 (의도적으로 두 번 나열)
  • IDE 없음

원시 메모리를 가져 오는 방법 (가져 오기 "안전하지 않은")이 있으며 go 프로그램을 메모리 및 속도에 대해 프로파일 링하는 방법을 보여주는 기사를 링크하겠습니다. 대체로 Go의 주장은 그것이 현대적인 C라는 것이 매우 사실 인 것 같습니다. 나는 그것이 "스마트하게"디자인 된 것 (앞서 언급 한 것보다 훨씬 더 많은 이유로)이며, 더 중요하게는 잘 문서화되어 있다고 생각합니다. Go로 설계된 엔진은 C ++로 설계된 엔진 (아직 익숙하지 않은 엔진)과 약간 다르지만 Go 엔진은 C ++에서 실제로 해결되지 않은 많은 문제 (즉, 병렬 처리, C ++의 언어의 복잡성과 상속의 잘못된 사용).

내가 약속 한 기사는 다음과 같습니다. http://blog.golang.org/2011/06/profiling-go-programs.html

-제프


GoSublime으로 Sublime을 사용해보십시오. 실제로는 IDE와 같은 느낌이 들며 Java 용 많은 (전부는 아님) IDE보다 훨씬 반응이 좋습니다.
Arne

1
"내장 된 가져 오기 버전 관리"의 의미를 지정할 수 있습니다. 저는 go 언어 자체의 버전 태그에 대해서만 경고합니다.
Arne

@jmorgan Go 1.2 이후로 관점이 바뀌고 Go 1.3 예정된 변경 사항이 있습니까?
ylluminate

@Arne : 좋은 전화! 나는 GoSublime을 정말 좋아합니다. 내가 IDE를 사용하지 않았다는 것은 시각적 디버거를 얻으려면 gogdb (좋은 도구)를 사용해야하지만 Visual Studio만큼 좋지는 않습니다. 패키지 종속성 및 버전 관리에 대한 의미는 다음과 같습니다. golang.org/cmd/go/… golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan

@ylluminate : 솔직히 Go가 점점 좋아지고 있다고 생각합니다. 이제 테스트 적용 범위 패키지가 제공되므로 테스트 대상과 그렇지 않은 대상을 빠르게 확인할 수 있습니다. 적절한 테스트 스위트를 사용하면 내 인생이 훨씬 쉬워집니다 ... 그래서 이것은 큰 기능입니다. Go 1.3은 이진 크기 및 런타임 속도 (특히 가비지 수집기)가 개선 된 것처럼 보이므로 훌륭합니다.
jmorgan

4

다른 생각은 Go가 여전히 비교적 새롭기 때문에 아직 게임 개발에 사용되는 많은 공통 라이브러리에 대한 바인딩이 없을 수 있다는 것입니다.


확실히 그렇습니다. 예를 들어, 나는 두 가지 Go / SDL 프로젝트를 보았는데 그 중 하나는 포기 된 것 같습니다. 나는 그것들 중 하나를 사용하는 (소규모의) 소수의 게임을 발견했습니다.
TSomKes

1
github.com/go-gl을 반드시 확인해야합니다. OpenGl 을 사용하는 경우 SDL이 아니지만 좋은 대안입니다. 벡터에는 github.com/Jragonmiris/mathgl 이 있지만 버그가 있습니다. Go는 C 라이브러리를 래핑하기가 매우 쉽고 makefile이 전혀 필요하지 않습니다. C 헤더 파일을 가져 와서 해당 기능을 직접 사용할 수도 있습니다.
Arne

0

Go를 사용하여 게임을 개발하지 마십시오. 목 주위의 알바트 로스 일뿐입니다. 게임 개발을위한 툴체인은 당신이 작성하는 언어보다 훨씬 더 깊게 확장되어있어 매번 턴마다 장애물을 발견 할 수 있습니다.

내가 틀리지 말고, 나는 새로운 언어를 가지고 노는 것을 좋아하지만, 만약 당신이 게임을 커뮤니티와 지원이있는 언어를 선택하게한다면 훨씬 나아질 것입니다.


9
반면에 작은 인디 프로젝트에서 새로운 언어로 플레이하기 위해 하드 코딩하려는 경우 "툴체인"이 과대 평가 될 염려가 있습니다.

2
나는 여기에 동의하지 않아야한다. 게임 개발과 관련된 대부분은 언어와 관련이 없습니다. OpenGL에 대한 질문은 C C ++ Go 또는 심지어 Java로 프로그래밍 한 날씨와 관련이 없습니다. 그런데 어떤 툴체인에 대해 이야기하고 있습니까? 그리고 왜 갈 수 없어야합니까?
Arne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.