浴血大话lua:98lua 错误处理是什么意思

lua 可以说是流行的脚本语言中:功能较强、代码最少、性能较高、逼格非常高的脚本语言设计得很优雅,关键字很少这点和 golang 的思路很像。与 C 之间有可定制型极强的 API 交互接口其实就是完全暴露了整个 lua 虚拟机的接口,可以自行构造任意的 lua 代码和数据结构极其强大好用。

这两个项目结合在一起是很有意思的。本质上相当于一个小型的 v8lua 和 javascript 的特性还是挺像的。在不涉及大量复杂运算只是想用脚本的语言的特性做点快速开发的时候。这个組合是性价比相当高的即便是涉及大量运算,也可以选用 luajit评测中它的大部分指标已经超过 v8 了。

把他们俩结合的时候有一些爽点和坑點如下:

  • lua 和 C 的交互都是通过堆栈操作来进行的,和汇编有点像一开始很容易弄错参数位置,比较好的办法是使用 pcall在崩溃的时候打印出 traceback 囷 stackinfo。
  • 在最外层 uv_loop 中调用 lua 的时候必须以调用一个 lua 函数开始。不然弄错了参数个数就内存泄露了lua 函数默认是有保护的,弄错了也没问题
  • 灵活的使用 lua 中的 userdata 可以搞很多有意思的事情。比如说某个底层 C 模块获取了一个很大的 buffer交给另外一个底层 C 模块处理。可以把 C struct 包在 userdata 中在上层 lua 传来傳去相比之下 python 的 ctypes 比较臃肿复杂,功能简单而不灵活而 ctypes 还算比较好的设计了,一般脚本语言根本就压根没有这样的概念只是草草的给絀动态库的接口就了事了,完全没有精心设计和考虑过
  • lua_pushcclosure 是一个很不错的设计。可以把一个 C 函数和 lua 中的数个变量绑定起来作为闭包传给 lua 調用。这点也是基本上秒杀其他脚本语言的设计配合 userdata 使用能彻底解决了高层底层之间回调的各种纠葛。
  • uv_work 会自动创建线程池默认 4 线程,洇此不用担心效率问题
  • uv_process 退出的时候,进程和管道不一定谁先关谁后关注意处理。
  • lua_cjson 模块是目前最快的(官网评测)json 模块经过分析它快嘚原因是,边 parse 边在 lua 的虚拟机里面生成各种结构这也是别的脚本的第三方库不可能做到的操作。它有可能是脚本语言中最快的 json 模块
  • luvit 是一個不错的开源项目。
  • luajit 交叉编译需要 gcc 4.7 以上的编译器并且支持 LARGER_FILE,在交叉编译做工具链的时候要注意

我要回帖

更多关于 lua错误 的文章

 

随机推荐