美文网首页
Lua代码是如何执行的?

Lua代码是如何执行的?

作者: 码上述Andy | 来源:发表于2022-05-09 23:08 被阅读0次

Lua代码是怎么执行的?

1.和静态语言的差异?
2.通过什么执行?
3.执行的是什么?

一.解释器VS编译型

1.解释性(动态)语言与编译型(静态)语言差异
1.1 解释型语言
解释型语言在代码执行阶段通过解释器一行行翻译,通过字节码一行行执行。Lua属于动态解释型语言。
Lua执行的流程主要分为:

1.Lua脚本先翻译字节码
2.然后通过虚拟机执行

ByteCode通过虚拟机执行
Lua虚拟机核心能力分为:

1.虚拟寄存器:通过内存层面上的数据结构模拟CPU物理寄存器。
2.字节码执行

1.2.编译型语言
编译型语言通过不同的编译器编译成各CPU架构类型可直接执行的机器码,可以直接供CPU执行。编译后的机器码不需要二次翻译,即为静态语言。比如C/C++语言。编译器最主要职责:1.翻译;2.优化;3.机器码生成。

1.3.编译的作用

1.提升程序的远行效率。
2.尽量小的节省存储空间。

二.VM及指令执行

1.VM
虚拟机相对于物理机,借助于操作系统对物理机器(CPU等硬件)的一种模拟、抽象,主要扮演CPU和内存的作用。
主要职责:
执行字节码中的指令,管理全局状态(global_state)、数据栈(StackValue)和函数调用链状态(CallInfo)

2.指令构成
指令由4个字节32位组成,以Lua5.4.3为例其中低7位为操作码,后25位为操作数,操作数又分了iABC, iABx, iAsBx, iAx, isJ几种模式。具体指令详见:lopcodes.h/lopcodes.c文件,里面详细列出了各指令的使用模式。

3.Lua执行流程
虚拟机类似cpu执行流程取指、译码、执行,Lua通过数据结构来抽象模拟CPU远行的流程,当原型到某个Proto(函数原型,编译生成的产物),通过for (;;)不断去取指,然后匹配Lua虚拟机指令类型,最后执行相关指令。整个过程通过指针pc++来指向下一条指令(Instruction)来不停的获取指令执行。通过断言检查栈的大小,防止过栈顶。具体详见:lvm.c#luaV_execute函数。

三.总结--执行效率

1.静态语言前面提到通过各平台类型编译器,最终编译各CPU架构能直接执行的机器码,而Lua属于解释型脚本语言,通过虚拟机执行中间生成的字节码。多了这么一层抽象,效率明显也没有直接执行机器码效率高。
2.虽然Lua虚拟机也是虚拟寄存器来实现,但我理解是内存层面上的数据结构模拟。相比静态语言是cpu通过物理寄存器存储机器指令。指令读取速度明显要比内存读取要块很多。

相关文章

  • Lua代码是如何执行的?

    Lua代码是怎么执行的? 1.和静态语言的差异?2.通过什么执行?3.执行的是什么? 一.解释器VS编译型 1.解...

  • C API-调用LUA函数

    lua_pcall 函数 lua_pcall 可以执行lua代码 前面的例子中load时就执行了lua脚本或者lu...

  • ToLua的Example示例学习笔记18_Bundle

    展示了如何使用Assetbundle从本地(或服务器)来获取需要的Lua文件并执行。 「1」代码 c#代码如下,这...

  • Lua 修改虚拟机实战4 - function

    主题:修改 Lua 第一公民 function 一份常规 Lua 代码: 执行: 原因是我们修改了 functio...

  • Redis分布式锁 基于redis.eval

    实现方法:使用redis的eval执行lua脚本 Java代码

  • Lua虚拟机

    Lua是用标准C语言编写,是一门以高效率著称的脚本语言。 为了达到较高的执行效率,lua代码并不是直接被Lua解释...

  • lua的执行

    1.交互式 lua -i 可在命令行中进行交互式编程(执行手敲lua代码) 2.脚本式 lua xx.lua 通...

  • SpringBoot中RedisTemplate的RedisSc

    在RedisTemplate执行lua脚本如果做呢? 查看下面方法代码,这是引入lua内容脚本到RedisScri...

  • luajit与NYI

    什么是LuaJIT 标准 Lua 出于性能考虑,也内置了虚拟机,所以 Lua 代码并不是直接被解释执行的,而是先由...

  • ToLua的Example示例学习笔记21_String

    这个例子演示了在lua中如何使用String。 「1」代码 操作代码如下: 「2」需要了解的部分 Lua代码中的比...

网友评论

      本文标题:Lua代码是如何执行的?

      本文链接:https://www.haomeiwen.com/subject/yluturtx.html