自己尝试实现了一个lua_Reader

为什么要自己实现呢,因为脚本这东西总要加密,lua似乎没有直接从内存读取脚本这东西,似乎dostring可以,不过因为听说效率较低所以pass,而且dostring也不能读取编译后的文件。

其实纯C的函数指针和C++等高级语言的抽象接口差不多,不过灵活度还是要高很多。现在发现面向对象有些东西的确是太死板了,以前觉得模板这东西很强大,现在发现这个不过是来弥补先天的不足,那还不如C的函数指针来得直接方面和明了。

不过习惯了面向对象,要转到函数式编程还有点绕不开,去看了关于lua自己的lua_Reader的实现,分别是dostring和dofile的实现,大概只是这个东西只是解析相应的资源,最终给lua_load用来加载block。如果只是简单的字符串就简单了,直接传进去就好了,dostring就是这么干的,而dofile就复杂很多,仔细分析,最需要的区别还是对于有无BOM和编译后的lua文件的解析,对于一般的需求,那个判断BOM我就不弄了,但是还是要判断是否编译了。

最初自己卡在一个地方,后来发现原来是lua5.1编译好的文件lua5.2根本不认,好吧,手头没有5.2的编译器,只好拿源码去编个,然后就搞定了。总结来说,最大的区别就是文件头是不是LUA_SIGNATURE。lua_load会先读取第一个字符,发现是编译文件就用编译文件策略,然后进行读后面的字符。

另一个其实不太明白的地方是关于buffer的大小,看起来dostring似乎并没有考虑这个问题,可能也并不需要处理这个问题,但是dofile里面却是用了LUAL_BUFFERSIZE(512)这个值,每次只读512个字节,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值