사용자 도구

사이트 도구


kb:luaapi

Lua API

루아 C API를 설계할 때, 최우선적으로 고려하는 사항이 “간단함(simplicity)“이라고 한다. 그래서 조그만 일 하나를 수행할 때도, 상당히 많은 함수들을 이용해야 한다. 이미 루아에 익숙한 사람이라면 괜찮겠으나, 처음 배우는 사람은 상당히 고달프다.

그래서 각각의 API에 대한 설명와 함께, 그 API를 쓰려면 어떤 API들을 차례로 불러야하는가를 정리해보기로 했다.

스택에 관하여...

일단 루아 API를 이해하기 위해서는 먼저 스택에 대한 이해가 선행되어야 한다.

     +--------+
     |  top   | -1
     +--------+
     |        | -2
     +--------+
 ... |        | -3
     +--------+
  3  |        | ...
     +--------+
  2  |        |
     +--------+
  1  | bottom |
     +--------+

모든 값은 bottom 에서 top 방향으로 쌓인다. 스택에 들어있는 값을 액세스하기 위해서는 인덱스를 이용해야 하는데, 인덱스에는 두 가지가 있다. 첫번째는 양수로서 스택의 제일 밑, 즉 제일 오래된 값부터 1씩 증가해 가는 인덱스다. 두번째는 음수로서 스택의 제일 위, 즉 제일 새로운 값부터 1씩 감소해 가는 인덱스다.

루아는 다른 언어와의 통신(?)을 위한 특별한 클래스 같은 것을 지원하지 않기 때문에, 모든 통신은 스택을 이용하게 된다. 실제로 대부분의 함수가 스택 인덱스를 인수로 요구한다는 것을 금방 알 수 있을 것이다.

일반적인 스택 인덱스 외에 특별한 슈도 인덱스(pseudo-index)가 두 가지 존재한다. 이는 lua.h 파일에 보면 나온다.

#define LUA_REGISTRYINDEX	(-10000)
#define LUA_GLOBALSINDEX	(-10001)

LUA_REGISTRYINDEX 값은 레지스트리를 위한 슈도 인덱스이고, LUA_GLOBALSINDEX는 전역 테이블을 위한 슈도 인덱스이다. C/C++에서 전역 변수 사용을 별로 추천하지 않듯, 루아에서도 레지스트리나 전역 테이블은 될 수 있는 한 사용을 삼가하는 게 좋다.

API 목록

    • 루아 시작하기 및 끝내기
    • lua_open, lua_close
    • 스택 다루기
    • 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
    • 가비지 컬렉션 다루기
    • lua_getgccount, lua_getgcthreshold, lua_setgcthreshold
    • 유저 데이터 다루기
    • lua_newuserdata, lua_pushlightuserdata, lua_isuserdata and lua_islightuserdata, lua_touserdata
    • 테이블 다루기
    • lua_newtable, lua_gettable, lua_rawget, lua_settable, lua_rawset, lua_next, lua_rawgeti, lua_rawseti
    • 메타 테이블 다루기
    • lua_getmetatable, lua_setmetatable
    • 환경 변수 다루기
    • lua_getfenv, lua_setfenv
    • 함수 다루기
    • lua_call, lua_pcall, lua_cpcall, lua_pushcclosure
    • 코루틴 다루기
    • lua_newthread, lua_resume, lua_yield, lua_xmove
    • C 쪽에서의 에러 핸들링
    • panic function, lua_error
    • 매크로들
    • lua_pop, lua_pushcfunction, lua_register, lua_getregistry, lua_setglobal, lua_getglobal

kb/luaapi.txt · 마지막으로 수정됨: 2014/11/08 15:22 (바깥 편집)