사용자 도구

사이트 도구


kb:luaapi

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:luaapi [2014/11/08 15:22] (현재)
줄 1: 줄 1:
 +====== Lua API ======
 +루아 C API를 설계할 때, 최우선적으로 고려하는 사항이 "​간단함(simplicity)"​이라고 한다. 그래서 조그만 일 하나를 수행할 때도, 상당히 많은 함수들을 이용해야 한다. 이미 루아에 익숙한 사람이라면 괜찮겠으나,​ 처음 배우는 사람은 상당히 고달프다.
 +
 +그래서 각각의 API에 대한 설명와 함께, 그 API를 쓰려면 어떤 API들을 차례로 불러야하는가를 정리해보기로 했다.
 +
 +
 +====== 스택에 관하여... ======
 +일단 루아 API를 이해하기 위해서는 먼저 스택에 대한 이해가 선행되어야 한다.
 +<​code>​
 +     ​+--------+
 +     ​| ​ top   | -1
 +     ​+--------+
 +     ​| ​       | -2
 +     ​+--------+
 + ... |        | -3
 +     ​+--------+
 +  3  |        | ...
 +     ​+--------+
 +  2  |        |
 +     ​+--------+
 +  1  | bottom |
 +     ​+--------+
 +</​code>​
 +모든 값은 bottom 에서 top 방향으로 쌓인다. 스택에 들어있는 값을 액세스하기 위해서는 인덱스를 이용해야 하는데, 인덱스에는 두 가지가 있다. 첫번째는 양수로서 스택의 제일 밑, 즉 제일 오래된 값부터 1씩 증가해 가는 인덱스다. 두번째는 음수로서 스택의 제일 위, 즉 제일 새로운 값부터 1씩 감소해 가는 인덱스다.
 +
 +루아는 다른 언어와의 통신(?​)을 위한 특별한 클래스 같은 것을 지원하지 않기 때문에, 모든 통신은 스택을 이용하게 된다. 실제로 대부분의 함수가 스택 인덱스를 인수로 요구한다는 것을 금방 알 수 있을 것이다.
 +
 +일반적인 스택 인덱스 외에 특별한 슈도 인덱스(pseudo-index)가 두 가지 존재한다. 이는 lua.h 파일에 보면 나온다.
 +<code cpp>
 +#define LUA_REGISTRYINDEX (-10000)
 +#define LUA_GLOBALSINDEX (-10001)
 +</​code>​
 +LUA_REGISTRYINDEX 값은 레지스트리를 위한 슈도 인덱스이고,​ LUA_GLOBALSINDEX는 전역 테이블을 위한 슈도 인덱스이다. C/C++에서 전역 변수 사용을 별로 추천하지 않듯, 루아에서도 레지스트리나 전역 테이블은 될 수 있는 한 사용을 삼가하는 게 좋다.
 +
 +====== API 목록 ======
 +  * [[LuaApiState|State]]
 +    * 루아 시작하기 및 끝내기
 +    * lua_open, lua_close
 +  * [[LuaApiStack|Stack]]
 +    * 스택 다루기
 +    * lua_push...,​ lua_pushcclosure,​ lua_pushfstring,​ lua_concat, lua_type, lua_is..., lua_to..., lua_gettop, lua_settop, lua_pushvalue,​ lua_remove, lua_insert, lua_replace,​ lua_checkstack
 +  * [[LuaApiGarbageCollection|GarbageCollection]]
 +    * 가비지 컬렉션 다루기
 +    * lua_getgccount,​ lua_getgcthreshold,​ lua_setgcthreshold
 +  * [[LuaApiUserdata|Userdata]]
 +    * 유저 데이터 다루기
 +    * lua_newuserdata,​ lua_pushlightuserdata,​ lua_isuserdata and lua_islightuserdata,​ lua_touserdata
 +  * [[LuaApiTable|Table]]
 +    * 테이블 다루기
 +    * lua_newtable,​ lua_gettable,​ lua_rawget, lua_settable,​ lua_rawset, lua_next, lua_rawgeti,​ lua_rawseti
 +  * [[LuaApiMetatable|Metatable]]
 +    * 메타 테이블 다루기
 +    * lua_getmetatable,​ lua_setmetatable
 +  * [[LuaApiEnvironment|Environment]]
 +    * 환경 변수 다루기
 +    * lua_getfenv,​ lua_setfenv
 +  * [[LuaApiFunction|Function]]
 +    * 함수 다루기
 +    * lua_call, lua_pcall, lua_cpcall, lua_pushcclosure
 +  * [[LuaApiThread|Thread]]
 +    * 코루틴 다루기
 +    * lua_newthread,​ lua_resume, lua_yield, lua_xmove
 +  * [[LuaApiErrorHandling|ErrorHandling]]
 +    * C 쪽에서의 에러 핸들링
 +    * panic function, lua_error
 +  * [[LuaApiMacro|Macro]]
 +    * 매크로들
 +    * lua_pop, lua_pushcfunction,​ lua_register,​ lua_getregistry,​ lua_setglobal,​ lua_getglobal
 +
 +----
 +  * see also [[Lua]], [[LuaAuxApi]]
  
kb/luaapi.txt · 마지막으로 수정됨: 2014/11/08 15:22 (바깥 편집)