今天才看了一下lua下:和.的反汇编,:不仅仅是语法糖,而是更好
lua偶尔用用,从来没有深究过。网上的教程都说:是.的语法糖,今天忽然心血来潮看了下反汇编,发现根本不是那么回事。.会调用普通函数,:会调用成员函数,虽然结果一致,但是呢,废话不多说,直接上图真相。
首先是号称语法糖的:调用、运行结果及反汇编:print((" "):byte())
然后是规规矩矩的.调用、运行结果及反汇编:local s = " "
print(string.byte(s))
可以看到,常规调用方式不但代码长,常数表还长,还多查一次表,并且多分配一个寄存器。:方式不仅减少了代码长度,运行速度和资源占用都优化了,不仅仅只是语法糖 支持楼主的探索精神!
我这几年,也是一直在搞编译和虚拟机, 对这些也比较感兴趣.{:lol:} 经常看到别人的代码对于常用的函数,要用local来转一下,比如
local string = string
local format = string.format
就是为了减少全局函数查全局表的次数
楼主还要继续研究,其实这还是语法糖 LUA,有没有语法检查,在线调试工具? john78 发表于 2021-5-18 09:47
LUA,有没有语法检查,在线调试工具?
有的,有很多。可能是由于lua的嵌入特性,需要嵌入到宿主程序,调试工具并不是那么好用就是了。最精简的可能就是LuaEditor/LuaStudio。 藉此帖顺道问一下,有无仁兄已将 e-Lua 移植到了 MDK 环境下的 Cortex-M3 处理器上?
数年前...估计已有近十年,当时移植了后,就是没官方所释出那 VC6.0 版来得正常。
移植这 e-Lua 也没啥目的,就是个人纯兴趣玩玩而已,如同移植 Python 般的玩玩而已。
请教楼主,Lua在运行时,出现错误,提示怎样输出 ?
#define lua_writestringerror(s,p) \
(fprintf(stderr, (s), (p)), fflush(stderr))
我替换了这个,好像错误的语句,没有显示错误 dog 发表于 2021-9-11 12:01
请教楼主,Lua在运行时,出现错误,提示怎样输出 ?
#define lua_writestringerror(s,p) \
(fprintf(std ...
可以注释或者串口输出 yuyu87 发表于 2021-9-11 12:32
可以注释或者串口输出
是替换这个吗?
#define lua_writestringerror(s,p) (fprintf(stderr, (s), (p)), fflush(stderr))
替换了,是不是还有哪里要设置?
页:
[1]