學習LUA 零星記錄

2021-06-23 05:34:33 字數 2181 閱讀 5117

悶頭看的東西不寫出來總感覺遲早要忘記,那就通過部落格的形式一點一點記錄下來吧,沒準回頭來看會有更多收穫。

新工作的第一天就被告知要先維護乙個cgi,**用lua寫的,lua是神馬,能吃嗎\摳鼻子。零零散散看了兩三天,今天終於有那麼一點點眉目了。

首先,執行乙個lua檔案命令是:lua 檔名.lua

前面的lua程式是乙個直譯器,用c來寫的,原始碼裡的函式乍一看好簡單:

int main (int argc, char **argv)

/* call 'pmain' in protected mode */

lua_pushcfunction(l, &pmain);

lua_pushinteger(l, argc);  /* 1st argument */

lua_pushlightuserdata(l, argv); /* 2nd argument */

status = lua_pcall(l, 2, 1, 0);

result = lua_toboolean(l, -1);  /* get result */

finalreport(l, status);

lua_close(l);

return (result && status == lua_ok) ? exit_success : exit_failure;

}今天白天試了一下用c語言寫乙個程式,程式中呼叫lua指令碼,晚上看到這個原始碼我就樂了,什麼嘛,在c裡面調實際就是把lua程式的**搬到自己**裡去實現。

再來看乙個我覺得很驚豔的程式:luac -l -l  檔名.lua

通過這個命令,可以看到一些像彙編一樣的東西,如下:

$ luac -l -l exelua.lua

main (3 instructions, 12 bytes at 0x1b9b530)

0+ params, 2 slots, 0 upvalues, 0 locals, 1 constant, 1 function

1       [4]     closure         0 0     ; 0x1b9b710

2       [1]     setglobal       0 -1    ; fun1

3       [4]     return          0 1

constants (1) for 0x1b9b530:

1       "fun1"

locals (0) for 0x1b9b530:

upvalues (0) for 0x1b9b530:

function (7 instructions, 28 bytes at 0x1b9b710)

2 params, 4 slots, 0 upvalues, 2 locals, 1 constant, 0 functions

1       [2]     getglobal       2 -1    ; print

2       [2]     move            3 0

3       [2]     call            2 2 1

4       [3]     getglobal       2 -1    ; print

5       [3]     move            3 1

6       [3]     call            2 2 1

7       [4]     return          0 1

constants (1) for 0x1b9b710:

1       "print"

locals (2) for 0x1b9b710:

0       a       1       7

1       b       1       7

upvalues (0) for 0x1b9b710:

總結出來的規律是,以函式為單位,lua檔案裡沒有寫主函式,但在這裡是可以看到主函式的,估計就是從這裡入手的。

今天在嘗試在c裡調lua函式的時候遇到了幾個坑

1、gcc的時候有幾個必須用到的庫,liblua.a, libm.a, libld.a

2、還有三個要用的標頭檔案#include "lua.h", #include "lualib.h", #include "lauxlib.h"。注意檔案路徑,小心找不著啊~

明天得研究下lua.c和一些標準庫函式。撤~

圈圈 測試 環境 零星記錄01

1 vc6 程式設計 從這裡進 我是傳送到 桌面快捷方式的 點選 lanuch program 進去 這樣 有一些ddk的環境變數 就自己設定好了,不用人為再次設定 2 進去之後,是這樣 2.1 主要是 工程建立之後,再次開啟的話,不要使用 選單欄 driverwizard load project...

android 零星知識點記錄

一 在按鈕上顯示影象的方式有哪些?解析 本題考查了應聘者對按鈕的靈活應用程度。button是textview 的子類,因此,button與textview一樣,也可以實現 混排效果。除了button之外,android sdk 提供了乙個專門顯示影象的按鈕元件imagebutton.anrdoid ...

原創 Beego一些零星的記錄

和之前一樣的風格,比較亂,隨想隨記,見諒!1 首先上來乙個問題,bee run之後報錯!rm rf beego 此處是刪掉go get的beego,待會用git clone乙個下來。不放心的亦可重新命名,備份一下 git clone b master2 connect to the redis ho...