- 自己動手實現Lua:虛擬機、編譯器和標準庫
- 張秀宏
- 566字
- 2019-01-03 15:00:07
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的用法。
推薦閱讀
- Boost程序庫完全開發指南:深入C++”準”標準庫(第5版)
- 大學計算機應用基礎實踐教程
- C++面向對象程序設計(微課版)
- Developing Middleware in Java EE 8
- Mastering Python Scripting for System Administrators
- Java EE 7 Performance Tuning and Optimization
- 精通Linux(第2版)
- Lighttpd源碼分析
- Python 3 數據分析與機器學習實戰
- 你真的會寫代碼嗎
- 深入理解Kafka:核心設計與實踐原理
- Vue.js 3.x高效前端開發(視頻教學版)
- 計算機常用算法與程序設計教程(第2版)
- C#程序開發參考手冊
- Instant AppFog