전에 일어난 일을 잊지 않는 것은 훗날에 있을 일의 스승이다. -사기
* 원문링크 :
http://lua-users.org/wiki/LuaVersusPython
http://lua-users.org/wiki/LuaVersusPython
- 제가 사용했던 경험에 비추어 주관적인 비교를 덧붙였습니다. 원문과는 약간의 차이가 있음을 밝힙니다.
1 개요 #
파이선
http://www.python.org/ 은 인기있는 스크립트 언어이다. 파이선과 루아 양쪽 모두 스크립팅을 지원하려는 어플리케이션에 임베딩되는 목적으로 일반적으로 사용될 수 있다. (역주 : 파이선은 독립적으로 사용될 수도 있다. 이것은 장점이 될 수 있음. 루아도 가능하나 파이선에 비하면 미흡.)
http://www.python.org/ 은 인기있는 스크립트 언어이다. 파이선과 루아 양쪽 모두 스크립팅을 지원하려는 어플리케이션에 임베딩되는 목적으로 일반적으로 사용될 수 있다. (역주 : 파이선은 독립적으로 사용될 수도 있다. 이것은 장점이 될 수 있음. 루아도 가능하나 파이선에 비하면 미흡.)
스크립팅은 게임에서 빈번히 사용되는 분야이다. 스크립팅 언어를 선택할때 고려해야하는 상당히 많은 요소가 있는 것이 사실이다. PC이냐 콘솔게임기냐에 따라 바뀌는 구조에 기초한 결정을 해야할 수도 있다. 빠른 CPU, 가상 메모리, 하드디스크 용량, 파이선의 다양한 라이브러리 자원등등에 대한 만족감은 여러분의 프로젝트를 더욱 빨리 끝내는데 도움을 줄 수도 있다. 하지만 이런 만족요소들이 필요없다고 한다면, 파이선은 최선의 옵션이 아닐 수도 있다.
2.1 파이선 #
- (장) 언어자체가 잘 구축되어있다. 다양한 쓸만한 기능을 가진 거대한 라이브러리 지원이 존재한다. 오프라인 작업에서도 매우 유용하다. (예를 들면, 툴 스크립팅). 예제 스크립트의 엄청나게 거대한 목록들 -
http://www.vex.net/parnassus/, 튜토리얼들 -
http://python.org/doc/current/tut/tut.html, 도움말 -
http://python.org/doc/ 과 일반 레퍼런스 메뉴얼 -
http://python.foundries.sourceforge.net/index.pl 이 존재한다.
- (장) 파이선은 "여지껏 경험하지 못한" 정말로 간단한 문법과 실행구조 및 객체지향성을 가지고 있다. 모듈 개념과 막강한 개발환경은 정말 부러울 정도다. 루아도 어느정도 이 조건에 근접하지만, 다소 스코프라던가 객체지향성에서 딸리는 것이 사실이다.
- (장) 언어자체가 실행되는 데 있어서 많은 기능을 가지고 있다. 심지어 아예 게임자체를 파이선으로만 만들 수도 있다.
http://pygame.org 참조.
- (단) 파이선의 메모리상 차지하는 규모는 사용자가 자신의 필요용량을 정하지 못할 경우, 한정하거나 미리 지정하기가 어렵다.
- (단) 임베딩용으로 사용될 때, 멀티쓰레드 어플리케이션에는 맞지 않다. (한개의 프로세스에서는 한개의 파이선 인터프리터만이 가능하다.)
- (단) 파이선은 공백에 민감하다. 특유의 들여쓰기 문법은 트루타입 환경에서 에디팅할 때 가독성을 도리어 떨어뜨릴 수 있다. (하지만, 들여쓰기는 모든 프로그래밍에 있어서 권장사항이므로 큰 단점으로 보기는 어렵다.)
2.2 루아 #
- (장) 더 빠르다.
http://www.bagley.org/~doug/shootout/ 참조. (이것이 redpixel이 루아를 게임 스크립팅에 사용하는 주된 이유다. ^^)
- (장) 파이선보다 훨씬 작은 배포본 크기를 가진다. python22.dll의 크기는 824kb이다. 표준 라이브러리를 제외한 기본 루아엔진(파서+컴파일러+인터프리터)의 크기는 100kb가 채 안된다.
- (장) 멀티쓰레딩 환경에서 사용하는 것이 가능하다. (덕분에 redpixel은 게임 서버용 스크립트로도 사용하고 있다. ^^) 파이선은 하나의 프로세서내에서 여러개의 인터프리터가 동작하는 것을 허용하지 않는다! 루아는 메모리가 허락하는 한, 맘먹으면 쓰레드마다 생성하는 것이 가능하다. 게다가 5.0에서는 강력한 coroutine(레퍼런스 메뉴얼에서 Thread 참조)이라는 기능을 지원한다. 이것은 멀티쓰레드 프로그램상에서 하나의 전역환경 및 데이타를 공유하면서 스택부분만 독립적으로 사용하는 것을 지원한다.
- (장) 훨씬 적은 메모리를 사용한다.
http://dada.perl.it/shootout/craps_cpumem.html 참조.
- (장) C 언어와의 통신을 위한 쓸만하고 간단한 API를 가지고 있다. 파이선의 리스트와 딕셔너리들을 C 언어상에서 생성하고 관리하는 것과 루아에서 테이블을 생성하고 관리하는 것의 난이도는 정말 엄청난 차이가 있다.
- (장) 복잡하고 에러가 발생할 수 있는 객체들의 참조 카운팅을 사용하지 않는다.
- (장) 루아는 "설정(configuration) 언어"로서 시작된 언어이다. 이것은 게임상에서 어떤 객체를 생성하고 상태지정하는데있어서 딱 맞는 언어라는 뜻이 된다. 반면에, 게임자체를 스크립트로 작성하고 싶다면 이것은 파이선이 더욱 맞는 타겟이 될 수 있다. 하지만, 기존 작성된 엔진에 스크립팅을 덧붙일때에는 루아가 훨씬더 유리하다.
- (장) 좋은 간단한 강력한 문법을 가지고 있다. 테이블과 익명 함수 기능은 다른 어떤 스크립트 언어보다도 루아의 용도를 다양하게 만들어준다.
- (장) 작고 단순하며 안정적인 코드 기반을 가지고 있다. 맘만 먹으면 그 코드를 고쳐서 여러분 맘대로 사용할 수 있을 정도이다. 파이선만큼 잘 문서화되어있고 주석이 붙어있지는 않지만 말이다.
- (단) 루아에 대한 소개 자료가 아직 많이 부족하다. 메뉴얼은 예제가 턱없이 부족하고 책도 나와있지 않다. 단지 유일한 문서는 레퍼런스와 위키, 메일링 리스트를 통한 지원뿐이다.
- (단) 루아는 단독 실행 인터프리터로서 사용하기에는 너무나 빈약하다. 인터프리터를 직접 만들어야 하는 부담이 있다.
- (단) 지원 라이브러리가 부족하다. 파이선에 비하면 거의 100분의 1 수준.
2.4 임베딩 #
- 기존 프로그램에 임베딩할 경우라면 파이선보다는 루아가 더 유리하다. 만일, 스크립트 기반으로 모든 것을 만들고 C로 스크립트의 기능을 덧붙일거라면 파이선이 단연 좋지만, 이미 있는 코드나 어플리케이션 기반에 일부 기능을 스크립트 기반으로 바꾸는데에는 루아가 유리하다고 생각한다.
- 물론 파이선도 임베딩 관련 API를 제공하지만, 호스트 프로그램과의 프로세스 통신으로 상호작용하기 때문에 성능저하는 필수적이라고 개인적으로 생각한다.
3 참고문헌 및 링크 #
- Crystal Space
http://crystal.sourceforge.net/ 는 양쪽 언어를 모두 지원한다. 이 엔진의 소스코드는 두 언어 중 어느 것을 사용할 것인지를 결정하는 좋은 예가 될 수 있다.
- Nebula Device
http://nebuladevice.sourceforge.net/ 도 TCL과 더불어 두언어를 모두 지원한다.
4 결론 #
개인적으로 게임 서버와 클라이언트 상태 설정, 이벤트 제어에 루아를 사용하고 있다. 파이선도 과거에 많이 참조를 한 까닭에 도입을 많이 생각했지만, 시스템 자체가 메인으로 들어가는 구조에 맞다는 생각을 많이 가지게 되었다. (즉, 게임 쯔꾸르같은 것을 제작한다면 파이선이 더 유리할 수 있을 것이다.
http://www.pygame.org를 참고하라.) 속도를 요구하는 게임엔진이 이미 개발되어있고, 일부분을 스크립팅으로 일반화하는 목적이라면 루아가 단연 유리하다고 생각된다.
http://www.pygame.org를 참고하라.) 속도를 요구하는 게임엔진이 이미 개발되어있고, 일부분을 스크립팅으로 일반화하는 목적이라면 루아가 단연 유리하다고 생각된다.








