루아(LUA) 강좌 자료
LUA / 2012. 3. 5. 10:36
- 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 |