lua - ljatsh/Test GitHub Wiki

Lua笔记

修改历史:

  1. 2018-06-23:初始版本
  2. 2018-07-04:添加ldoc
  3. 2018-07-07:添加luarocks走代理的方法
  4. 2019-09-28 查找lua死循环

关于lua的学习规划

开始用lua来编程已经3、4年了,然而,我给自己对这门语言掌握情况打分是不及格,仅仅限于能够使用,更别提良好的代码风格和通过嵌入lua来保证良好的API设计和灵活的功能扩展。
想想都很汗颜,这么长时间,对于一门语言仅仅是入门水平。以前可能一直以为lua太小,反正都能写东西,所以从来就没有真正重视她的深入研究。加上有过lua实现RPG逻辑碰到性能瓶颈的经历,lua在我眼里一直比较偏门,她的存在更多的是为了热更新。直到3个月以前,开始学习PILLua Wiki才知道lua本身是可以非常巧妙和优雅的。如果时间容许,我很愿意花更多的时间来深入学习。现实的问题是,未来很长一段时间,工作上可能都不太会重度使用lua,我的方向是javascript,期望能够实现前后端基础技术的统一。
前面仅仅限于lua语言层面的肤浅浏览,加上缺少实践机会,导致难以真正掌握lua。后面,我想通过C API的学习来深入研究lua,如果有可能,尽可能加以应用。

安装

  • 通过brew来安装很方便,默认5.3,有5.1的选择,但是没有5.2的选择
  • PIL的测试例子目前在5.3下跑不过,于是选择源码安装lua5.2
    • make macosx test
      make install
    • 如果要删除,通过make uninstall
  • luarocks类似于pip,是lua的模块管理系统
    • 如果通过brew安装lua,一般是配套安装好luarocks的,我的机器上由于是手动安装lua,因此选择手动安装
    • 下载v2.4.4, 安装参考luarocks on unix,选择默认安装
    • ./configure
      make install

开发

代码风格

关于一些常用包

  • LDoc
    • 安装 由于有依赖,因此省心地选择luarocks安装
      sudo luarocks install ldoc 1.4.6-2
    • 实际在工作机器上通过代理安装ldoc,一直抱怨找不到依赖markdown或者penlight,后面通过先安装markdown和penlight得到解决

FAQ

  • lua手动安装为不带lua动态库的版本,luarocks为何还能安装成功?如何编写lua C扩展?

  • 国内通过luarocks安装rocks,访问luarocks受阻
    在mac上终端terminal配置代理,参考这里,注意https_proxy配置的协议并不是https

    export http_proxy=“http://ip[:port]”
    export https_proxy="http://ip[:port]"
  • aqua项目碰到lua死循环,没有思路的情况下,通过debug.hook写文件找到问题

    self._lua_file = io.open(cc.FileUtils:getInstance():getWritablePath() .. 'aqua/lua.tex', 'w')
    self._infos = {}
    
    debug.sethook (coroutine.running(), function(event, line)
      self._infos[#self._infos + 1] = debug.getinfo(2).short_src .. ":" .. line
    
      if #self._infos >= 50 then
        self._lua_file:write(table.concat(self._infos, '\n'))
        self._lua_file:write('\n')
        self._infos = {}
      end
    end, "l")

    值得注意的是,不能在co里面异步写文件,因为co也会被挂起

TODO

  • ldoc的深入总结

Reference

⚠️ **GitHub.com Fallback** ⚠️