루아(LUA) 강좌 자료
- 1 소개
- 2 루아가 뭐지?
- 3 lua 소식
- 4 링크
- 5 바인딩
- 6 주요 확장 라이브러리
- 7 IDE
- 8 역컴파일러
- 9 관련 프로젝트
- 10 메뉴얼
- 11 주요 아티클들
- 12 번역 및 팁
- 13 기타
- 14 patch
1 소개 #
- "스크립트"를 임베딩하는 게임시스템 제작은 상당히 구조적이고 재활용적인 코딩을 하게 만든다는 점에서 매력이 있는 것 같습니다. (불타오르고 있는~ 활활~ 간단히 말해 재미있습니다! o^.^o)
2 루아가 뭐지? #
- lua/소개논문 - DDJ에 96년도에 실렸던 루아에 대한 소개글 번역입니다.
- Lua vs Python - 루아와 요즘 상당히 각광받는 파이선과의 성능비교입니다. 혹시나 파이선 좋아하시는 분들은 그런가보군하고 읽어주시길...
3 lua 소식 #
http://www.lua.org/ftp/lua-5.0.2.tar.gz - 현재 정식 버전인 lua 5.0.2. 5.0에서의 몇몇 치명적인 버그를 패치한 버전입니다.
- lua 5.1 work6이 릴리스되었습니다.
http://www.lua.org/work/lua-5.1-work6.tar.gz에서 받을 수 있습니다.
- work6에서의 두드러진 달라진 점
- lualib.a가 lua.a로 병합되었습니다
- "loadlib"함수가 package의 맴버로 들어갔습니다
- 모든 타입에서 메타테이블이 가능합니다 단, 여전히 __gc는 일반 userdata에서만 가능(lightuserdata 지원 X)
- 나머지 연산자 ('%') 추가 -> __mod 메타메소드에 대응
- 새로운 연산자 *t 추가(테이블 t의 크기) --> __siz 메타메소드에 대응
- 기존 5.0.2와의 차이
- lua_gc() API : 아직 문서화는 되어있지 않지만 아마도 가장 큰 차이일듯. GC처리량을 세부적으로 지정할 수 있도록 한 것 같습니다.
- 정수형 타입이 생겼네요. integer라는 별도의 타입으로 관리됩니다.
- 메모리 할당 함수를 별도의 함수포인터로 뽑아놓았네요. 메모리 풀링과 같이 별도의 malloc()을 만들어 처리해야할 경우 유용할 듯.
- luaconf.h라는 별도 설정용 헤더화일이 있습니다.
- luaL_setfield() / luaL_getfield() 가 생겼습니다. 테이블에서 문자열 인덱스로 지정된 값을 . 연산자를 사용해서 바로 접근할수 있도록 한 기능을 API에도 마련을 했네요.
- work6에서의 두드러진 달라진 점
http://www.lua.org/pil/ - programming in lua. 루아 관련 최초의 책이죠. 온라인으로 공개했네요.
http://www.lua.org/ftp/refman-5.0.pdf - 레퍼런스 메뉴얼
http://sourceforge.net/project/showfiles.php?group_id=32250 - short 레퍼런스 (루아5)
- lua 5.0 beta의 비호환성요소들 - 메일링리스트에서 퍼왔습니다.
- Lua/5.0.2/Note - 5.0.2버전에서의 경험담.
lua 5 내부구조 - lua의 동작원리를 설명한 논문
4 링크 #
http://www.lua.org - 루아 스크립트 홈페이지
http://lua-users.org/wiki/ - 루아 사용자 그룹. 위키위키로 되어있음.
http://sourceforge.net/project/showfiles.php?group_id=32250 - lua-users.org의 소스포지 자료실. API 퀵 레퍼런스, 스크립트 퀵 레퍼런스 문서있음.
http://archive.neotonic.com/archive/lua-l
http://lua-users.org/lists/lua-l/ - 메일링 아카이브 검색.
http://www.keplerproject.org/ - 각종 루아5 관련 프로젝트를 통합하여 운영하는 곳. boost 라이브러리와 비슷한 방식인듯.
http://www.lua.org/ftp/ - 루아의 베타 배포본 및 레퍼런스 메뉴얼을 받아볼 수 있는 곳 입니다.
http://www.gpgstudy.com/gpgiki/LuaLanguage - GpGiki 내의 루아 언어에 대한 설명입니다.
http://www.gpgstudy.com/gpgiki/LuaStudy - GpGiki 내의 루아 스터디 위키 공간.
http://members.chello.nl/~w.couwenberg/ - lua 아티클 몇가지.
http://www.mupsych.org/~rrt/Lua - lua 리눅스 배포본. bitwise 및 패턴 매칭(정규표현식, PCRE) 라이브러리 있음.
http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/ - Luiz Henrique de Figueiredo라는 사람의 lua5기반 라이브러리 모음. (대단!)
http://www.lifeisforu.net/programming/lua/ - 최도경님의 루아관련 페이지. 기본 메뉴얼 번역과 아티클 번역, 링크가 있습니다. 깔끔합니다.
http://www.jucs.org/jucs_9_8/luats_a_reactive_event - 루아 Tuple Space (luaTS)에 대한 논문. 흥미로운 구조. 비슷한 것으로 SUN의 javaspace가 있죠.
http://lua-users.org/lists/lua-l/2003-06/msg00416.html - 전역 환경테이블 교체기법.
5 바인딩 #
http://lua-users.org/wiki/CppBindingWithLunar - C++ 인스턴스를 바인딩하는데는 가장 간편한 방법일 듯 합니다. 버전 5.0 이상.
- Luabind - C++ 코드를 루아로 올려주는 템플릿 라이브러리. boost.python에 영향을 받은 듯. 루아 5 전용.
LuaPlus - C++ 바인딩 라이브러리. 표준 루아 소스를 다소 변형시켜 구현하고 있다는 것이 흠. (즉, 루아자체가 리뉴얼되면 호환성 미지수. 업글이 한박자 늦을듯.)
http://www.tecgraf.puc-rio.br/~celes/tolua/ - C++ 바인딩 툴. 별도의 전처리과정 필요. 루아 5 지원.
http://www.codenix.com/~tolua/ - tolua++. 기본 tolua를 확장한 것. 루아 5 지원.
- CaLua 이야기 - C <-> 루아 바인딩 라이브러리. 꽤 사용하기 편함. LGPL 라이센스. 루아 5 전용.
http://www.fscnation.com/users/glo/CPB/ - 괜찮은 아이디어의 C->lua바인딩 라이브러리. vc.net 전용인 것이 흠.
6 주요 확장 라이브러리 #
http://luaforge.net/projects/lrexlib/ - 정규표현식 확장 라이브러리. PCRE 지원.
http://www.tecgraf.puc-rio.br/luasocket/ - socket 뿐만 아니라 HTTP, FTP관련 프로토콜 처리도 구현한 확장 라이브러리. select()를 멀티플렉서로 사용하므로 대규모 서버 코딩에 사용하기에는 무리가 있다. P2P정도에는 알맞을 듯. 일부를 lua로 작성한 것이 특이하다. 현재 2.0 베타2.
http://www.tecgraf.puc-rio.br/~diego/luathreads/ - luathread. 루아상에서 멀티쓰레드 기능 및 동기화기능 제공. 현재 mutex와 상태변수(conditional value)만 지원.
http://www.luascript.thersgb.net/index.htm - wxLua. wxWindows port.
- luaSQL 이야기 - luasql. 루아에서 DB연결을 가능하게 해주는 라이브러리. mysql, postgresql, oracle 지원.
http://domingo.dad-it.com/lua-sqlite.whtm - sqlite 를 루아에서 사용가능하게 해주는 라이브러리.
http://mega.ist.utl.pt/~tngd/lua/lsqlite.tar.gz - 또다른 sqlite 바인딩 라이브러리. (lua5)
http://www.nessie.de/mroth/lua-sqlite3/ - sqlite3 바인딩.
http://luatask.luaforge.net/ - 일종의 쓰레드 라이브러리. 쓰레드간 통신에 루아를 사용한 것이 특징.
http://www.tecgraf.puc-rio.br/~celes/gllua/ - gllua. Opengl을 사용하게 해줌.
http://www.andreas-rozek.de/Lua/Distributions/index_en.html - 루아의 win32 포팅 및 tklua, gllua, luasocket을 담고 있는 사이트. (4.1a 기반)
http://www.tecgraf.puc-rio.br/cgilua/ - 루아 CGI 프로젝트. 웹서버에서 루아스크립트로 웹서비스를 하자! (3.2기반)
http://www.workspacewhiz.com/Other/LuaState/LuaState.html - C++ Wrapper중 하나. 좀 덩치가 큼. (4.1기반)
http://jove.prohosting.com/~philho/softwares/PhiLhoSoft/Lua/index.html - Win32용 배포본 사이트. (5.0alpha까지 있음.)
- LUA/Pickle - 파이선과 같은 다른 스크립트 언어에서도 많이 사용하는 직렬화 기법. 테이블을 포장해서 네트워크 전송가능한 문자열로 변환해주며, 역변환도 가능하게 해주는 소스코드.
http://www.telemidia.puc-rio.br/~alesio/alua/index.html - Alua. 이벤트 기반의 통신 구조를 구축하는 것이 목적. 뭐, 다른 네트워크 프레임워크에서도 흔히 쓰이는 기법이 되버렸죠.
http://lua-users.org/wiki/LuaPack - 펄에 이런 기능이 있다는데 제가 펄을 잘 안써봐서리...
어쨌든 쓸만한 라이브러리입니다. 간단한 이진화일을 읽어들이는데 유용할 듯.
http://www.tecgraf.puc-rio.br/~rcerq/luacom - lua상에서 active X 콘트롤을 억세스할 수 있게 하는 라이브러리입니다. 루아5지원가능.
http://www.keplerproject.org/luaexpat/ - C XML 라이브러리인 expat 바인딩 라이브러리. (lua5) expat 이야기 참조. 현재 expat에는 xmlparse.h화일을 사용하지 않으므로 lxplib.h부분을 다음과 같이 고쳐주어여 빌드됩니다.
... #include <assert.h> #include <stdlib.h> #include <string.h> - #include <xmlparse.h> ---- + #include <expat.h> #include <lua.h> #include <lauxlib.h> #include "lxplib.h" ...
http://www.keplerproject.org/luaxmlrpc/ - xmlrpc 루아 바인딩 구현(lua5) 그냥 lua 스크립트로 작성되어있음.
http://www.keplerproject.org/venv/ - 루아 가상 전역환경 테이블 교체 라이브러리. 루아 스크립트로만 작성됨. 간단한 아이디어이면서 필요할 때가 있는 기능이죠.
http://mega.ist.utl.pt/~tngd/lua/lzlib.tar.gz - zlib 바인딩 라이브러리. (lua5)
- luaDB - 루아용 ODBC 연결툴 - 오옷! 정말 유용한 공개 라이브러리입니다. 루아를 사용하시는 분은 이것을 사용하시면 그냥 루아자체가 ODBC대용이 됩니다. DB 연결부분을 한번이라도 코딩해보신 분은 그 유용함을 아실수 있을겁니다.
http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/srlua.tar.gz - 루아 스크립트를 컴파일한 후 인터프리터를 붙여서 실행화일로 만들어주는 툴. 소스 포함. 루아 5 전용.
http://www.keplerproject.org/lualogging/ - 루아 기반의 로깅기능 모듈. 간단하게 화일이나 기타 다른 기록 대상으로 로깅을 할수 있게 해줍니다. 네트워크나 클라이언트 콘솔에 루아를 붙여 사용하는 경우 유용할 듯.
http://www.keplerproject.org/copas/ - coroutine 기반의 demultiplexer. 성능은 미정이지만 아이디어는 좋다.
6.1 쓸만하지만 수정해서 사용할만한 것들 #
6.2 아주 국한적인 용도 #
http://luaforge.net/projects/lua2js/ - lua소스를 javascript로 변환해준다.
7 IDE #
- 개인적으로는 scite가 가장 유용합니다.
http://blua.sourceforge.net/ - WOW 에디팅용으로 개발된 듯한 lua IDE. 아직 화일은 정식릴리스되지 않음. java로 개발.
8 역컴파일러 #
완벽한 역컴파일은 하지 못한다. 소스를 잃었을 경우 사용하면 좋을듯.9 관련 프로젝트 #
mod_lua - php와 같이 lua를 사용할 수 있도록 해주는 아파치 모듈.
10 메뉴얼 #
- LUA 5.0 C API 메뉴얼 번역 - Lua 5.0에서는 이전 버젼과 많이 바뀌었더군요. (덕분에 프로젝트 중에 코드를 엎고 있답니다.
) 그래서 번역을 해보고 있습니다. 정식이 아니라 5.0 알파버젼을 기준으로 한 것임을 밝힙니다.
- LUA 5.0 auxlib 문서 - lua-users.org의 위키에서 퍼왔습니다. 표준 메뉴얼에는 설명이 생략되었지만 꽤 자주쓰이는 함수들이죠.
- LUA/메타테이블이야기 - Lua 5.0에서의 메타테이블에 대한 번역입니다. 프로그래밍 레퍼런스에서 추출해 정리했습니다.
- LUA/coroutine - 5.0beta 이후부터 사용가능한 coroutine에 대한 내용.
- C에서 Lua호출하기 - 파연님의 강요(?)로 작성해보았습니다.
- LUA/string라이브러리 - 문자열 관련 라이브러리 테이블인 string에 대한 부분만 정리, 번역했습니다.
- LUA/화일입출력 - 화일 입출력에 대해 간단히 정리.
- LUA 튜토리얼 - 자작 튜토리얼입니다.
11 주요 아티클들 #
- LUA Tutorial - 루아 튜토리얼.
- LUA FAQ - 루아에 대한 질문/응답 모음.
http://www.gpgstudy.com/gpgiki/LuaCppBindingTemplate - Lua 에 C++을 바인딩하기 위한 템플릿(GpGiki)
C++빌더에서 lua빌드방법
12 번역 및 팁 #
- 실시간 프로그램상에서의 LUA - 루아 다루기 팁.
- Lua/DoItYourselfCppBinding - C++ 클래스 인스턴스를 userdata로 바인딩하는 방법
- LUA 최적화 - 지역변수를 사용한 최적화
- Lua/OptimisingGarbageCollection - 실시간 어플리케이션(예를 들면 슈팅게임)에서 문제가 될 수 있는 gc에 대한 아티클입니다.
- LUA 이진 화일 입출력 예제 - LUA 5.0알파에서 실행되는 화일 복사 예제 코드입니다.
- LUA/LUA function의 참조를 C 언어상에서 저장했다가 다시 호출하기 - 메일링 리스트에서 퍼왔습니다.
- LUA/loadstring()을 이용한 동적 테이블 선언하기 - 문자열로 넘겨진 변수명으로 선언을 해버리는 방법입니다.
- LUA/VRML에서 정점 데이타 추출코드 - 아는 선배가 잠깐 부탁해서 작성해 본 예제입니다. 화일입출력 예제로서 좋은 보기가 될 듯하네요.
- LUA/컴파일된 코드청크 덤프하기 - 루아 배포본에 포함되어있는 test/luac.lua를 보고 정리해본 것입니다.
- LUA/API/청크로딩하기 - 루아 C API 중에서 청크로딩하는 부분만 번역한 것입니다.
- LUA/XML 파서만들기 - 루아 코드로만 간단하게 만든 xml 파서 예제.
- LUA/URLencode구현코드 - cgilua에서 퍼왔습니다.
- LUA/coroutine활용 - coroutine 활용법에 대한 논문이 lua 메인홈피에 있어서 요약해봅니다.
- luabind/Cpp와 루아 클래스간 상호 참조 및 호출 예제 - 이전에 작성해본 간단한 테스트 코드입니다.
- luabind/미리 메모리 할당된 Cpp 인스턴스를 루아 스크립트상에 등록하기 - 메일링 리스트에서 퍼왔습니다.
- luabind/CPP 인스턴스의 포인터를 gc당하지 않게 루아에 등록하는 예제 - &연산자를 사용하여 레퍼런스로 넘기면 되더군요.
- luabind/object에 nil값 저장하기 - 가끔 경우에 따라 일반 값이 아닌 nil값을 반환하고 싶을때가 있습니다. 그 때 사용하는 방법.
- luabind/특정 CPP 클래스에 루아 함수 콜백을 지정하는 방법 - C++ 객체내에서 특정 메소드만을 루아 함수로 지정하고자 할때 유용한 방법.
- luabind/property로 루아 테이블을 반환하기 - 실시간 효율은 다소 떨어지지만 이렇게 만들면 스크립트상의 가독성이 높아집니다.
- luabind/루아문자열에관한여러가지 - 널문자 포함여부에 관한 내용입니다.
http://lua-users.org/wiki/FiltersSourcesAndSinks
13 기타 #
- lua/과거간단질의응답 - 파연님 및 기타 몇몇 분들이 적어주셨던 질답입니다.
14 patch #
- 루아자체가 오픈소스라 일부기능을 고치면 꽤 쓸만한 부분이 있더군요. lua-user 위키에서 배껴와 정리합니다.
http://lua-users.org/wiki/ResumableVmPatch - 기존 coroutine에 이식성을 희생하지 않고 몇가지 기능을 덧붙인 것. 표준에 포함되면 좋겠다.
5.1 work5 버전 전용.
- LUA/patch/rubylikeself - ruby 스크립트의 @ 연산자 활용을 lua에 적용한 패치
http://lua-users.org/wiki/ImprovedCoroutinesPatch - (5.0.2) coroutine의 효율을 높인 패치. 완전히 새로운 API 제시.
'LUA' 카테고리의 다른 글
Lua 04. 문자열 (1) | 2012.03.05 |
---|---|
Lua 03. math (3) | 2012.03.05 |
Lua 02. 함수 (1) | 2012.03.05 |
Lua 01. 문법 (0) | 2012.03.05 |
Luci Reference: Templates (3) | 2012.02.17 |