'Game Development'에 해당되는 글 89건
- 2010/04/28 뒤늦게 올리는 GDC 2010 리포트 (5)
- 2010/02/17 [해외 개발자 인터뷰] Tiago Sousa (4)
- 2010/01/04 Game Developer Blog Network 인증용 vefe3cc49 (냉무)
- 2009/12/18 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막
- 2009/12/02 크라이텍 아카데미
- 2009/10/20 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6)
- 2009/10/18 크라이엔진 3 발표와 크라이텍코리아 구인
- 2009/10/03 분산버전관리 머큐리얼로 개인작업 관리하기 (2)
- 2009/09/19 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10)
- 2009/09/02 gamescom 간단 참관기 (6)
- 뒤늦게 올리는 GDC 2010 리포트
- Game Development
- 2010/04/28 04:58
- GDC, GDC 2010, GDC2010
-
첫째 날 20100309
둘째 날 20100310
셋째 날 20100311
넷째 날 20100312
다섯 째날 20100313
기타
공개된 슬라이드들
- D3D11에서는 'Tessellation'과 'DirectCompute'가 큰 테마더군요.
- 저에겐 헷갈리는 주제였던 'HullShader'와 'DomainShader'의 역할에 대해 명확히 설명해 주었습니다.
간단한 로컬 방식과 비싸지만 더 그럴듯한 Catmull-Clark 근사 중 하나를 택할 수 있습니다.
각 방식의 비교
Left4Dead 2에서 피격 부위 렌더링에 관하여
DirectCompute를 사용한 Diffusion DOF
Metro에서는 간단한 Phong tessellation 방식을 사용
- D3D11에서 지원하는 D3D 리소스들의 별도 스레드 로딩은 상당히 유용해 보입니다.
- 컴포넌트 기간 엔터티 설계
- 렌더링 및 게임 스레드의 조율에 흔히 사용하는 더블버퍼링 대신 Overlapping Subset 방식 사용
- http://software.intel.com/en-us/articles/smoke-game-technology-demo/
- 스타크래프트2에 사용된 게임내 프로파일링 도구에 관해 주로 다룸
심지어는 메모리 단편화 검사 도구도 제공
부하 테스트. 모든 스타크래프트 유닛 총출동!
- 프로파일링 데이터를 수집한 후 저장해 놓아, 나중에 fps 그래프에서 튀는 부분을 찾아내어 그 시점에 어느 함수에서 가장 많은 시간이 소모되었는지 조사하는 등의 작업이 가능
- 특별히 규모가변성을 위한 공학적 선택을 하였다고 진술 (가령, 전통적인 포워드 렌더링 대신 지연 렌더링을 선택)
Data is a Four-Letter Word
- 어셋 스트리밍 관련
- 현재 툴팀에 있는지라 관심이 갔던 세션
- WAF라는 빌드 시스템 사용
- 대부분의 파이프라인 도구룰 파이썬으로 개발
- 자체 데이터 포맷인 ADF의 경우, 시리얼라이제이션 프레임웤이 포맷 규격에서 자동으로 C++ 헤더와 파이썬 코드를 생성해내는 방식 사용
Concrete Practices to be a Better Leader
- 번지에서 온 친구의 강연
- 매우 독창적인 프리젠테이션 스타일 선보임
- 영어만 가능하시면 http://www.gdcvault.com/play/1012346/Concrete_Practices_to_be_a_Better_Leader 여기서 시청할 것을 강력추천합니다.
- 특별한 내용은 없었음
- 트위터를 사용해 청중들한테 질문 받음
The Psychology of Game Design (Everything You Know Is Wrong)
- 유명한 시드 마이어의 강연
- 게임 플레이어와 기획자 사이의 암묵적 약속을 의미하는 'Unholy Alliance'라는 용어를 만들어냄
- Protect players from themselves!(플레이어를스스로 게임의 재미를 망치는 것을 막아라!)
Animation Warping for Responsiveness in FIFA Soccer
- 애니메이션 프로그래머들에게 귀중한 세션
- 자연스러운 애니메이션 기반 턴 동작 처리를 위해, 'warp segments'라는 영리한 개념을 사용했습니다.
- IK에 더해 별도의 와핑 기법을 사용함으로써 자연스러운 발의 볼 터치를 구현
APB: Creating a Powerful Customisation System for a Persistent Online Action Game
- Real Time Worlds가 커스터마이제이션 엄청난 투자를 했더군요. APB의 개발이 왜 오래 걸리는지 알 것 같았습니다...
- 일종의 텍스처 아틀라스(격자로 나뉜)와 메시 세그먼테이션으로 이음새 없는 캐릭터 커스터마이제이션과 런타임 성능이라는 두 마리 토끼를 동시에 노림
- 문신과 같은 단순 표식에 대해서는 Valve에서 나온 Distance-Field Encoding 기법 활용
- 매우 깔끔해보이는 엔드유저 커스터마이제이션 도구도 제공하더군요.
- Insomniac Games에 다니는 트위터 친구(@mike_acton)의 세션
- 너무 인기가 좋아 방 진입 실패;
- 슬라이드라도 여기서 http://www.insomniacgames.com/research_dev/articles/2010/1522262 보시길
Texture compression in real-time, using the GPU
- 짧았지만 매우 실용적이었던 세션이었습니다.
- PC, Xbox 360, PS3를 모두 지원하는 크로스플랫폼 솔루션
- 텍스처 압축에 관심이 있는 분이라면 슬라이드를 꼭 찾아보시길 권합니다.
The Imlementation of Rewind in Braid
- 조나단 블로Jonathan Blow는 리와인드 기능을 위해 매우 무식해 보이는 방법을 택했습니다. 매 프레임 전체 월드 상태를 저장하는 것이지요.
- 물론, 다양한 압축 기법을 적용하였습니다.
- 여기서 http://www.gamedev.net/columns/events/gdc2010/article.asp?id=1808 본 세션에 대한 더 자세한 정보를 얻으실 수 있습니다.
Animation and Player Control in Uncharted: Drake's Fortune and Uncharted II: Among Thieves
- 애니메이션 프로그래머들을 위한 또다른 세션
- 크라이엔진에서 했던 유사한 고민을 똑같이 하고, 비슷한 해법을 적용했음을 알 수 있었습니다.
- 가산(additive) 애니메이션의 몇가지 영리한 활용 예를 보여주었습니다.
Shears - Squeeze the Juice Out of the CPUs: Post Mortem of a Data-Driven Scheduler
- 'Shears'라는 명칭의 멀티플랫폼 병렬 프레임웤
- 굉장히 흥미로워 보였지만, 아쉽게도 자세한 기술적 내용의 공개는 꺼리는 눈치였습니다.
- 아래와 같은 스케줄링 에디터도 제공하더군요.
- 크로스플랫폼(PS3 SPU에 대해서도 추상화된 인터페이스 제공)
- 락프리 컨테이너 활용
- 쉬운 디버깅을 프레임웤의 핵심 기능으로 보고 작업했다더군요.
- RAD game tools에서 몇가지 새로운 도구들을 선보였습니다.
- Telemetry: 크로스플랫폼 지원의 타임라인 프로파일링 시스템
- Iggy: 플래시 기반 UI 미들웨어
- Hero Engine http://www.heroengine.com/ 부스에서 제공하는 에디터를 살펴볼 수 있었습니다.
- 서버 기반 협업 편집 지원
- C# 윈폼 기반의 깔끔한 GUI
- 크라이엔진의 샌드박스와 같이 효율적인 작업 공정을 위한 빠른 이터레이션을 지향
- 트위터에서의 GDC 2010 http://www.jesperjuul.net/ludologist/?p=953
공개된 슬라이드들
- Go With The Flow: Fluid and Particle Physics in PixelJunk Shooter http://fumufumu.q-games.com/gdc2010/shooterGDC.pdf
- Rendering with Conviction http://www.selfshadow.com/talks/rwc_gdc2010_v1.pdf
- GDC session slides now online - Mobile, OpenCL, COLLADA, OpenGL http://www.opengl.org/news/permalink/gdc-session-slides-now-online-mobile-opencl-collada-opengl/
- Links to "Intro to SPU Opts" referenced in John Hable's GDC session UNCHARTED2 HDR Lighting http://www.naughtydog.com/site/post/gdc_10_uncharted_2_hdr_lighting/
- The AI of BioShock 2: Methods for Iteration and Innovation http://www.onethree.org/gdc/
- NVIDIA @ Game Developers Conference 2010 http://developer.nvidia.com/object/gdc-2010.html
- Kings of Convenience - What Walmart Tells Us About the Future of Gaming http://publications.dice.se/publications.asp?show_category=yes&which_category=Production
- Concrete Practices to be a Better Leader http://www.gdcvault.com/play/1012346/Concrete_Practices_to_be_a_Better_Leader
- Three Big Lies: Typical Design Failures in Game Programming http://www.insomniacgames.com/research_dev/articles/2010/1522262
크라이텍 디너
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 뒤늦게 올리는 GDC 2010 리포트 (5) | 2010/04/28 |
|---|---|
| [해외 개발자 인터뷰] Tiago Sousa (4) | 2010/02/17 |
| Game Developer Blog Network 인증용 vefe3cc49 (냉무) (0) | 2010/01/04 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
- [해외 개발자 인터뷰] Tiago Sousa
- Game Development
- 2010/02/17 07:10
- CryTek, Tiago Sousa, 크라이텍
-
오랜만의 개발자 인터뷰입니다. GDC 강연과 GPU Gems 및 ShaderX 기고글로 유명한 렌더링 가이, 티아고입니다.
- 이름이 어떻게?
- 티아고 소사 – 일명 미스터T
- 어디 출신인가요?
- 포르투갈 리스본
- 어떤 일을 하고 있나요?
- 7년간 크라이텍에서 시니어 그래픽스 프로그래머로 일하고 있습니다. 파크라이, 크라이시스 및 GDC/E3/테크데모 작업에 참여했고,최근에는 CryEngine3 작업을 하면서 여러 플랫폼에 걸쳐 불가능을 가능으로 만들고 있습니다.
- 간단히 이전 경력을 요약해주세요.
- 여기가 첫 직장입니다 – 대학 일학년 때 크라이텍에 합류했지요.I came to Crytek when I was in my 1st year at college
- 비디오 게임 업계에서 일하는 이유는?
- 메가드라이브/슈퍼패미콤/스펙트럼 등 비디오게임 황금기의 게임과 콘솔들을 보면서 게임을 만들어보고 싶었습니다.
- 직업과 관련하여 필수 사이트를 알려주세요. (최대 셋)
- 셋은 너무 적군요. 일단 모든 그래픽스/콘솔 하드웨어 제조사 웹사이트가 필수고요, cgsociety.org에 영감을 주는 글들이 꽤 있고, realtimerendering.com과 같은 블로그도 매우 유용합니다.
- 5년 후의 본인 모습은?
- 실시간 그래픽스를 더욱 현실에 가깝도록 주무르고 있을듯 ^^
- 삶에서 가장 중요한 것은 무엇인가요? (혹은 인생관이 있다면 무엇인가요?)
- 제 아내와 가족, 그리고 무엇보다도 매일 하는 일에서 재미를 찾는 것
- 이 분야에 들어오고자 하는 사람들에게 조언이 있다면?
- 노력, 또 노력
원문보기show the original text
바쁜 일정에도 짬을 내어 설문에 응해준 티아고에게 다시 한번 감사를 전합니다. Thank you, Mr.T!
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 뒤늦게 올리는 GDC 2010 리포트 (5) | 2010/04/28 |
|---|---|
| [해외 개발자 인터뷰] Tiago Sousa (4) | 2010/02/17 |
| Game Developer Blog Network 인증용 vefe3cc49 (냉무) (0) | 2010/01/04 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
- Game Developer Blog Network 인증용 vefe3cc49 (냉무)
- Game Development
- 2010/01/04 20:34
- vefe3cc49
-
http://kgdn.tk/blog/
'Game Development' 카테고리의 다른 글
| 뒤늦게 올리는 GDC 2010 리포트 (5) | 2010/04/28 |
|---|---|
| [해외 개발자 인터뷰] Tiago Sousa (4) | 2010/02/17 |
| Game Developer Blog Network 인증용 vefe3cc49 (냉무) (0) | 2010/01/04 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
- 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막
- Game Development
- 2009/12/18 08:26
- composition, D programming language, data race, Design By Contract, double-checked locking, functional programming, memory barrier, Nested Class, RAII, subtyping, thread local
-
2009/09/19 - [Game Development] - 차세대 게임개발 언어로 D에 주목하는 이유 - 1
2009/10/20 - [Game Development] - 차세대 게임개발 언어로 D에 주목하는 이유 - 2
드디어 마지막입니다. 마지막인 만큼 강력한 놈들이 많이 나옵니다. 그 사이 시스템 프로그래밍 언어라는 같은 분야를 노리는 Go라는 강력한 경쟁자가 나타났습니다만... 여전히 D 언어만의 장점이 있습니다.
제가 이전 글 2009/06/03 - [Game Development] - Double-checked locking 이디엄의 함정 에서 설명한 것처럼 아래와 같은 double checked locking은 data race라는 문제가 있습니다. 메모리 배리어가 필요하지만 사용도 까다롭고 포터블하게 제공하기도 어렵죠. 그래서 C++0x에서 이를 위한 별도의 라이브리러 함수 std::call_once()를 제공하는 것이죠. 이렇듯 병렬 프로그래밍에서의 race 문제는 저수준에서 접근하기에는 문제가 너무 많습니다. 그래서 언어 차원에서의 지원이 중요한 것이죠.
D에서는 모든 변수가 기본으로 thread local 입니다. 여러 스레드 간 공유를 위해서는 변수 선언 시 따로 shared로 명시해주어야 합니다. 공유 가능하나 불변하는 값을 가지는 변수를 위한 immutable이라는 형 수식 키워드도 제공합니다. 이런 접근을 통해서 컴파일러는 shared로 지정된 변수들에 대해서는 읽기/쓰기 재정렬을 방지하고 해당 변수 접근에 대해 자동으로 메모리 배리어을 삽입할 수 있습니다. 위 DCL 문제는 다음과 같이 하면 해결되는 것이죠. (아래 코드에서는 scope(exit) 라는 D 언어의 RAII 지원도 확인하실 수 있습니다.)
또한 함수형 언어의 기반인 순수 함수도 지원합니다. 순수 함수란 수학 함수에서와 같이 결과값이 입력인 함수 인자에만 의존하고 부수 효과(side effect, 전역 변수나 멤버 변수를 수정하는 것과 같은 상태의 변화)가 없는 함수를 말합니다. 따라서 같은 인자를 주면 언제나 같은 값을 리턴합니다. 이러한 순수 함수의 장점은 그 본성으로 인해 동기화가 필요 없다는 것입니다. 병렬화가 아주 쉽다는 것이지요. D에서는 다음과 같이 순수 함수를 선언하면 컴파일러 순수 함수로 동작하도록 보장해줍니다. 보장이 안될 경우 컴파일 에러가 난다는 뜻이지요.
이를 이용하면 최근 manycore의 대두와 함께 각광을 받고 있는 함수형 프로그래밍 방식으로 개발하는 것도 가능합니다. 물론 메모리 배리어는 성능 손실을 가져오므로, shared 변수를 남용하면 느려질 수 있습니다. 따라서 shared 변수는 최소화하고, immutable 변수와 순수 함수의 사용을 극대화하는 것이 좋습니다.
어쨌든 결론은 D는 언어 차원에서 병렬성에 대한 해법을 어느 정도 제시해준다는 것입니다. D에서의 병렬 프로그래밍에 관해 더 알고 싶으시면 http://su.pr/1h5Anx의 문서를 참고하세요.
D 언어는 계약에 의한 설계(DbC, Design by Contract) 개념을 지원합니다. 단순한 assertion에 차원을 넘어 precondition, postcondition, invariant의 개념에서 스펙을 명시할 수 있습니다. 아래의 제곱근 함수에서 precondition, postcondition, 함수 바디가 각각 in, out, body 키워드를 통해 어떻게 사용되는지 확인하실 수 있습니다.
불변식invariant도 다음과 같이 invariant 키워드를 통해 지정할 수 있습니다. 다음의 Date 클래스에서는 제대로 된 날짜라면 갖춰야 할 조건이 항상 만족되도록 불변식을 지정하고 있습니다.
이러한 계약에 의한 프로그래밍은 상속 개념과도 어울려 동작하도록 되어 있습니다. 더 자세한 사항은 곧 출간 될 The D Programming Language를 참고해주세요.
마지막은 개체 지향 프로그래밍 관련 기능입니다. 많은 개체 지향 언어들어 서브타이핑의 방편으로 상속을 제공합니다. 하지만 상속은 워낙 결합도가 강해 의외로 단점이 많습니다. 또한 다중 상속은 구현상의 어려움도 많고 사용상의 주의점도 많아 C++ 이후의 대부분의 언어들이 지원하지 않고 있습니다. 보통 인터페이스 다중 상속만을 지원하지요. D도 마찬가지입니다. 인터페이스의 다중 상속만 가능합니다. 한편, 상속이 가지는 이러안 너무 강한 결합도라는 단점 때문에, 상속 보다는 composition을 통합 기능 결합을 추천하기도 합니다.
상속 이외에도, D 언어는 composition 기반 하에 상속과 같은 편의성을 제공하는 매우 유용한 서브타이핑 기능을 제공합니다. 예를 들어 Shape에서 상속 받아야 하는 구체 클래스가 있는데, DB와의 연동 기능(DBObject 클래스가 제공)도 필요하다고 가정해봅시다. D에서는 다중 상속 없이도 다음과 같이 할 수 있습니다.
alias this가 핵심인데요. 그렇게 해주면 unittest 섹션에서 볼 수 있는 것처럼 DBObject의 기능을 마치 상속 받은 것처럼 활용할 수 있습니다! (this()는 짐작대로 생성자입니다.) 더욱 놀라운 것은 다음과 같이 DBObject를 오버라이드하여 사용할 수도 있다는 것입니다. 이때는 D 언어의 또다른 강력한 기능인 nested class가 활용됩니다. (C++에서의 inner class 처럼 단순히 scope만 제한되는 기능이 아닙니다. 실제 outer 클래스 인스턴스에 멤버에 접근이 가능한 형태로 기능합니다. 더 자세한 설명은 역시 서적을 참고해주세요...;)
개인적으로 정말 깔끔하고 참신한 해법이라 생각합니다.
참고자료
D (programming language) - Wikipedia
이상으로 3회에 걸쳐 D 언어의 장점에 대해 살펴보았습니다. 역시나 본인의 이해력, 필력 부족으로 제가 느꼈든 참신함과 강력함이 제대로 전달되었을지 걱정입니다. 조금이나마 D 언어에 관심이 생기도록 일조했다면 다행이고요, 그런 분들은 필히 서적을 구입하여 일독하시기를 권합니다. ^^
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
2009/10/20 - [Game Development] - 차세대 게임개발 언어로 D에 주목하는 이유 - 2
![]() ~ The Sunny Side ~ by ViaMoi |
드디어 마지막입니다. 마지막인 만큼 강력한 놈들이 많이 나옵니다. 그 사이 시스템 프로그래밍 언어라는 같은 분야를 노리는 Go라는 강력한 경쟁자가 나타났습니다만... 여전히 D 언어만의 장점이 있습니다.
병렬 프로그래밍concurrent programming
제가 이전 글 2009/06/03 - [Game Development] - Double-checked locking 이디엄의 함정 에서 설명한 것처럼 아래와 같은 double checked locking은 data race라는 문제가 있습니다. 메모리 배리어가 필요하지만 사용도 까다롭고 포터블하게 제공하기도 어렵죠. 그래서 C++0x에서 이를 위한 별도의 라이브리러 함수 std::call_once()를 제공하는 것이죠. 이렇듯 병렬 프로그래밍에서의 race 문제는 저수준에서 접근하기에는 문제가 너무 많습니다. 그래서 언어 차원에서의 지원이 중요한 것이죠.
D에서는 모든 변수가 기본으로 thread local 입니다. 여러 스레드 간 공유를 위해서는 변수 선언 시 따로 shared로 명시해주어야 합니다. 공유 가능하나 불변하는 값을 가지는 변수를 위한 immutable이라는 형 수식 키워드도 제공합니다. 이런 접근을 통해서 컴파일러는 shared로 지정된 변수들에 대해서는 읽기/쓰기 재정렬을 방지하고 해당 변수 접근에 대해 자동으로 메모리 배리어을 삽입할 수 있습니다. 위 DCL 문제는 다음과 같이 하면 해결되는 것이죠. (아래 코드에서는 scope(exit) 라는 D 언어의 RAII 지원도 확인하실 수 있습니다.)
또한 함수형 언어의 기반인 순수 함수도 지원합니다. 순수 함수란 수학 함수에서와 같이 결과값이 입력인 함수 인자에만 의존하고 부수 효과(side effect, 전역 변수나 멤버 변수를 수정하는 것과 같은 상태의 변화)가 없는 함수를 말합니다. 따라서 같은 인자를 주면 언제나 같은 값을 리턴합니다. 이러한 순수 함수의 장점은 그 본성으로 인해 동기화가 필요 없다는 것입니다. 병렬화가 아주 쉽다는 것이지요. D에서는 다음과 같이 순수 함수를 선언하면 컴파일러 순수 함수로 동작하도록 보장해줍니다. 보장이 안될 경우 컴파일 에러가 난다는 뜻이지요.
이를 이용하면 최근 manycore의 대두와 함께 각광을 받고 있는 함수형 프로그래밍 방식으로 개발하는 것도 가능합니다. 물론 메모리 배리어는 성능 손실을 가져오므로, shared 변수를 남용하면 느려질 수 있습니다. 따라서 shared 변수는 최소화하고, immutable 변수와 순수 함수의 사용을 극대화하는 것이 좋습니다.
어쨌든 결론은 D는 언어 차원에서 병렬성에 대한 해법을 어느 정도 제시해준다는 것입니다. D에서의 병렬 프로그래밍에 관해 더 알고 싶으시면 http://su.pr/1h5Anx의 문서를 참고하세요.
계약 프로그래밍contract programming
D 언어는 계약에 의한 설계(DbC, Design by Contract) 개념을 지원합니다. 단순한 assertion에 차원을 넘어 precondition, postcondition, invariant의 개념에서 스펙을 명시할 수 있습니다. 아래의 제곱근 함수에서 precondition, postcondition, 함수 바디가 각각 in, out, body 키워드를 통해 어떻게 사용되는지 확인하실 수 있습니다.
불변식invariant도 다음과 같이 invariant 키워드를 통해 지정할 수 있습니다. 다음의 Date 클래스에서는 제대로 된 날짜라면 갖춰야 할 조건이 항상 만족되도록 불변식을 지정하고 있습니다.
이러한 계약에 의한 프로그래밍은 상속 개념과도 어울려 동작하도록 되어 있습니다. 더 자세한 사항은 곧 출간 될 The D Programming Language를 참고해주세요.
다중 서브타이핑multiple subtyping
마지막은 개체 지향 프로그래밍 관련 기능입니다. 많은 개체 지향 언어들어 서브타이핑의 방편으로 상속을 제공합니다. 하지만 상속은 워낙 결합도가 강해 의외로 단점이 많습니다. 또한 다중 상속은 구현상의 어려움도 많고 사용상의 주의점도 많아 C++ 이후의 대부분의 언어들이 지원하지 않고 있습니다. 보통 인터페이스 다중 상속만을 지원하지요. D도 마찬가지입니다. 인터페이스의 다중 상속만 가능합니다. 한편, 상속이 가지는 이러안 너무 강한 결합도라는 단점 때문에, 상속 보다는 composition을 통합 기능 결합을 추천하기도 합니다.
상속 이외에도, D 언어는 composition 기반 하에 상속과 같은 편의성을 제공하는 매우 유용한 서브타이핑 기능을 제공합니다. 예를 들어 Shape에서 상속 받아야 하는 구체 클래스가 있는데, DB와의 연동 기능(DBObject 클래스가 제공)도 필요하다고 가정해봅시다. D에서는 다중 상속 없이도 다음과 같이 할 수 있습니다.
alias this가 핵심인데요. 그렇게 해주면 unittest 섹션에서 볼 수 있는 것처럼 DBObject의 기능을 마치 상속 받은 것처럼 활용할 수 있습니다! (this()는 짐작대로 생성자입니다.) 더욱 놀라운 것은 다음과 같이 DBObject를 오버라이드하여 사용할 수도 있다는 것입니다. 이때는 D 언어의 또다른 강력한 기능인 nested class가 활용됩니다. (C++에서의 inner class 처럼 단순히 scope만 제한되는 기능이 아닙니다. 실제 outer 클래스 인스턴스에 멤버에 접근이 가능한 형태로 기능합니다. 더 자세한 설명은 역시 서적을 참고해주세요...;)
개인적으로 정말 깔끔하고 참신한 해법이라 생각합니다.
참고자료
D (programming language) - Wikipedia
이상으로 3회에 걸쳐 D 언어의 장점에 대해 살펴보았습니다. 역시나 본인의 이해력, 필력 부족으로 제가 느꼈든 참신함과 강력함이 제대로 전달되었을지 걱정입니다. 조금이나마 D 언어에 관심이 생기도록 일조했다면 다행이고요, 그런 분들은 필히 서적을 구입하여 일독하시기를 권합니다. ^^
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| [해외 개발자 인터뷰] Tiago Sousa (4) | 2010/02/17 |
|---|---|
| Game Developer Blog Network 인증용 vefe3cc49 (냉무) (0) | 2010/01/04 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
- 크라이텍 아카데미
- Game Development
- 2009/12/02 02:27
- CryTek, Crytek Academy, Fermi, GigaVoxels, Larrabee, Multi-Resolution Shading, 기가복셀, 크라이텍
-
크라이텍 10주년 파티와 더불어 자체 컨퍼런스 행사, "Crytek Academy"가 11월 26,27일 양일간 있었습니다. 파티와 마찬가지로 프랑크푸르트 본사뿐만 아니라 다섯 군데 지사에서 모두 참여하는 이벤트였습니다.
내부 인력이 진행하는 마스터 세션과 대학 및 인텔, 엔비디아 등의 업체에서 초빙한 강사가 진행하는 세션들이 있었습니다. 회사도 처음 시도하는 행사라 파티 준비와 함께 나름 부산했는데요, 처음치고는 비교적 매끄럽게 진행되었습니다.
기가복셀, 라라피, 페르미, 다해상도 셰이딩, 인지 기반 가시성에 따른 LOD 적용 등 흥미로운 세션들이 많았습니다. 아쉽게도 세션 자료들을 공유하기는 힘들어 보입니다. 휴대폰 사진으로나마 크라이텍 아카데미의 분위기를 감상하시길...;
매우 유익하고 재미있는 시간이었고, 앞으로도 꾸준히 이런 행사들이 있었으면 좋겠군요. 국내 몇몇 게임 개발사들도 이런 행사를 진행하는 것으로 아는데... 더욱 많은 개발사들이 도입하여 인재 계발과 지식 공유의 장으로 활용했으면 합니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
내부 인력이 진행하는 마스터 세션과 대학 및 인텔, 엔비디아 등의 업체에서 초빙한 강사가 진행하는 세션들이 있었습니다. 회사도 처음 시도하는 행사라 파티 준비와 함께 나름 부산했는데요, 처음치고는 비교적 매끄럽게 진행되었습니다.
기가복셀, 라라피, 페르미, 다해상도 셰이딩, 인지 기반 가시성에 따른 LOD 적용 등 흥미로운 세션들이 많았습니다. 아쉽게도 세션 자료들을 공유하기는 힘들어 보입니다. 휴대폰 사진으로나마 크라이텍 아카데미의 분위기를 감상하시길...;
매우 유익하고 재미있는 시간이었고, 앞으로도 꾸준히 이런 행사들이 있었으면 좋겠군요. 국내 몇몇 게임 개발사들도 이런 행사를 진행하는 것으로 아는데... 더욱 많은 개발사들이 도입하여 인재 계발과 지식 공유의 장으로 활용했으면 합니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| Game Developer Blog Network 인증용 vefe3cc49 (냉무) (0) | 2010/01/04 |
|---|---|
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
- 차세대 게임개발 언어로 D에 주목하는 이유 - 2
- Game Development
- 2009/10/20 21:10
- Alexander Stepanov, C++0x, concept, D programming language, D 언어, generic programming, lambda, metaprogramming, Range, 람다, 메타프로그래밍
-
이전글: 차세대 게임개발 언어로 D에 주목하는 이유 - 1
람다
함수형 언어의 대두와 함께 최근 각종 언어에서 람다의 지원이 유행인데요. C++0x에서도 지원 예정입니다. D는 역시 아주 깔끔하고 간소한 문법으로 익명 함수를 지원하고 있습니다.
위에서 다음 줄에 주목해주세요.
기본적으로 다음과 같은 문법으로 정렬 시의 정렬 함수를 지정해 줄 수 있습니다.
!(...) 안의 다음 부분이 실제 람다식입니다.
이와 같이 인자형이나 리턴 타입을 따로 명시해줄 필요도 없습니다. 또한, 전역 변수가 아닌 freqs 변수를 람다 함수 내에서 접근하고 있는데요. 이러한 기능으로 매우 강력한 람다식이 가능해집니다. 보통은 이런 기능을 위해 성능이 희생되는 경우가 많은데, D언어는 "지역 인스턴스화(local instantiation)"이라는 고유의 기능으로 간접 호출 없이 이러한 기능을 제공하고 있습니다.
참고자료
How Nested Functions Work - part1 by Walter Bright
How Nested Functions Work - part2 by Walter Bright
템플릿
C++에서 템플릿은 고급 기법에 속합니다. 대부분의 프로그래머들은 형 매개변수화 정도로만 템플릿을 사용하고, 코드생성엔진으로 템플릿 메타프로그래밍을 활용하는 것은 선택받은(?) 일부를 위한 흑마법의 영역으로 남겨져 있습니다. D는 이러한 템플릿의 강력함을 쉽게 활용할 수 있도록 설계되었습니다.
어떤 언어가 제너릭 프로그래밍을 제대로 지원하는지 평가하는데 일명 STL의 창시자인 Alexander Stepanov가 제시한 "스테파노프의 리트머스 테스트"가 유용합니다. 해당 언어 내에서 다음 세 함수를 구현할 수 있느냐가 바로 그 테스트입니다.
1. max 제너릭 함수
함수 정의 중간에 나오는 if가 신기하실 겁니다. 사용자가 크기 비교가 불가능한 타입들을 max 함수의 두 인자로 주었을 때, 깔끔한 에러 메시지를 출력하기 위해 제한을 거는 역할을 합니다. C++0x에 도입될뻔했던 concept의 기능을 어느정도 수행한다 보시면 되겠습니다.
아래와 같이 인자를 세 개 이상 받는 경우도 간단히 처리가능합니다.
2. swap 제너릭 함수
의외로 각 경우에 모두 최적으로 돌아가도록 구현하기 매우 힘든 경우 중 하나입니다. D에서는 위와 같이 구현하면 되는데요, pointsTo 함수를 어떻게 구현하는지는 설명하지 않겠습니다. (궁금하신 분은 책을 구입해주세요. ^^)
3. linearSearch 제너릭 함수
선형검색 제너릭 함수는 위처럼 D가 기본지원하는 range 개념을 이용해 매우 간단하게 구현됩니다.
참고자료
An Interview with A. Stepanov
이번 회는 여기까지입니다. 사실 짧은 내용과 부족한 글솜씨로 D의 강력함과 깔끔함을 충실히 전달하기가 힘들군요; 책을 사보고 싶은 욕구가 생기실 정도로만 동기부여가 되었으면 좋겠습니다. ^^
기타 참고자료
D (programming language) - Wikipedia
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
람다
함수형 언어의 대두와 함께 최근 각종 언어에서 람다의 지원이 유행인데요. C++0x에서도 지원 예정입니다. D는 역시 아주 깔끔하고 간소한 문법으로 익명 함수를 지원하고 있습니다.
위에서 다음 줄에 주목해주세요.
기본적으로 다음과 같은 문법으로 정렬 시의 정렬 함수를 지정해 줄 수 있습니다.
!(...) 안의 다음 부분이 실제 람다식입니다.
이와 같이 인자형이나 리턴 타입을 따로 명시해줄 필요도 없습니다. 또한, 전역 변수가 아닌 freqs 변수를 람다 함수 내에서 접근하고 있는데요. 이러한 기능으로 매우 강력한 람다식이 가능해집니다. 보통은 이런 기능을 위해 성능이 희생되는 경우가 많은데, D언어는 "지역 인스턴스화(local instantiation)"이라는 고유의 기능으로 간접 호출 없이 이러한 기능을 제공하고 있습니다.
참고자료
How Nested Functions Work - part1 by Walter Bright
How Nested Functions Work - part2 by Walter Bright
템플릿
C++에서 템플릿은 고급 기법에 속합니다. 대부분의 프로그래머들은 형 매개변수화 정도로만 템플릿을 사용하고, 코드생성엔진으로 템플릿 메타프로그래밍을 활용하는 것은 선택받은(?) 일부를 위한 흑마법의 영역으로 남겨져 있습니다. D는 이러한 템플릿의 강력함을 쉽게 활용할 수 있도록 설계되었습니다.
어떤 언어가 제너릭 프로그래밍을 제대로 지원하는지 평가하는데 일명 STL의 창시자인 Alexander Stepanov가 제시한 "스테파노프의 리트머스 테스트"가 유용합니다. 해당 언어 내에서 다음 세 함수를 구현할 수 있느냐가 바로 그 테스트입니다.
1. n>=2 의 원소들 중에서 최대값을 알려주는 제너릭 함수. 이 함수는 모든 정렬 가능 타입에 적용할 수 있어야 한다.D로 이러한 것들이 어떻게 가능한지 간단히 결과만 보여드리겠습니다.
2. 두 값을 효율적으로(예를 들면, 상수 메모리 소모) 뒤바꾸는(swap) 제너릭 함수
3. 임의의 컬렉션에서 한 아이템을 선형 검색하는 제너릭 함수. 컬렉션은 빌트인 타입일 수도 혹은 언어가 정의한 일련의 프로토콜을 만족하는 사용자정의 타입일 수도 있다.
1. max 제너릭 함수
함수 정의 중간에 나오는 if가 신기하실 겁니다. 사용자가 크기 비교가 불가능한 타입들을 max 함수의 두 인자로 주었을 때, 깔끔한 에러 메시지를 출력하기 위해 제한을 거는 역할을 합니다. C++0x에 도입될뻔했던 concept의 기능을 어느정도 수행한다 보시면 되겠습니다.
아래와 같이 인자를 세 개 이상 받는 경우도 간단히 처리가능합니다.
2. swap 제너릭 함수
의외로 각 경우에 모두 최적으로 돌아가도록 구현하기 매우 힘든 경우 중 하나입니다. D에서는 위와 같이 구현하면 되는데요, pointsTo 함수를 어떻게 구현하는지는 설명하지 않겠습니다. (궁금하신 분은 책을 구입해주세요. ^^)
3. linearSearch 제너릭 함수
선형검색 제너릭 함수는 위처럼 D가 기본지원하는 range 개념을 이용해 매우 간단하게 구현됩니다.
참고자료
An Interview with A. Stepanov
이번 회는 여기까지입니다. 사실 짧은 내용과 부족한 글솜씨로 D의 강력함과 깔끔함을 충실히 전달하기가 힘들군요; 책을 사보고 싶은 욕구가 생기실 정도로만 동기부여가 되었으면 좋겠습니다. ^^
기타 참고자료
D (programming language) - Wikipedia
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
|---|---|
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
- 크라이엔진 3 발표와 크라이텍코리아 구인
- Game Development
- 2009/10/18 06:50
- CryENGINE3, CryTek, MyCryENGINE, 게임잡, 크라이엔진3, 크라이텍
-
며칠 전 드디어 "크라이엔진 3"가 정식 발표되었습니다.
함께 공개된 MyCryENGINE 사이
http://www.mycryengine.com/
CryEngine 3 - Beauty Speed Interaction Trailer
더불어 한국지사에도 많은 일들이 생겼습니다. 세부 사항은 말씀드릴 수 없지만, 몇몇의 프로젝트와 차기 엔진 개발에 있어 한국지사가 상당히 중요한 부분을 담당하게 될 것오로 보입니다. 그에 따라 서포트 인력 외에도 본격 개발 인력들이 필요해졌습니다. (자세한 구인 상황은 아래 게임잡 링크 참조)
http://www.gamejob.co.kr/List_GI/GIB_Read.asp?GI_No=49427
이전글에서도 말씀드린 것처럼 여러 장점이 있으니 실력있는 개발자분들의 많은 지원 부탁드립니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
함께 공개된 MyCryENGINE 사이
http://www.mycryengine.com/
CryEngine 3 - Beauty Speed Interaction Trailer
더불어 한국지사에도 많은 일들이 생겼습니다. 세부 사항은 말씀드릴 수 없지만, 몇몇의 프로젝트와 차기 엔진 개발에 있어 한국지사가 상당히 중요한 부분을 담당하게 될 것오로 보입니다. 그에 따라 서포트 인력 외에도 본격 개발 인력들이 필요해졌습니다. (자세한 구인 상황은 아래 게임잡 링크 참조)
http://www.gamejob.co.kr/List_GI/GIB_Read.asp?GI_No=49427
이전글에서도 말씀드린 것처럼 여러 장점이 있으니 실력있는 개발자분들의 많은 지원 부탁드립니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 크라이텍 아카데미 (0) | 2009/12/02 |
|---|---|
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
| gamescom 간단 참관기 (6) | 2009/09/02 |
- 분산버전관리 머큐리얼로 개인작업 관리하기
- Game Development
- 2009/10/03 02:30
- dvcs, git, mercurial, perforce, 머큐리얼, 버전관리, 분산버전관리시스템, 퍼포스
-
우리회사는 버전관리에 퍼포스를 씁니다. 일부 정보를 로컬의 특정 폴더(.svn)에 두는 서브버전과는 달리 퍼포스는 모든 정보가 서버에 있습니다. 그래서 모든 작업에 서버와의 통신이 필요합니다. 그럼에도 규모가변성은 상당히 좋은 것으로 알려져있더군요.
가끔 중요 마일스톤이 다가오면 퍼포스 저장소를 락합니다. 그러면 리드의 허락이 있기 전까지는 커밋(퍼포스 용어로는 서브밋)이 불가능하죠. 보통 안정화를 위해 이러한 작업을 합니다. 문제는 해당 마일스톤 릴리즈와 전혀 상관없는 작업을 하는 사람도 작업물을 한참동안 커밋하지 못하게 된다는 것이죠. 특히 기간이 길어질 경우, 그 사이에 한 기능이 아니라 여럿을 작업해놓을 수 있는데, 이 경우 나중에 락이 풀리면 한꺼번에 커밋을 하게 되죠. 이렇게 여러 기능을 한꺼번에 커밋하는 것은 좋지 않죠. 나중에 문제가 생겨 그 중 한 기능만을 되돌려야 하는 등의 경우에 문제가 생기기 때문이죠.
이럴 때 로컬 버전 관리의 필요성이 느껴지지요. 이를 위해 최근 대유행인 DVCS(Distributed Version Control System)을 응용할 수 있습니다. 근본적으로 DVCS는 중앙저장소의 개념이 없기 때문에 이러한 로컬 버전 관리 작업에 최적일 수 있는 것이죠.
그 중에서도 파이썬 기반의 Mercurial을 사용하여 작업하는 과정을 보여드리겠습니다. 특히 윈도우탐색기에 통합되어 동작하는 TortoiseHg를 기준으로 설명합니다(아쉽게도 아직은 초기 버전이라 완성도가 TortoiseSVN에 비해 많이 떨어집니다).
이상입니다. 서브버전과 사용법이 상당히 유사하다는 머큐리얼의 장점 때문에 서브버전에 익숙하신 분이면 적응에 어려움이 없으실겁니다(이것이 또다른 인기 DVCS인 git과 차별하여 내세우는 점이죠. 다른 말로 하면, git은 익숙하진 않지만 강력한 명령어들을 많이 가지고 있다고 볼 수도 있습니다).
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
가끔 중요 마일스톤이 다가오면 퍼포스 저장소를 락합니다. 그러면 리드의 허락이 있기 전까지는 커밋(퍼포스 용어로는 서브밋)이 불가능하죠. 보통 안정화를 위해 이러한 작업을 합니다. 문제는 해당 마일스톤 릴리즈와 전혀 상관없는 작업을 하는 사람도 작업물을 한참동안 커밋하지 못하게 된다는 것이죠. 특히 기간이 길어질 경우, 그 사이에 한 기능이 아니라 여럿을 작업해놓을 수 있는데, 이 경우 나중에 락이 풀리면 한꺼번에 커밋을 하게 되죠. 이렇게 여러 기능을 한꺼번에 커밋하는 것은 좋지 않죠. 나중에 문제가 생겨 그 중 한 기능만을 되돌려야 하는 등의 경우에 문제가 생기기 때문이죠.
이럴 때 로컬 버전 관리의 필요성이 느껴지지요. 이를 위해 최근 대유행인 DVCS(Distributed Version Control System)을 응용할 수 있습니다. 근본적으로 DVCS는 중앙저장소의 개념이 없기 때문에 이러한 로컬 버전 관리 작업에 최적일 수 있는 것이죠.
그 중에서도 파이썬 기반의 Mercurial을 사용하여 작업하는 과정을 보여드리겠습니다. 특히 윈도우탐색기에 통합되어 동작하는 TortoiseHg를 기준으로 설명합니다(아쉽게도 아직은 초기 버전이라 완성도가 TortoiseSVN에 비해 많이 떨어집니다).
- 먼저 다운로드하여 인스톨합니다. 아쉽게도 재부팅을 요구합니다;
- 퍼포스와 연동된 워크스페이스에 머큐리얼 저장소를 만듭니다.
- 최초로 파일들을 등록합니다. 나중에 용량이 과도하게 커질 수 있으므로 퍼포스가 데이터도 관리하고 있던 경우라면 소스코드만을 추가하실 것을 권장합니다.
- 방금 추가한 것들을 실제 커밋합니다. 파일들의 개수 및 용량에 따라 시간이 좀 걸릴 수 있습니다.
- 이제 끝입니다. 로컬에서 작업하시다가 언제든지 머큐리얼 저장소에 커밋을 하실 수 있습니다.
- 나중에 퍼포스가 준비되면 여러 머큐리얼 커밋을 한꺼번에 서브밋할 수 도 있고, 적절한 버전으로 롤백하면서 여러번 나누어 서브밋할 수도 있습니다.
- 물론 퍼포스 저장소에 새로 올라오는 변경사항들은 주기적으로 머큐리얼 저장소에 동기화해주어야합니다.
- 머큐리얼 로그를 확인해보면 다음과 같은 모습일 수 있겠죠. Sync로 시작하는 것들이 퍼포스와 동기화하기 위한 커밋들입니다.
이상입니다. 서브버전과 사용법이 상당히 유사하다는 머큐리얼의 장점 때문에 서브버전에 익숙하신 분이면 적응에 어려움이 없으실겁니다(이것이 또다른 인기 DVCS인 git과 차별하여 내세우는 점이죠. 다른 말로 하면, git은 익숙하진 않지만 강력한 명령어들을 많이 가지고 있다고 볼 수도 있습니다).
![]() Habanero splash by Tambako the Jaguar |
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
|---|---|
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
| gamescom 간단 참관기 (6) | 2009/09/02 |
| GDC Europe 2009 참관기 (2) | 2009/08/25 |
- 차세대 게임개발 언어로 D에 주목하는 이유 - 1
- Game Development
- 2009/09/19 06:44
- Andrei Alexandrescu, array slicing, binarysearch, C++0x, D programming language, D 언어, unittest, 단위테스트, 이진검색
-
예전 모회사에서 새 게임 프로젝트를 준비할 때, C++ 대신 D 언어를 심각하게 고려한 적이 있습니다. 3년도 더 된 이야기입니다만... 결국 정식 디버거도 없는 열악한 개발 환경 등을 고려할 때 무리다 판단했었습니다.
그 사이 D도 더디지만 발전하여 D 2.0 스펙이 나왔더군요. 그리고 책도 출간 예정입니다. 그것도 C++ 구루의 한명인 Andrei Alexandrescu에 의해서 말입니다. 아직 몇개월이 더 지나야 책이 최종 출간될 것 같습니다만... 저는 출간 전 작성 중인 책을 미리 구입해 볼 수 있는 서비스를 통해 미완성본을 읽어보았습니다.
역시 그였습니다. D 1.0에서도 C++의 가려운 점을 많이 긁어주고 있다 생각했었는데, 그의 합류로 탄생한 D 2.0은 한층 더 발전한 느낌입니다. C++도 차기표준 C++0x로 많은 개선이 예정되어 있으나 그에 견주어도 여전히 매력적입니다.
그래서 차세대 게임개발 언어로서의 D의 강점을 앞으로 몇회에 걸쳐 다뤄볼까합니다. 자, 바로 시작해보죠.
- C++, Objective-C와 마찬가지로 C와의 하위호환성을 유지합니다.
- 이를 통해 게임개발에 필수적인 DirectX, OpenGL 등과 운영체제 API의 활용이 가능합니다.
- 그 밖에도 많은 공개/상용 C 라이브러리들을 D 언어와 조합하여 쓸 수 있습니다.
- 마지막 한 방울의 성능까지 짜내야할 부분에서 저수준으로 접근하는 것이 가능합니다.
- 언어 차원의 단위테스트/연관배열(일명, 사전)/배열쪼개기 지원
- Type-generic한 이진검색 구현의 예입니다.
- 8,9줄에서 파이썬에서와 유사한 배열쪼개기(array slicing) 기능을 확인하실 수 있습니다.
- C++0x에서와 같은 auto를 통한 타입 유추도 확인하실 수 있죠.
- unittest 키워드로 아주 간편하게 단위테스트를 작성할 수 있습니다. 이러한 단위테스트들은 컴파일 시 -unittest 인자를 주면 main 진입 전에 자동으로 수행됩니다.
참고자료
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
|---|---|
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
| gamescom 간단 참관기 (6) | 2009/09/02 |
| GDC Europe 2009 참관기 (2) | 2009/08/25 |
| GDC 유럽 2009 참관 세션 스케줄 (5) | 2009/08/14 |
- gamescom 간단 참관기
- Game Development
- 2009/09/02 06:30
- Diablo 3, gamescom, GDC Europe, PSP GO, 디아블로3
-
GDC Europe 2009의 마지막 날, gamescom이 시작되었습니다. GDC 세션들 중간중간에 짬을 내어 전시장을 둘러보았습니다.
2D와 3D라는 극명한 차이에도 현재 단계에선 멀리 보면 디아블로2의 액트2와 거의 흡사해보였습니다.
자세히 보시면 여전히 아이템별로 인벤에서 차지하는 칸수가 다름을 확인할 수 있습니다.
자세히 보시면 여전히 아이템별로 인벤에서 차지하는 칸수가 다름을 확인할 수 있습니다.
스킬트리
이상의 사진은 블리자드 직원들이 근접 사진을 찍지 못하게 하는 와중에 몰래 찍은 것들...
이상의 사진은 블리자드 직원들이 근접 사진을 찍지 못하게 하는 와중에 몰래 찍은 것들...
일단 짧게 플레이 소감을 말해보자면 디아블로2의 경쾌한 플레이 그대로였으며 제한된 컨텐츠에도 나름 재미있었다... 하지만 물론 개선된 그래픽 이외에 게임시스템에서의 신선한 점을 파악하기엔 짧은 시간이었습니다. 블리자드가 늘쌍 그래왔듯이 수많은 다듬기 과정을 거칠테고 그러면 분명 최종 게임의 모습은 지금과는 많이 달라질 것입니다. 물로 그만큼 출시일도 저멀리...
서비스샷;
시간상 자세히 둘러보지는 못했습니다만... 규모면에서 다소 실망스러웠던 GDC Europe에 비하면 볼만한 전시회였습니다. 대부분의 유명 부스들에서 최신 게임을 확인하려면 대기열을 통과해야 한다는게 시간이 부족했던 저로선 아쉬웠을 뿐이죠.
이상 시간이 더 많은 기억을 갉아먹기 전 부리나케 작성한 gamescom 부실 참관기였습니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
이상 시간이 더 많은 기억을 갉아먹기 전 부리나케 작성한 gamescom 부실 참관기였습니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
|---|---|
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
| gamescom 간단 참관기 (6) | 2009/09/02 |
| GDC Europe 2009 참관기 (2) | 2009/08/25 |
| GDC 유럽 2009 참관 세션 스케줄 (5) | 2009/08/14 |
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 마지막 (2) | 2009/08/07 |














Recent comment