lua原始碼學習(一)lua的c api外圍實現

2021-06-22 13:47:56 字數 1093 閱讀 8001

工作後,整個人已經比較鬆懈了。雖然一直在看lua的原始碼,但是一直是比較零碎的時間,沒有系統的整理,所以還是收穫不多。因為最近工作也不是很忙了,就想整理下lua的原始碼學習的筆記,加深下印象,並分享給大家。

這些文章都是自己的淺薄的理解,有什麼錯誤,還請各位拍磚賜教。

typedef int (*lua_cfunction) (lua_state *l);

但是,我們很多函式都不是這樣的宣告,所以,我們就需要有乙個包裝函式:

比如cos函式:

在c語言,標準math庫中,宣告如下:

double cos (double);

經過包裝後:

static int math_cos (lua_state *l)

因為lua是乙個狀態機,所有的操作都是在操作棧,所以lua_cfunction中傳入的lua_state這個棧,就可以獲取lua執行中的所有資料了

lual_checknumber(l,1):表示獲取棧頂的number,並且呼叫標準c的cos函式,並且cos計算值重新壓棧。

我們介面已經好了,那麼我們在lua中怎麼呼叫這些函式呢?

typedef struct lual_reg  lual_reg;

lua為定義了這樣乙個結構體,name表示在lua中的函式名字,func表示name真正呼叫的函式

當我們對映表好了後,要怎樣註冊?

現在比較詳細的說下:

luamod_api int luaopen_math (lua_state *l)

lual_newlib:這個函式乙個巨集:建立乙個table來儲存我們對映資料(key-value值)。

lua 原始碼編譯

對於乙個開源工程,開始學習它的第一步自然是編譯工程。使用vc編譯lua,在網上已有許多介紹,但 紙上得來終覺淺 自己走一遍還是有必要的。步驟如下 2.開啟vc建立乙個solution,就叫lua.sln 3.建立乙個名為liblua的project lua庫 新增除lua.c和luac.c以外的所有...

LUA 原始碼閱讀筆記(一)

背景介紹 因為工作的需要,後台svr要能夠動態修改更新,使用c當然沒有問題,問題就在於修改原始碼後,需要重啟服務。所以就想到在c裡能夠嵌入一種指令碼,最好是和c無縫結合的。因此就想到使用到lua,lua的大名圈內人士應該早有耳聞,只不過一直沒有機會接觸。機緣巧合,有幸一見。俗話說得好,耳聞不如一見。...

Lua 簡單Lua直譯器原始碼分析

include include include lua.h include lauxlib.h include lualib.h int main void lua close l return 0 lua.h定義了lua提供的基礎函式,包括建立lua環境 呼叫lua函式,它的定義是以lua 開頭的...