FineArt News

使用 Lua 做外掛方案

Lua 是一種輕量小巧的腳本語言,用標準C語言編寫並開放源始碼, 其設計目的是為了應用程式提供靈活的擴展和定制功能。

Lua 是巴西裡約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裡的一個研究小組,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所組成並於1993年開發。

相比於傳統開發的 C 語言,有下面特性:

  1. 輕量級:它用標準C語言編寫並以開放源始碼,編譯後僅僅數百 K

  2. 可擴展:Lua提供了非常易於使用的擴展介面和機制:由宿主語言(通常是C或C++)提供這些功能,Lua可以使用它們,就像是本來就內置的功能一樣

  3. 自動記憶體管理:就是如同 Python般的垃圾回收管理 Garbage Collection (GC) 

  4. Table 表格:是 Lua唯一的內建結構,可以模擬成其他各種結構

應用方面非常多,例如:遊戲開發、獨立應用腳本、Web 應用腳本、擴展和數據庫外掛程式如:MySQL Proxy 和 MySQL WorkBench、安全系統,如入侵偵測系統…等等。

Lua 被廣泛使用在各種遊戲引擎裡做為「腳本語言」(Script Language) 使用,像是知名的遊戲軟體:魔獸世界,就是以Lua作為它的外掛 Script,可以用來擴展遊戲的介面和使用者自訂的功能,由於Lua非常簡單,而且容易學習,所以可以方便我們對遊戲的邏輯進行修改以及重新編寫。

 

為何要使用 Lua Script ?

要回答這個問題之前,首先我們要對一般常見的軟體開發,做一個簡單說明:在電腦上面開發軟體,會使用編譯器 ( Compiler ) 來編譯我們撰寫的程式,程式中包含了完整功能的流程以及運算邏輯,我們對於程式中各個細項子功能,大多數沒有必要重新再寫一遍,反之,常會利用Windows上面標準 SDK或直接引用協力廠商開發的 Library,來實現這些細項子功能,如此就可以更加的快速及安全的開發軟體。

上面框住的部份,就是一個開發平臺,實際上大部分我們會使用的功能,已經在開發平臺上完成,等待著我們寫程式去引用它們,這樣,程式在開發的時候,只需要專注撰寫流程,而其中會用到的大部細節功能,都可以在開發平臺上找到。

簡單的說:要開發一個程式,如果其中的功能,可以使用開發平臺上成熟功能  (SDK),要比每一個功能都要自己重新實作,要簡單及安全多了。

如果你撰寫的程式很龐大?或者可以想像一下如同遊戲軟體這樣龐大的程式,大部份的開發人員,都沒有辦法直接參與這樣的開發計畫,為了讓協力廠商的人員,可以更快速加入協同開發的行列,就可以把它做成一個更高層的開發平臺,提供專屬的  SDK,並且使用描述語言Lua,讓協力廠商的開發人員,進行特定功能的開發。

對於協力廠商的開發人員來說,學習專屬的 SDK,相較於參與整個程式的開發計畫,要簡單很多,就像很多人喜歡吃雞肉,但不是每一個人都要學會如何去養雞,使用作業系統開發平臺或者是協力廠商開發的library,其中提供的 SDK,已經經過完整的驗證,如果我們重新開發,不見得比原本 SDK更好。

協力廠商的開發人可以使用 Lua Script以及專屬的少量SDK,而不用介入原本複雜的原始開發流程,就可以控制龐大的系統,所以很容易應用在各方面,如:遊戲開發、安全系統,入侵檢測系統…。

 

使用 Lua 的開發架構

方案1:以 Lua 為主體進行開發

這種方案,使用 Lua做為控制整個程式流程的主體,在流程進行中,會使用 Lua去叫用我們已經準備好的 SDK副程式,如下圖:

其中 Lua Script 就是原始的文字檔,可以隨時修改、編輯,這樣就可以立即完成新的功能。

 

方案2:以Lua 做為主程式的擴充

這種方案, Lua主要是用來擴充原本的功能,例如:使用外部的 Lua Script + 主程式提供的SDK 建立新的功能 (第 1個功能),或是使用 Lua 的返回值,控制主程式的部份流程(第 2 個功能),不論那種方案,協力廠商的開發者,都可以使用文字編輯器,重新賦予原程式新的生命,而不須要回頭要求原廠進行新功能的支援。