Lua虚拟机

一、脚本语言

脚本语言通常是解释执行的,每一门脚本语言都会有自己定义的OpCode(Operation Code,也称为bytecode,一般翻译为“操作码”或者“字节码”),这些字节码是由脚本语言经过编译器前端处理之后,生成的,再将它放到这门语言的虚拟机中逐个执行。

而像C这样的都是直接编译器编译之后生成与当前硬件环境相匹配的汇编代码,不经过虚拟机,可以直接为机器识别

  • 脚本语言这样做得好处
    1、可运行平台 比较广,对接的是虚拟机,由虚拟机去处理硬件和软件平台的差异
    2、由于脚本语言需要由虚拟机执行,中间套了一层,肯定就没有编译型语言那样直接编译机器语言运行速度快

虚拟机
底层操作系统的上层抽象
对上负责解释执行字节码
对下 屏蔽平台相关内容 脚本代码可以不用修改,运行在多个平台

二、Lua编译过程

为了达到较高的执行效率,lua代码并不是直接被Lua解释器解释执行,而是会先编译为字节码,然后再交给lua虚拟机去执行

lua代码称为chunk,编译成的字节码则称为二进制chunk(Binary chunk)

lua.exe、wlua.exe解释器可直接执行lua代码(解释器内部会先将其编译成字节码),也可执行使用luac.exe将lua代码预编译(Precompiled)为字节码

使用预编译的字节码并不会加快脚本执行的速度,但可以加快脚本加载的速度,并在一定程度上保护源代码

luac.exe可作为编译器,把lua代码编译成字节码,同时可作为反编译器,分析字节码的内容

Lua脚本并不是直接被Lua解释器解释执行,而是类似Java语言那样,先由Lua编译器编译为字节码,然后再交给Lua虚拟机执行。Lua字节码需要一个载体,这个载体就是二进制chunk.

  • 1.什么是二进制chunk

在Lua的行话里,一段可以被Lua解释器解释执行的代码就叫作chunk,Lua并不是直接解释执行chunk,而是先由编译器编译成内部结构(其中包含字节码等信息),然后由虚拟机执行字节码。这种内部结构在Lua中就叫作预编译chunk,由于采用了二进制格式,所以也叫作二进制chunk。

  • 2.Luac命令介绍

Luac命令主要有两个用途:第一,作为编译器,把Lua源文件编译成二进制chunk文件;第二,作为反编译器,分析二进制chunk,将信息输出到控制台。

扫描二维码关注公众号,回复: 15896811 查看本文章
  • 3.二进制chunk格式

(1)Lua二进制本质上也是一个字节流。二进制chunk格式没有考虑跨平台的需求,Lua官方实现的做法比较简单:编译Lua脚本时,直接按照本机的大小端方式生成二进制chunk文件,当加载二进制chunk文件时,会探测被加载二进制文件的大小端方式,如果和本机不匹配,就拒绝加载。

(2)编译Lua脚本时,直接按照当时的Lua版本生成二进制chunk文件,当加载二进制chunk文件时,会检测被加载文件的版本号,如果和当前Lua版本不匹配,则拒绝加载。

(3)把Lua脚本预编译成二进制chunk的主要目的是为了获得更快的加载速度。

lua虚拟机基于寄存器虚拟机

猜你喜欢

转载自blog.csdn.net/Brave_boy666/article/details/120586362