나는 C(예, C)로 게임을 만든다 (2016)
Source: Hacker News
Why I Write Games in C (yes, C)
저는 특이한 존재입니다. 최근에 제가 만든 모든 개인 프로젝트 게임은 vanilla C로 작성되었습니다. 이런 경우는 거의 없으니, 제가 왜 그렇게 하는지 설명하는 것이 흥미로울 것 같습니다.
건조한 프로그래밍 언어에 대한 의견이 들어갑니다, you have been warned.
내가 언어에서 필요로 하는 것
- Reliability – 내가 직접 일으키지 않은 버그를 처리하느라 시간을 낭비할 여유가 없습니다.
- Longevity – 내 게임 대부분은 Flash용으로 제작했었는데, 이제 Flash가 사라지고 있습니다. 나는 구 게임을 새로운 플랫폼으로 포팅하는 데 시간을 쓰고 싶지 않으며, 새로운 게임을 만들고 싶습니다. 오래 지속될 것이라고 확신할 수 있는 플랫폼이 필요합니다.
- Portability – 특정 OS에 얽매이고 싶지 않고, 가능하면 콘솔용 개발 옵션도 갖고 싶습니다. 따라서 내가 사용하는 프로그래밍 언어가 이식성이 뛰어나고, 좋은 이식 가능한 라이브러리 지원을 제공하는 것이 중요합니다.
내가 원하는 언어
내가 원하는 (하지만 필수는 아닌) 목록에서 가장 중요한 항목은 단순함입니다. 언어 기능이나 기발한 “스마트” API를 찾아보는 것이 정말 피곤합니다. 이상적인 언어는 내가 외워서 한 번도 찾아볼 필요가 없는 언어입니다.
- 엄격한 타입 및 정적 분석 – 버그가 적고, 강력한 경고 메시지와 문제를 빠르게 찾아주는 도구 제공.
- 우수한 디버거 및 동적 분석 – 버그 추적이 창의적인 부담이 되지 않게 함.
- 성능 – 고해상도 실시간 그래픽을 목표로 하는 것은 아니지만, 더 많은 사이클이 있으면 현대의 강력한 컴퓨터에서 할 수 있는 일의 범위가 넓어집니다.
- 빠른 컴파일 – 10초 이상 기다리면 흐름이 끊깁니다; 생각에 맞춰 따라오는 컴파일러가 필요합니다.
- 데이터 중심 접근법 – 나는 OOP 전향자가 아닙니다. 데이터를 데이터로 다루고 상황에 맞는 코드를 작성하는 것을 선호하며, 모든 것을 클래스와 객체에 억지로 끼워 넣고 싶지는 않습니다.
대안들
- C++ – 여전히 게임에서 가장 흔한 언어이며 그럴 만한 이유가 있다. 나는 계약 작업 대부분을 이 언어로 하지만, 강하게 싫어한다. 필요는 충족하지만 원하는 바는 크게 못한다: 너무 복잡하고, 교묘한 버그를 만들기 쉽고, C에 비해 컴파일 속도가 느리다.
- C#와 Java – 장황하고 복잡한 괴물로, 프로그래머를 내가 반대하는 강한 OOP 스타일로 몰아간다. 복잡성을 숨기지만 실제로 그것이 문제를 일으키는 것을 막지는 못한다.
- Go – C의 현대적 해석처럼 매력적이지만, 전역 정지 가비지 컬렉션은 게임에 큰 고통이며, 라이브러리 지원이 부족하고 장기적인 지속 가능성이 걱정된다.
- 웹 개발 – 특히 Flash가 사라진 이후 무섭게 빠르게 변하는 환경이다. 나는 JavaScript를 정말 싫어한다; 너무 느슨해서 사람들이 큰 소프트웨어를 만들 수 있다는 것이 놀랍고, 시도할 의지도 없다.
- Haxe – 대부분의 대안보다 더 유망하고, 괜찮은 라이브러리 지원이 있지만, 상대적으로 젊고 지속 가능성에 대해 우려한다. 나는 표면만 살짝 다뤄봤다.
- 내가 직접 언어를 만들기 – 그 아이디어를 존경하고 가끔 시도해보지만, 기존 라이브러리 지원을 포기하고 미래 호환성을 전적으로 책임지는 것은 너무 부담스럽다. 또한 매우 어렵고, 나는 언어를 만들기보다 게임을 만드는 쪽이 더 좋다.
왜 C가 여전히 나에게 가장 맞는가
- C는 위험하지만 신뢰할 수 있다—손가락도, 채소도 자를 수 있는 매우 날카로운 칼이지만, 조심해서 사용하도록 배우기엔 충분히 단순하다.
- 빠르고, 컴파일 속도에 관해서는 더 빠른 것을 떠올릴 수 없다.
- 거의 모든 환경에서 실행되도록 만들 수 있으며, 보통 비교적 쉬운 노력으로 가능하다. 이것이 앞으로도 변하지 않을 것이라고 상상하기 어렵다.
- 라이브러리와 툴링 지원이 강력하고 지속적이다.
이 말을 할 때 약간의 슬픔이 섞여 있지만, 여전히 나에게는 그 언어다.
나는 절대 “당신도 C를 써야 한다”고 말하려는 것이 아니다. 내 취향은 꽤 구체적이고 특이하다. 나는 또한 대부분보다 더 많은 바닐라 C 코드를 이미 작성했으며, 그것이 내 편안함의 일부이기도 하다.
그래서, 그게 전부다 :-)