Lua的意思是葡萄牙文的「月亮」,其LOGO和其他相關也多與月亮有關。在開始使用學習Lua之前,比須先了解Lua的幾個版本與實際實現。
就像Python 2和Python 3有很大不同,Python 3各版本間又有些許不同。有些在Python 3.9能用的語法或功能,不一定可以在Python 3.5使用一樣。
Lua目前已經到了5.4版本,本系列內容也會以Lua 5.4為主。Lua 5.4於2020年釋出,所以還非常的新,有許多實現實際未達到這個標準。但Lua 5.1、5.3也已經使用多年,穩定度是可見的。就算是其餘版本的實現,也具有一定可用性。Lua設計極小,就某種程度上而言,甚至可以相對輕鬆的撰寫自己的實現。類似的於C語言,但是沒有C語言煩人的指標概念。所以Lua的實現也不少,其中著名的有:
極高效即時編譯的Lua實現。相容於Lua 5.1語法。
LuaJIT is compatible to the Lua 5.1 language standard. It doesn't support the implicit arg parameter for old-style vararg functions from Lua 5.0.
用於嵌入式設備開發的Lua,提供許多已經寫好的內容。(沒記錯的話也是使用Lua 5.1標準,沒用過)
Java版的實現,支援Lua 5.2的語法。在GitHub上有另一個Fork的版本,兩個有些差異。
JS實現的版本。其他JS實現的版本還有:Moonshine、lua.vm.js、Starlight。這是一個很新,也有點有趣的項目。我會在談談它。
C#的實現。
就像Python有CPython、Pypy、IronPython、Jython的實現一樣,Lua也有眾多實現,但如同許多Python項目停滯(Jython只支援到Python 2),上述許多實現也都沒在更新。雖然並不意味著你就無法使用,Lua各版本差異也沒有Python 2 和 3 如此誇張,有些實現還非常精良。但我還是會建議你只使用最原本的Lua版本。(Python的話僅推CPython、Pypy)。
不過你可能在使用的是別人提供的Lua環境,比如魔獸世界,就需要注意其提供的環境版本,其不一定有更新。
不好意思阿 ?
我自己沒在玩魔獸世界,只是大概這是最出名的應用之一。而目前看起來其仍然支援Lua,查到當下貼文於六天前發問。而且看起來前幾年也還是有人在寫:
- 【心得】魔獸世界插件 lua 翻譯工具 (2017年)
自己則是重拾呵呵。
PS. Redis資料庫也包含了Lua。這次重拾,才發現有好多地方都有Lua的身影。絕對值得你學學看。
當你使用其他實現時,更要注意使用的版本。本系列會有個範例使用LuaJ,因為其只支援Lua 5.2的語法,因此有些內容你無法直接在延伸使用。另外值得一題的是Fengari是的很新的項目,撰寫當下對他有點興趣,可能會在本系列或番外提到。
官方有一個頁面可以直接在上頭嘗試Lua。
當然你還有像是Repl.it等選項。
你可以在Lua官網,下載到二進位版本,或是在線上玩玩。我建議你將Lua配置到系統環境變數PATH下。然後嘗試執行:
lua -v
Lua 5.4.0 Copyright (C) 1994-2020 Lua.org, PUC-Rio
Lua是純C寫成的,而且非常小,其編譯也很快速。不自己來編譯一次有點說不過去。但請確認你有以下環境:
這邊我不打算多解釋什麼,但是為了進階的使用Lua,建議你先準備好相關工具,未來我們會再使用到。
編譯過程很簡單:
curl -O https://www.lua.org/ftp/lua-5.4.0.tar.gz # download Lua source code
tar -xf lua-5.4.0.tar.gz # unzip
cd lua-5.4.0 # go into directory
make # compile
make local # install(ref:編譯lua-local_install)
不過我不想直接安裝於系統,所以會做本地安裝。如果你想要直接裝於系統,可以將最後一行改成`lua install`。
現在在目錄下會有一個`install`目錄,其中子目錄`bin`包含著Lua的執行檔。
最後,教個使用MiniConda來安裝Lua。請確認好你已經安裝`conda`
conda create -y -n lua
conda activate lua
conda install -y lua
lua -v
使用conda的好處是,可以很容易的在各版本的Lua中切換,不過當前並沒有Lua 5.4版。
LuaDist是官方推薦Windows下使用的一種環境。因為我個人使用經驗上不是太好,又主要使用Linux環境,預計會放到最後再多做介紹。(也可能只是我以前不太會用XD)
If you use Windows, try LuaDist, a multi-platform distribution of the Lua that includes batteries.