Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)
目錄
一、Lua語言簡介
二、Lua架構圖
三、Lua源碼結構
很久很久沒有寫博客了,一直忙于工作和項目,最近依然想靜下來閱讀一些好的源碼。自從讀完了Nginx和Memcache的源碼后,對服務器端的基礎開源軟件的實現原理有了一定的認識,接下來想看看Lua這門精巧的語言是如何實現的。
一、Lua語言簡介
Lua是一門用C語言編寫的腳本語言,一共1w多行代碼,非常的輕巧,適合做web腳本、游戲腳本、物聯網等場景下使用。
Lua可以進行獨立編程,但是大部分情況下是嵌入到大型語言里面,作為一個庫,成為一種腳本編程語言存在。
百度百科:Lua?[1]??是一個小巧的腳本語言。它是巴西里約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)里的一個由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所組成的研究小組于1993年開發的。 其設計目的是為了通過靈活嵌入應用程序中從而為應用程序提供靈活的擴展和定制功能。Lua由標準C編寫而成,幾乎在所有操作系統和平臺上都可以編譯,運行。Lua并沒有提供強大的庫,這是由它的定位決定的。所以Lua不適合作為開發獨立應用程序的語言。Lua 有一個同時進行的JIT項目,提供在特定平臺上的即時編譯功能。
Lua是解釋型語言,通過對Lua的語言進行語法解析,然后生成二進制字節碼,然后轉由C語言進行執行操作。編譯型語言,則會進行編譯后生成機器碼,直接由機器進行執行即可,執行效率會比較高。
二、Lua架構圖
這個架構圖,是整體讀完了Lua的全部源碼之后,才畫出來的。如果有興趣閱讀Lua源碼的同學,可以按照架構圖的順序,逐個模塊進行學習。
三、Lua源碼結構
Lua的下載地址:http://www.lua.org/
源碼包下載后,我們可以看一下lua-5.3.5/src目錄下的代碼結構。代碼結構基本會分3部分
虛擬機核心功能部分
| 文件 | 作用 |
| lua.c | lua的可執行入口 main函數 |
| lapi.c | C語言接口 |
| ldebug.c | Debug 接口? |
| ldo.c? | 函數調用以及棧管理? |
| lfunc.c? | 函數原型及閉包管理? |
| lgc.c | 垃圾回收機制 |
| lmem.c? | 內存管理接口 |
| lobject.c | 對象操作函數 |
| lopcodes.c | 虛擬機字節碼定義 |
| lstate.c | 全局狀態機 管理全局信息 |
| lstring.c | 字符串池? |
| ltable.c | 表類型的相關操作? |
| ltm.c | 元方法? |
| lvm.c | 虛擬機? |
| lzio.c? | 輸入流接口 |
源代碼解析和預編譯
| 文件 | 作用 |
| lcode.c | 代碼生成器? |
| ldump.c | 序列化預編譯的Lua 字節碼? |
| llex.c | 詞法分析器? |
| lparser.c | 解析器 |
| lundump.c | 還原預編譯的字節碼 |
內嵌庫
| 文件 | 作用 |
| lauxlib.c | 庫編寫用到的輔助函數庫? |
| lbaselib.c | 基礎庫? |
| ldblib.c | Debug 庫? |
| linit.c | 內嵌庫的初始化? |
| liolib.c | IO 庫? |
| lmathlib.c | 數學庫? |
| loadlib.c | 動態擴展庫管理? |
| loslib.c | OS 庫? |
| lstrlib.c | 字符串庫? |
| ltablib.c | 表處理庫 |
每次閱讀源碼,其實最難的是開始,通過網上各種資料,先把lua的整個目錄結構弄明白,幸好lua真的比較小,很容易就能弄明白每個文件是干什么的。接下去就是開始一點一點的啃整個源碼的過程了。
啃整個lua語言鏈路解析過程之前,我會優先把lua周邊的庫以及虛擬機字節碼這塊搞明白,然后再開始進行整個解析流程的閱讀。
總結
以上是生活随笔為你收集整理的Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: USB、UART、SPI等总线速率
- 下一篇: C语言 静态库制作(亲测可行)