C++ 로 클라이언트/서버/툴 코드를 짜다보면 기계적으로 코딩만 많이 하지, 사실 하는 내용은 간단한 일인데... 라고 생각해본 적이 있는가?

언어에서 처리해주면 될 일을 일일이 손으로 구현하느라고 간단한 일을 복잡하게 하는 일을 잠시 멈추고 이상적인 게임 제작을 위한 언어를 생각해보면 어떨까?


먼저 C++ 로 지저분하게 짜게 되는 부분들을 생각해보자

1. FSM
FSM 으로 로직을 짜다보면 코드는 점점 지저분해지고, 로직의 흐름은 코드 여기저기로 흩어지게 된다. 재사용은 딴나라 얘기가 된다.
더 좋은 대안 : Coroutine

2. 이벤트 핸들러, 콜백
gui 나 다대다 충돌체크에 대한 처리 부분을 다루다 보면 코드가 지저분해지고, 재사용성도 점점 떨어진다.
더 좋은 대안 : signal/slot, closure

3. 각종 id
리소스 파일명이나 오브젝트 id, 기타 xml 내에서 쓰이는 문자열 상수 ('yes'/'no'등) 등을 스트링으로 처리하자니 비교에 너무 시간이 걸린다
더 좋은 대안 : symbol

4. 기나긴 switch/case
들어온 패킷의 헤더를 분석하여 적절한 핸들러를 호출할 때 보기흉하고 응집성이 강한 switch/case 를 쓸 수 밖에 없다
더 좋은 대안 : multi method

5. IOCP
시간이 오래 걸리는 작업을 비동기 처리로 처리하다보면 (예:소켓 작업, DB작업) 역시 소스가 지저분해진다
더 좋은 대안 : Future

6. 쓰레딩
멀티 코어의 장점을 살리면서 복잡하게 락을 거는 일은 직접 안 했으면 좋겠다
더 좋은 대안 : erlang 이나 io 식의 actor 모델

7. 자료구조
쓰기 편하고 빠른 해시테이블 구조가 언어랑 딱 붙어있었으면 좋겠다
더 좋은 대안 : 테이블

8. 선언적 정적 타입 시스템
수없이 다양한 예외를 가진 오브젝트들 일일이 클래스로 정의해서 구현하기는 싫다
더 좋은 대안 : 프로토타입

9. 템플릿
로직을 재활용하기 위해 복잡한 템플릿을 쓰기는 싫다
더 좋은 대안 : 덕 타이핑

10. 전처리기
툴의 ui 와 오브젝트의 프로퍼티를 연결하거나, 오브젝트의 직렬화, 마샬링등을 위한 처리를 하기 위해서 전처리기를 쓰는건 싫다
더 좋은 대안 : 리플렉션

11. 메모리 관리
메모리를 일일이 수동으로 풀어줘야 하는 구조는 싫다
더 좋은 대안 : 수동으로 조절 가능한 자동화된 가베지 콜렉터

12. 복잡한 파싱
xml 문서를 뒤지거나 작성하는 것이 편했으면 좋겠다
더 좋은 대안 : 빌더, Linq

위와 같은 기능들을 지원할 수 있는 풍부한 문법 구조,
속도에 민감한 부분, 혹은 C++ 용으로 만들어진 라이브러리를 쉽게 호출할 수 있는 구조
내부적 효율성
쉽게 디컴파일되지 않을 수 있는 구조
jvm 이나 .net clr 등의 실행환경에 의존하지 않고 바로 실행파일을 만들 수 있는 플랫폼

등이 모두 갖춰진 언어/환경 없을까요?

imcgames 의 김학규입니다