此頁面包含 LuaPowerPatches,適用於舊版的 Lua。
Lua 5.0
位元運算子與十六進位支援
此修補程式新增下列功能至 Lua 5.0
- 十六進位數值文字中支援 0xXXX。
- 字串中支援十六進位字元「\xXX」。
- 使用中綴位元運算子表示 AND (&)、OR (|) 和 XOR (#)。
- 使用單獨的 # 表示一元位元運算反函數。
注意:此修補程式新增了 Lua 虛擬機的 opcode。這會造成兩個主要的後果:(1) 結果無法稱為「Lua」,(2) 已編譯程式碼無法在不包含此修補程式的直譯器中執行。
套用此修補程式後,請嘗試執行下列程式碼:
> hex=function(n) print("0x"..string.format("%X",n)) end
> hex(0x54&0x55)
0x54
> hex(0x54|0x66)
0x76
> hex(0x54#0x66)
0x32
> hex(#0x45)
0xFFFFFFBA
> print("Hel\x6c\x6f world\x21")
Hello world!
>
回報的錯誤/注意:此修補程式使用 C 語言函式 strtol(),在大部分系統上,此函式的最大輸入值為 0x7FFFFFFF,因此命令 hex(0x97F2DA31) 會輸出 0x7FFFFFFF。[在支援 64 位元整數的電腦上,使用 strtoll()(Posix)或 __strtoi64()(Win32),可以很輕易地修復這個問題。]
已改善的協同程序
此修補程式在沒有引入作業系統相依性或依賴作業系統提供的功能(例如執行緒函式庫或 C 堆疊配置)的情況下,儘可能移除對自元方法或 C 語言函式產生的協同程序進行讓步的限制。請參閱 ImprovedCoroutinesPatch。
- 後向相容性: 除了一個已修改的錯誤訊息之外,皆相容
- 已變更/新增/刪除的程式碼行數 ?
- Lua 作者的立場 ?
- 作者: EricJacobs?
- 最後更新日期: 2004 年 12 月 4 日
- [下載(適用於 Lua 5.0.2)]
__usedindex
元表修補程式
__newindex
會捕捉對新表索引項目的建立/配置,但不會捕捉對既有索引項目的建立/配置。如果舊值具有指向其父項目的後向參照呢?(__gc
不夠。)如果變更後的值應該反映在 C 資料結構中呢?
__usedindex
的作用就像 __newindex
,但 table[key]
會存在。
範例
function used(t,k,v)
local o
o = rawget(t,k)
print("__usedindex",t,k,v,o)
rawset(t,k,v)
end
function new(t,k,v)
print("__newindex",t,k,v)
rawset(t,k,v)
end
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 6/16/0
- Lua 作者的立場 -
- 作者: Christopher.Dunn@Motorola.com
- 最後更新日期: 2004 年 2 月 29 日
- [下載(適用於 Lua 5.0)]
讓多餘的「do」和「then」代辦項目可選
Lua 要求 if
陳述句後接「then」,而 while
和 for
陳述句後接「do」。此修補程式讓這些代辦項目可選。
Lua 4.x
Unix/Win32 Makefile
修改 lua-4.1-work4 Makefiles,使其便於使用 GNU Make 透過編輯 lua/config,在 Windows 32 位元系統中使用 MSVC 建置 Lua 程式庫和可執行檔。不會影響 Unix 相容性。主要的困難在於 Windows 使用不同的副檔名和幾項稍微不同的壓縮器/連結器/編譯器選項。藉由使用巨集表示副檔名,組態檔案可以在不編輯實際 Makefiles 的情況下,針對 Unix 或 Windows 32 位元系統進行組態。
- Lua 版本: lua-4.1-work4
- 向下相容:是,此補丁不會變更任何現有的 Lua 組態預設值,而且應該會與標準發行版在 Unix 下建置出相同的結果。
- 已變更/新增/刪除的程式 ?
- Lua 作者的立場:未知
- 作者: ThatcherUlrich
- 最近更新時間: 2002 年 2 月 18 日(初始修訂版)
- 待辦事項:更多測試,以及實作 Windows 下的 DLL 建置。
- [下載]
區塊註解
於 Lua 中新增區塊註解:--[[...]]
。使用長字串剖析器 ([[...]]
) ,因此可以巢狀區塊註解。建議用法
--[[---------
Comment...
--]]---------
其特性是,只要於第一個 [
前面插入一個空白(或於 --[[
前面新增一個 -
),就能將區塊註解停用。
- 向下相容性:否,但不太可能會損壞現有的程式。
- 已變更/新增/刪除的程式碼行數 4/10/0
- Lua 作者的立場:正在考慮加入 Lua 4.1。
- 作者: Edgar Toernig
- 最近更新時間: 2001 年 12 月 14 日
- [4.0 版] [4.1 版]
Lua autoconf 補丁
於 Lua 發行版(4.1work4)執行自動組態。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式:未知
- Lua 作者的立場:– 不太可能會新增至發行版中
- 作者:未知
- 最近更新時間:未知
- [1]
Lua setconstant 補丁
新增 Lua 函式 setconstant( table ),它會將字串或數字的表格標記為常數,如此一來,此表格的內容將永遠不會被記憶體回收機制回收。請注意,此表格可以巢狀,而且任何非數字或字串的內容都不適合使用此函式。
yield()
變更 Lua VM,讓從 Lua 至 Lua 函式的呼叫變為「沒有堆疊」;亦即不會在 C 堆疊中儲存執行狀態。於 Lua 基本程式庫中新增 yield()
函式,可用於實作潛在函式/協同多工。當指令碼呼叫 yield()
時,主程式中的 lua_dostring/lua_dofile/lua_dobuffer
函式呼叫會以 LUA_YIELD
程式碼傳回。指令碼的執行狀態會保留在 lua_State
結構中,而且可以使用新的 API 函式 lua_resume(L)
於稍後時間繼續執行指令碼。此補丁也會產生額外的效益,那就是讓 Lua 的尾呼叫(使用 OP_TAILCALL
opcode 者)正確地不具遞迴性。
- 向下相容:是的,假設沒有與「yield()」發生名稱衝突。
- 已變更/新增/刪除的程式碼行數 ~400
- Lua 作者的見解:Lua 5.0 中提供改良實作。
- 作者:Thatcher Ulrich
- 最後更新日期:2002 年 1 月 16 日(修正部分錯誤 - ThatcherUlrich)
- 待辦事項:錯誤處理周邊仍有些錯誤。例如,在互動式 lua 資訊區中,如果您
'dofile("program.lua")'
,且 program.lua
執行 yield()
,則 Lua 會當機。建議的話,建議改用 5.0 中支援的實作。 - [下載]
(曾是「sleep patch」;「yield」被視為此功能的較佳名稱,所以我就改名了。 - ThatcherUlrich)
已增強的表格建構器
表格建構器的記錄部分(field=value
)已修改,因此允許 function 陳述式,而且逗點現在為選用。因此以下程式碼區塊有效
x = {
function foo() end
function bar() end
c=1
d=2
}
且等於
x = {
foo=function() end,
bar=function() end,
c=1,
d=2,
}
在 [val]=val
紀錄和清單初始化項(({ expr, expr })
)前仍需要逗點。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 4/8/0
- Lua 作者的見解:不知
- 作者: Edgar Toernig
- 最後更新日期:2001 年 12 月 16 日
- [4.0 版本]
區域變數
local 語句的新語法糖
local foo(...) ... end
等同於
local foo foo=function(...) ... end
請注意,foo
在函式中可見。在 Lua 4.0 中,並無太多幫助(事實上,在存取 %foo
時會傳回錯誤)。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 2/6/0
- Lua 作者的見解:不知
- 作者: Edgar Toernig
- 最後更新日期:2001 年 12 月 16 日
- [4.0 版本]
- 我不習慣 Lua 4.1 的程式碼產生器,因此稍候會提供此 patch 的(更實用的)版本。
lua_getcclosure()
新增遺失函式至 API,用於擷取 C 函式的封閉值。(請參閱 John Belmonte 在 2000 年 10 月 7 日發布的 lua-l 訊息「pushcclosure / tocfunction issue」。)
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 0/19/0
- Lua 作者的見解:考量將這項功能加入 Lua 4.1 中。(請參閱 Roberto Ierusalimschy 在 2000 年 10 月 11 日發布的 lua-l 訊息「Re: pushcclosure / tocfunction issue」。)
- 作者:John Belmonte
- 最後更新日期:2001 年 2 月 3 日
- [下載]
巢狀函式名稱
修改 parser,允許在多於一層的表格中定義函式名稱。(請參閱 John Belmonte 在 2001 年 2 月 2 日發布的 lua-l 訊息「Re: Son of Lua - Sol」。)語法為:NAME {'.' NAME} [':' NAME]
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 2/0/0
- Lua 作者的見解:將包含於 Lua 4.1 中。(請參閱 Roberto Ierusalimschy 在 2001 年 2 月 19 日發布的 lua-l 訊息「Re: index tag method」。)
- 作者:John Belmonte
- 最後更新日期:2001 年 2 月 3 日
- [下載]
弱參照
將弱參照加入 Lua。請參閱 https://lua.dev.org.tw/notes/ltn006.html。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 0/77/0
- Lua 作者的見解:將在 Lua 4.1 中加入弱表格。(請參閱 Luiz Henrique de Figueiredo 在 2001 年 4 月 20 日發布的 lua-l 訊息「Re: Coroutine support in 4.1 / IPC mechanisms」。)
- 作者:John Belmonte
- 最後更新日期:2001 年 2 月 28 日
- [下載]
清單反覆運算建構
新增另一種 for
建構,用於反覆運算清單。語義上等同於標準函式庫函式 foreachi
(請參閱 John Belmonte 在 2001 年 4 月 26 日發布的 lua-l 訊息「list iteration for statement」。)
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 5/88/0
- Lua 作者的立場 -
- 作者:John Belmonte
- 最後更新日期:2001 年 6 月 9 日
- [下載]
lua_dolines patch
Lua-4.0.1 的修補程式。加入lua_dolines(lua_State *L, char *fname, FILE *f, int *lineno)
到 Lua API 中,這個函式可以執行 Lua 程式碼,從已開啟的檔案,直到遇到「$」為止。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 79
- Lua 作者的立場:將會在 5.0 中被 lua_load 取代(參閱 Luiz Henrique de Figueiredo 在 2002 年 7 月 29 日發表的 lua-l 訊息:「Re: [ANNOUNCE] lua_dolines-1.1.patch」)
- 作者: JuergenFuhrmann)
- 上次更新:2002 年 7 月 29 日
- [下載][README]
lua_gc_long 修補程式
Lua-4.0.1 的修補程式。此修補程式會變更縮放整數與長整數的比較方式。這其實是一個錯誤修正,否則,在典型的 64 位元電腦上,lua_setgcthreshold(L,0) 會無法運作。
- 後向相容性: 是相容的
- 已變更/新增/刪除的程式碼行數 2
- Lua 作者的立場:已知的問題,已在 5.0b 中修正(參閱 Roberto Ierusalimschy 在 2003 年 2 月 20 日發表的 lua-l 訊息:「Re: gc confusion: now resolved」)
- 作者: JuergenFuhrmann)
- 上次更新:2003 年 2 月 21 日
- [下載][README]
近期更新 · 偏好設定
編輯 · 歷史記錄
最後編輯時間 2012 年 1 月 4 日下午 2:36 GMT (diff)