2010년 4월 21일 수요일

C-- 0.01

그 동안 생각보다 바빠서 블로그에 거의 신경을 못 썼는데, 개인적으로 개발 중인 스크립트 언어가 있다.

 

http://code.google.com/p/cmm-lang/

 

주된 개발 동기는 다음과 같다.

  • 나도 Lua 같은 언어를 만들 수 있을까?
  • 차기 표준인 C++0x를 학습해보자.
  • 컴파일러 및 가상 머신을 한번 만들어보고 싶다.

그 외에도 멀티 코어 시대를 대비하여 쓰레드 안전하면서도 효율적인 스크립트 언어 역시 첫 개발 동기 중 하나였으나 내 수준에서는 시기 상조라 판단한데다 C++0x의 쓰레드 라이브러리를 지원하는 컴파일러가 없는 상황이라 차후로 미루어 두었다. 이 목표는 차후로 예정해둔 C/C++ 임베딩용 정적 타이핑 스크립트 언어로 넘길 생각이다. (사실 C--는 이에 대한 선행 학습적인 성격이 크다.)

 

현재 구현한 내용은 C--의 가상 머신과 컴파일러, 그리고 이를 간단하게 테스트해볼 수 있는 인터프리터이다. 사실 가상 머신은 최대한 간단하게 구현하기 위해 노력했기 때문에 큰 어려움이 없었는데, 컴파일러 같은 경우는 C/C++ 계열의 표현식 문법이 꽤 복잡하여 구현에 애를 먹었다.

 

 

언어적인 특징은 다음과 같다.

  • C/C++과 유사한 문법
  • 동적 타이핑
  • First class object로 다루어지는 함수
  • 정적 스코핑에 기반한 클로져 지원
  • 레퍼런스 카운팅에 기반한 가비지 콜렉션

대부분의 기능들은 초보적인 수준으로 지원되며, 이 외에도 코루틴이나 디버깅 등의 기능도 추가 예정에 있다. 다만, 현재 버젼 넘버를 보면 알 수 있겠지만 대단히 불안정하고, 또한 프로토타이핑 단계이기 때문에 대부분 기능들이 비효율적으로, 최대한 간단하게 구현되어 있으며 컴파일러 역시 최소한의 최적화조차 수행하지 않는 단계이다. 이는 나중에 시간이 되는대로 천천히 개선해나갈 생각이다.

 

 

현재 작업 환경은 VS2010/Win32로 그 외의 환경에서는 컴파일이 안 될 것이다. (현재 C++에서는 UTF-8을 wchar_t로 바꾸는 것이 표준 라이브러리 차원으로는 지원되지 않는 것 같아 이를 Win32 API에서 가져다 썼다.) 다만 TextLoader클래스의 역할이 텍스트 파일 -> null terminated wchar_t 배열이므로 이를 적당히 구현한 뒤 main.cpp 파일을 수정하면 gcc4.5에서는 아마 컴파일이 될 것으로 사료된다.

 

댓글 1개:

  1. 내용이 흥미롭군요. AngelScript 언어 엔진을 최근에 조금 보고있는데, 개인적으로 C++과 같은 스크립트 언어가 가장 이상적이라는 생각을 최근 해보고 있습니다. ^^ 잘되길 바랍니다.

    답글삭제