Lua 运行的机制

Lua运行的机制

Lua是解释型语言,代码在运行时才被解释器一行行动态翻译和执行

编译:
Lua运行代码时,Lua脚本并不是直接被Lua解释器解释(“luac”)执行,而是类似Java语言,先由Lua编译器编译为字节码,然后再交给Lua虚拟机执行。
Lua字节码需要一个载体,这个载体就是二进制chunk,虚拟机的指令(“opcode”)

Lua脚本跑在Lua虚拟机中,将Lua虚拟机源代码整合到动态库供Unity使用,然后在C#中启动虚拟机跑Lua代码,此外动态库还提供一些支持代码提供给Lua和Unity的交互,这部分支持代码就是ToLua、Xlua所做的事情

连接:
Lua,编译阶段之后仅仅需要一个“打包”,真正的连接过程都是在运行之前才根据符号(如类名、模块名等等)被完成的。对lua来说,许多情况下,栈中保存着一个“将要被调用的函数的引用”,执行这个函数 就是把这个引用交给虚拟机,并压入参数,然后通知虚拟机去调用即可。这个过程比C/C++的“连接” 要简化很多,但功能和结果是一致的,都是使得当前代码获知被调用函数的地址。
目前绝大部分的高级语言,尤其是脚本语言,都是在运行期进行连接的。

总结:
Lua也需要编译和连接。编译可以单独完成,可以在载入源代码的时候才完成。连接通常在运行期(调用之前 或者模块加载的时候)被完成。

Lua的执行流程

如下图所示:程序员编码lua文件->语法词法分析生成Lua的字节码文件(对应Lua工具链的Luac.exe)->Lua虚拟机解析字节码,并执行其中的指令集->输出结果。
在这里插入图片描述

Lua优点

一、Lua性能高
在解释型语言中,Lua是性能很高的,Lua常常被拿来和JS做对比,但是Lua比JS的好处是,性能高,而且语言简单,容易上手。 LuaJIT还可以执行编译后的Lua字节码,速度更快。

二、Lua不限制编程范式
很多语言对类提供了语言一级的支持,Lua并没有这么做。 Lua是基于原型的语言(prototype-based language)在Lua里非常容易地模拟面向对象

三、Table是Lua里最基本的、最常用的、几乎唯一的、几乎万能的数据结构。在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值