takashiki 发表于 2021-5-18 07:33:37

今天才看了一下lua下:和.的反汇编,:不仅仅是语法糖,而是更好

lua偶尔用用,从来没有深究过。网上的教程都说:是.的语法糖,今天忽然心血来潮看了下反汇编,发现根本不是那么回事。
.会调用普通函数,:会调用成员函数,虽然结果一致,但是呢,废话不多说,直接上图真相。

首先是号称语法糖的:调用、运行结果及反汇编:print((" "):byte())


然后是规规矩矩的.调用、运行结果及反汇编:local s = " "
print(string.byte(s))


可以看到,常规调用方式不但代码长,常数表还长,还多查一次表,并且多分配一个寄存器。:方式不仅减少了代码长度,运行速度和资源占用都优化了,不仅仅只是语法糖

aleyn 发表于 2021-5-18 07:53:24

支持楼主的探索精神!
我这几年,也是一直在搞编译和虚拟机, 对这些也比较感兴趣.{:lol:}

canspider 发表于 2021-5-18 08:26:17

经常看到别人的代码对于常用的函数,要用local来转一下,比如
local string = string
local format = string.format
就是为了减少全局函数查全局表的次数

楼主还要继续研究,其实这还是语法糖

john78 发表于 2021-5-18 09:47:00

LUA,有没有语法检查,在线调试工具?

takashiki 发表于 2021-5-18 10:04:42

john78 发表于 2021-5-18 09:47
LUA,有没有语法检查,在线调试工具?

有的,有很多。可能是由于lua的嵌入特性,需要嵌入到宿主程序,调试工具并不是那么好用就是了。最精简的可能就是LuaEditor/LuaStudio。

xyz543 发表于 2021-5-20 00:43:43

藉此帖顺道问一下,有无仁兄已将 e-Lua 移植到了 MDK 环境下的 Cortex-M3 处理器上?
数年前...估计已有近十年,当时移植了后,就是没官方所释出那 VC6.0 版来得正常。
移植这 e-Lua 也没啥目的,就是个人纯兴趣玩玩而已,如同移植 Python 般的玩玩而已。

dog 发表于 2021-9-11 12:01:51

请教楼主,Lua在运行时,出现错误,提示怎样输出 ?
#define lua_writestringerror(s,p) \
   (fprintf(stderr, (s), (p)), fflush(stderr))
我替换了这个,好像错误的语句,没有显示错误

yuyu87 发表于 2021-9-11 12:32:43

dog 发表于 2021-9-11 12:01
请教楼主,Lua在运行时,出现错误,提示怎样输出 ?
#define lua_writestringerror(s,p) \
   (fprintf(std ...

可以注释或者串口输出

dog 发表于 2021-9-11 13:38:27

yuyu87 发表于 2021-9-11 12:32
可以注释或者串口输出

是替换这个吗?
#define lua_writestringerror(s,p) (fprintf(stderr, (s), (p)), fflush(stderr))
替换了,是不是还有哪里要设置?
页: [1]
查看完整版本: 今天才看了一下lua下:和.的反汇编,:不仅仅是语法糖,而是更好