얼마전에 POPL’06 (http://www.cs.princeton.edu/~dpw/popl/06/ )이라는 프로그래밍 언어에 관한 컨퍼런스에 다녀왔는데, 여기에 초대강사로 Tim Sweeney가 둘째날 “게임 개발자관점에서 본 차세대 주류 프로그래밍 언어”라는 (The next mainstream programming language: a game developer's perspective) 주제로 강의를 했답니다.

저야 이 사람이 어떤 사람인지 몰랐는데, 약력을 보니 Epic Games의 창업자이고 Unreal 엔진을 제작했다더 군요. 강의 내용이 너무 재미있어서 혹시 여기에 오시는 분들께 도움이 될까 해서 소개해 드립니다.

먼저 POPL은 프로그램밍 언어에 관련된 이론이나 실제를 토론하기 위한 이쪽 분야에서는 꽤나 유명한 컨퍼런스입니다. 여기에 Tim이 초대된 것은 이번 컨퍼런스의 의장과 개인적으로 연락이 되었기 때문이랍니다. (의장의 학생중 하나가 Epic Games에서 인턴을 했다는 식…)

컨퍼런스에 참가한 사람들은 대개가 새로운 프로그래밍 언어를 설계하고 구현하는 학자들이때문에 항상 실제 사용자들의 목소리에 목말라(야하지만, 대개는 무시하지요)하고 있기때문에 특정 분야, 특히 게임 분야의 프로그래머가 바라본 현재 프로그래밍 언어의 문제점을 지적한 Tim의 발표는 무척이나 인기였습니다.

의장이 Tim을 아직도 프로그래밍을 하고 있는 “비판적인” 소비자(skeptical consumer)라고 소개하면서 발표가 시작됩니다.

발표자료는http://www.cs.princeton.edu/~dpw/popl/06/Tim-POPL.ppt 에서 구하실 수 있습니다. 설명은 가능한 자료의 순서대로 하겠습니다. 자료 내용중 이해가 안되는데 저도 설명을 안하고 있다면, 아마 저도 잘 이해 못해서 일 것입니다.

발표의 시작은 XBOX 360으로 발표준비 중인 Gears of War의 데모동영상으로 시작했습니다. (점잖은 교수님들께서도 꽤나 신나하시더군요). 초반에는 게임 프로그래밍에 대한 소개로 시작을 했습니다. 그리고서는 게임 프로그래밍을 세 분야로 나누더군요.

        - Shading : 그래픽 관련. HLSL/CG 언어 사용
        - Numeric Computing : 수학 계산 등. C++ 사용
        - Gameplay Simulation : 게임 상황을 모델링. C++/스크립트언어 사용

그리고서는 자신의 경험상 발생한 문제점들을 나열합니다.

        - Performance : 중요하지만, 그렇다고 (빠른) 어셈블러로 게임을 작성하던 시대는 지났다고 말하며, 10%의 생산성 향상을 위해서는 performance 의 10%를 포기할 수도 있다고 하더군요.
        - Modularity : Unreal 의 예를 들면서 좀더 쉽게 확장가능한 framework이 절시하다고 말하며 그 모습도 제시했습니다. (p26)

        - Reliability : C# (Java도 다를바 없죠)의 예를 들면서 컴파일러가 좀더 똑똑해진다면 개발자의 수고를 덜 수 있다고 강조합니다. (예를 들면, 컴파일시에 에러가 나지 않았다면, 실행중에도 에러가 없어야 한다는 말이죠.) 그리고, 이게 실현 가능할 방법들을 제시하죠. (p32-37) 주로 예로 Haskell을 들고 있습니다.

        - Concurrency : XBOX360은 3개의 CPU가 있답니다.암튼, 여러 쓰레드를 이용하는 프로그래밍이 쉽지 않은 문제여서, 현재는 “주의를 기울여서” 프로그래밍할 수 밖에는 없다고 합니다. 예를 들면 Unreal3 에서는 하나의 쓰레드가 다른 쓰레드들을 관리하는데 사용된다는 군요. 암튼 앞에서 나온 세 분야를 concurrency 관점에서 다시 살펴봤는데.

        oo Shading : 현재 기술(data parallel)로도 잘 되고 있음
        oo Numeric Computation : 개선의 여지가 있음. 예를 들어서 effect free의 경우 걱정없이 분산처리할 수 있음 (p48)
        oo Gameplay Simulation : 가장 어려운 분야인데, Software Transactional Memory(Concurrent Haskell에서 사용한 방법이랍니다)를 사용하면 개선의 여지가 있답니다.

발표의 뒷 부분은 문제제기의 시간이었습니다. 그 중 p58은 많은 생각을 하게 했습니다. Haskell이나 ML등이 학계에서 대표적인 언어로 자리잡고 있음에도 일반 개발자들이 사용하는 주류언어가 되지 못한 이유를 설명해 주고 있죠. 보다 많은 (유용한) 기능을 제공하지만, C류의 언어에 익숙한 개발자들이 쉽게 접근하지 못한다는 문제점말입니다.

결론적으로 Tim은 게임 플렛폼의 발전이 무섭다고 말했습니다. 현재 추세대로면, 2009년엔 20개의 CPU에 80개 이상의 쓰레드가 돌아가는 시스템 위에서 게임 프로그램을 작성해야 한다고 예상한답니다. 현재의 프로그래밍 기술로는 엄청난 노가다(!)가 예상되기에 새로운 혁신적인 프로그래밍 언어의 출현을 고대한다면서 발표을 마쳤습니다.

발표 후 질문중에 Haskell을 실제 게임 개발에 사용해봤냐는 질문이 있었는데, 예상했다는 식으로 (아주 여유있게 박수를 받으며) 준비된Back up 자료를 보여 줬습니다. (p63-67) 아직은 그래본 적이 없다는 대답입니다. 또 다른 질문은 온라인 게임에 관한 것이었는데, 실제 오가는 패킷이 작은 양이기 때문에 특별히 다를 것은 없을 것 같다는 설명과 그럼에도 불구하고 (자신이 말한) concurrency 문제는 한번 어긋나도 몇 msec면 다시 동기화 가능하지만,  온라인 게임(MMORPG)의 경우는 그 간격이 더 커질 수 있다는 차이가 있을 수 있겠다는 정도의 답을 했답니다.

발표장의 학자들은 실제 현장의 개발자로부터 이런 저런 불평과 소망을 들으니 매우 고무되어서 자기들과 같이 연구해보자는 요청을 많이들 했답니다.

정리를 하면서 발표자료를 다시 보니 제가 잘 이해 못한 내용도 많았다는 생각이 드는군요. 이 자료가 현업의 개발자분들이나 공부하는 학생분들께 도움이 되었으면 합니다. 작게는 다른 나라의 게임 개발자는 어떤 도구(프로그래밍 언어)를 원하고 있나에서 시작해서 보다 크게는 새로운 언어나 기술에 대한 호기심을 불러 일으키기를 바랍니다. 저의 경우에는 제가 공부하고 있는 프로그래밍 언어에 대한 지식이 상아탑을 떠나서 실제 현업에서도 충분히 적용될 여지가 많다는 교훈을 얻었습니다.

또하나, 기회가 되면 국내의 게임 개발자들분이나 기타 개발자분들과 같이 이런 비슷한 주제로 이야기할 수 있는 기회가 있었으면 하고 개인적으로 바래봅니다.