官术网_书友最值得收藏!

2.1 什么是二進制chunk

在Lua的行話里,一段可以被Lua解釋器解釋執行的代碼就叫作chunk。chunk可以很小,小到只有一兩條語句;也可以很大,大到包含成千上萬條語句和復雜的函數定義。前面也提到過,為了獲得較高的執行效率,Lua并不是直接解釋執行chunk,而是先由編譯器編譯成內部結構(其中包含字節碼等信息),然后再由虛擬機執行字節碼。這種內部結構在Lua里就叫作預編譯(Precompiled)chunk,由于采用了二進制格式,所以也叫二進制(Binary)chunk。

我們仍然以Java虛擬機作為對照,存放chunk的文件(一般以.lua為后綴)對應.java源文件,二進制chunk則對應編譯好的class文件。Java的class文件里除了字節碼外,還有常量池、行號表等信息,類似地,二進制chunk里也有這些信息。然而和Java不同的是,Lua程序員一般不需要關心二進制chunk,因為Lua解釋器會在內部進行編譯,如圖2-1所示。

圖2-1 隱式調用Lua編譯器

Java提供了命令行工具javac,用來把Java源文件編譯成class文件,類似地,Lua也提供了命令行工具luac,可以把Lua源代碼編譯成二進制chunk,并且保存成文件(默認文件名為luac.out)。Lua解釋器可以直接加載并執行二進制chunk文件,如圖2-2所示。

圖2-2 顯式調用Lua編譯器

如前所述,Lua解釋器會在內部編譯Lua腳本,所以預編譯并不會加快腳本執行的速度,但是預編譯可以加快腳本加載的速度,并可以在一定程度上保護源代碼。另外,luac還提供了反編譯功能,方便我們查看二進制chunk內容和Lua虛擬機指令。下面詳細介紹luac的用法。

主站蜘蛛池模板: 大石桥市| 长海县| 南京市| 九江市| 大同县| 昌吉市| 汝阳县| 斗六市| 武义县| 四会市| 图们市| 富蕴县| 昌图县| 丰顺县| 周至县| 鄂托克旗| 康马县| 定州市| 洛隆县| 南京市| 中牟县| 板桥市| 临西县| 达孜县| 台北市| 和硕县| 新乡县| 抚顺市| 米泉市| 百色市| 莱西市| 吉林省| 云南省| 广元市| 邳州市| 荔浦县| 开封县| 库尔勒市| 文山县| 龙胜| 县级市|