lua 1.1 閱讀
1. hash.c 中
a) 對建立的 hash *array 用 listhead 鏈式結構來管理,新增lua_hashcollector,用來做 hash 的**處理。
ps: 1.0 用的是個 512 的陣列,用乙個少乙個
b) hash *lua_createarray (int nhash) 中新增閥值,用來控制何時進行記憶體**
4.3 lua 2.1 閱讀
1. static treenode *tree_next (treenode *node, char *str) 的**的簡單化
2. 常量陣列還是常量陣列,但是結構變了
3. 符號陣列演化成了還是乙個普通陣列,這塊很有意思,構造是去常量樹中確認符號名,原來的 name 字段不用了。
luai_findsymbol 中做了很多事, node 如果是新的,就加入陣列中,之後和正常情況一樣返陣列下標, 這塊用陣列和常量樹來構造符號表。
lua_constcreate(name) : constant_root 樹中遍歷,如果沒,就加進去,之後返回節點
luai_findsymbol(treenode* t) : 常量樹中的節點,如果是新的節點,就要在符號表中加入一條記錄,節點記錄符號表中的index,這樣查詢時檢索的是常量樹
4. stringbuffer 由陣列變成鏈式結構, 這個主要在 lua 要存乙個 string 的時候要呼叫, 比如 contact, lua_tostring, lua_pushstring。
5. hash 錶鏈不再使用,1.1 也只是保留
v1.1
extern hash **lua_array;
extern word lua_narray;
6. lock 是乙個陣列標識,lua 的原始碼都是動態擴
7. hash 也做了變遷,由陣列變成 list
1.1
2.18. lua 的異常處理
設定了一點回歸點,異常就跳過去
jup_buf *errorjmp;
setjmp + longjmp 來實現
9. 關於 lockarray
目前應該是沒完全看明白,**中就是把乙個物件壓入棧和 lockarray 中(物件的 tag 不能為 lua_t_nil), 而 lua_unlock 就是把 lockarray[index].tag 置 為 lua_t_nil
v2.1 的**調動只是在**中把 old_pow 作為 lockarray 的索引來傳遞
10. 官方 readme 變更說明
* changes since version 1.1 (current version is 2.1)
+ object-oriented support;
+ fallbacks;
+ simplified syntax for tables;
+ many internal improvements.
ps: 因為物件導向程式設計自己一直沒怎麼寫過,只有一點概念,封裝,繼承,多型。
封裝比較好理解,就是把成員和一些方法整合到乙個記憶體塊中
繼承:: obja : objb, a 中有個base 指標指向b
多型: 不同的物件有唯一的標識,當訪問某個方法時,會找到物件真實的方法,結構可以用 hash 來儲存
2.1 的**沒看到有對 物件相關的操作
LUA 原始碼閱讀筆記(一)
背景介紹 因為工作的需要,後台svr要能夠動態修改更新,使用c當然沒有問題,問題就在於修改原始碼後,需要重啟服務。所以就想到在c裡能夠嵌入一種指令碼,最好是和c無縫結合的。因此就想到使用到lua,lua的大名圈內人士應該早有耳聞,只不過一直沒有機會接觸。機緣巧合,有幸一見。俗話說得好,耳聞不如一見。...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Lua原始碼閱讀三 lua字串快取
本篇文章,主要 一下lua中的字串快取管理 涉及到的檔案 lstring.c 在lua的9種資料型別中,字串是屬於可以被gc 的型別。在lua中,操作字串實際上是在操作字串引用,當字串不在被使用的時候,gc會通過一定演算法 lua9種資料型別 字串分配 原始碼 ts cast tstring lua...