学习LUA--零星记录

    闷头看的东西不写出来总感觉迟早要忘记,那就通过博客的形式一点一点记录下来吧,没准回头来看会有更多收获。

    新工作的第一天就被告知要先维护一个CGI,代码用LUA写的,LUA是神马,能吃吗\抠鼻子。零零散散看了两三天,今天终于有那么一点点眉目了。

    首先,执行一个lua文件命令是:lua 文件名.lua

    前面的lua程序是一个解释器,用C来写的,源码里的函数乍一看好简单:

int main (int argc, char **argv) {
  int status, result;
  lua_State *L = luaL_newstate();  /* create state */
  if (L == NULL) {
    l_message(argv[0], "cannot create state: not enough memory");
    return EXIT_FAILURE;
  }
  /* 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 <exelua.lua:0,0> (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 <exelua.lua:1,4> (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和一些标准库函数。撤~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值