當前位置:首頁 » 操作系統 » 雲風lua源碼

雲風lua源碼

發布時間: 2022-06-02 00:26:46

A. Lua 為什麼在游戲編程領域被廣泛運用

Lua雲風在九十年代就開發游戲引擎並建設個人網站(雲風工作室),在游戲開發領域聲望高。網易《大話西遊II》是首個在市場上取得成功的國產網路游戲。所以後來國內游戲開發行業紛紛受此影響採用Lua。

《大話西遊》用的腳本語言是微軟的JScript(JavaScript的一種方言),維護不便bug多,受系統IE版本的影響兼容性差。所以2002年網易開發《大話西遊II》時,決定在客戶端內嵌別的腳本語言。當時該項目技術負責人雲風認為要挑不出名的語言,讓做外掛的人搞不懂(《大話西遊》一代被外掛《月光寶盒》搞死了),於是就選擇了Lua 4.0。

現在,2013年,Lua和其他流行腳本語言Python、JavaScript各分秋色:

語言規范精簡、運行時庫小。其創始人稱Lua是穿過針孔的語言(Passing a Language through the Eye of a Needle),他加入的任何語言特性都能用C API簡單的調用。

易於創建受限環境,C語言一端可以控制暴露給Lua腳本的任何功能。我猜這也是《魔獸世界》的插件語言選用Lua的原因。

性能方面,雖然仍然比Python快,但不如V8(谷歌的JavaScript實現)。

B. lua源碼分析4(lua是怎麼執行的)收藏

當分析到這里,對於lua生成中間碼的過程就比較熟悉了。關鍵是生成的中間碼必須要和lua虛擬機的執行聯系在一起。所以,對於這里分析的函數調用,要結合lua虛擬機的執行一起來分析。

上篇文章對生成局部函數中間碼做了簡單的介紹。這里知道,當lua發現一個新定義的函數的時候,會生成OP_CLOSURE指令。那麼,lua虛擬機執行到OP_CLOSURE後怎麼執行呢?
在此之前,先說在lua解析代碼完了以後,會做那些善後之事呢?
前面說過,lua會把一個代碼文件當作是一個函數解析執行。在解析期間,它會率先生成一個FuncState的結構,作為最外面的函數。但這是解析時做的事情,運行期間,是不會有FuncState這個東西出現的。在運行期間,是由一個個叫CallInfo的數據結果的,它指的是當前運行的函數。
那麼,在解析代碼以後,是怎麼轉入運行的呢?

C. 如何閱讀luajit的代碼

為什麼要看luajit的源碼
作為目前最快的腳本語言之一,luajit確實是一個傑作,但相比原生lua僅僅幾萬行的代碼而言,luajit卻可以說是巨無霸。更要命的是,luajit之所以快,是因為大量使用了機器碼相關的技術,無論是它的機器碼編譯部分,還是位元組碼執行部分,讀起來都非常麻煩。
網上這方面的資料非常少,即使是lua社區的雲風大大也主要以分析原生lua為主,跟luajit有很多不同。萬一遇到了性能坑,或者其他難以解決的問題,需要找到原因,又不能閱讀源碼的話,就只能依賴網上其他人的結論,否則完全無從下手。
調試luajit
萬事的開頭,從能夠自己調試代碼開始
一個能調試的代碼,閱讀起來會遠遠比眼看要清晰得多。
而如果能利用visual studio進行調試,那麼對讀luajit而言還是非常有幫助的,畢竟藉助visual assist的代碼查找,能夠非常快的幫你找到你想了解的東西
luajit下面提供了一個msvcbuild.bat用於編譯luajit,但如果你需要調試的話,可以進行以下幾個步驟:
1.將luajit解壓,比如解壓到LuaJIT-2.1.0-beta2_msvc目錄
2.如果要得到精確的棧,修改LuaJIT-2.1.0-beta2_msvc\src\msvcbuild.bat,搜索/O2,將/O2改為/Od
3.在win64版本的visual studio命令行,執行一次msvcbuild.bat debug,這時會生成luajit.exe,測試一下exe是否正常。
4.用visual studio建立一個命令行工程,例如工程保存在LuaJIT-2.1.0-beta2_msvc\luajitcmd
5.把LuaJIT-2.1.0-beta2_msvc\src下所有.h和.c代碼加入工程
6.把工程的調試路徑設置為
命令:$(ProjectDir)..\..\src\luajit.exe
工作目錄:$(ProjectDir)..\..\src\
7.此時你可以正常按f5下斷點調試了
至於可以調試什麼呢?
最簡單就是寫一個lua文件,require之,執行裡面的代碼,下斷點觀察luajit的行為。
這里必須說明,luajit的執行過程中有兩大部分是沒有.c對應的:
1.有一部分代碼是通過dasm工具生成的,這部分直接通過匯編生成,沒有.c,所以沒有辦法在visual studio調試(其實也可以,但是只能匯編調試)。這些主要是lua虛擬機的代碼(是的,為了快,作者hand tune匯編的方式來寫lua虛擬機)
2.luajit會通過jit模塊編譯一部分代碼變為高度優化的機器碼,這些也是臨時生成的可執行機器碼,你只能在.c看到他們是如何生成的,但執行階段當然是沒有.c對應的。
除此以外,幾乎所有東西都可以直接vs調試:所有的編譯過程、所有的lua標准庫和api、luatable等常規數據結構、profiler,等等
下一步我們會簡單說一下代碼結構,以及結果luajit一些基本原理來說說怎麼閱讀
尤其是luajit的原理,如果對此毫無了解的情況下,閱讀其源碼是十分困難的,因為luajit從編譯到執行的過程,走了很多步,跨越了多個模塊,涉及了三種不同形式的編碼(bytecode, SSA IR, 機器碼),可見其復雜程度。

D. 如何看懂lua的源碼

你需要掌握 lua 語言,才可能看懂 lua 語言的源代碼。
你需要精通 c 語言,你才可能看懂 lua 的源碼。

E. lua怎麼進入源碼裡面去調試

調試lua現幾種案: 一)luaedit : 編輯斷點斷點命查看些都讓習慣用vs親切純lua環境編輯器說期望程序運行能借用調試腳本能性(至少我沒試驗)能用需要給lua腳本做main腳本函數並提供系列偽c api(由lua實現函數提供製定值返)由luaedit啟腳本main函數進行調試 二)利用 lua debug 庫 hook 記錄張斷點位置表設置行模式 hook 每進入 hook 都檢查否斷點處若停等待交互調試效消耗 cpu 每進入新代碼行都需要調函數函數本身用 lua 寫候效率更低 三)利用lua腳本函數實現lua腳本封裝斷點函數種式結合debug庫實現斷點棧信息利用lua環境表函數調用信息進行記錄列印需要腳本使用者顯式提供斷點函數調用辦優點自組合適合自項目斷點調試案缺點相繁瑣且斷點命難現式融

F. 如何安裝luasocket源碼

第一種方法:如果你有安裝了 Lua 模塊的安裝和部署工具 LuaRocks,那麼一條指令就能安裝部署好 LuaSocket:
# luarocks install luasocket
第二種方法:如果沒安裝有 LuaRocks,也可以源碼安裝。
先把 LuaRocks 下載下來,當前可用的版本是 luasocket-3.0-rc1(luasocket的源碼有託管在Github.com):
# git clone https://github.com/diegonehab/luasocket.git
把源碼clone下來之後就可以進行本地源碼安裝,直接進入到luasocket目錄進行編譯安裝了
# cd luasocket
# make && make install

G. Lua為什麼在游戲編程領域被廣泛運用

用過Lua的都知道,Lua無論在與C/C++數據傳遞,還是在封裝都很方便,API非常簡單。同時Lua的許可證和緊湊性(把lib編譯進程序即可),都十分利於集成。這些都是Python和V8不能比的。同時,Lua編程學習難度極低。Python雖然容易學,但不簡單;JavaScript學習難度不夠低。實際上,Lua進入游戲業非常早,早在1998年盧卡斯的《異域狂想曲》(Grim Fandango)中,就首次在游戲領域用到了Lua。十年之前著名的游戲博德之門、猴島4都用了Lua。至少從開源代碼來看,雲風對Lua的使用是十分重度的,比如skynet的入口是在Lua上。國內很多游戲對Lua的使用很淺,多是把一些需要經常改的運算放出來給Lua做。

H. 如何學習 Lua VM 的源碼

2011年底開始閱讀Lua代碼,選擇的版本是5.1.4,在那個時候是最新的版本了,不過2012年不僅有更新的5.1版本出來,還有最新的5.2.暫時管不了這么多,繼續看這個版本先了。

歷經近一年,中間酸甜苦辣只有自己知道,你問有什麼方法,我的回答只有堅持。一邊看代碼,一看補一些基礎(比如看龍書),到最後覺得差不多了就自己抄Lua虛擬機代碼來跟蹤它的實現。

我的博客上:codemp,有我寫的Lua分析文章,還沒有完全寫完。當然我現在也不認為我完全理解的通通透透了。

我最後希望能做到的是:把Lua某個版本的代碼通透看完,在github上寫一個開源的分析Lua源碼的文檔,最後能正確寫一份英文的得到Lua社區的認可。

之所以花這么大功夫去啃Lua代碼,是因為我覺得Lua是門很好的語言,參見知乎我在其他帖子中對Lua的評價。另一方面是Lua的代碼數量足夠小,5.1.4僅僅1.5W行,去掉空白行和注釋估計能到1W行。Lua是世界最流行的腳本語言之一,前幾年還進過top20的流行語言,另外又是C\C++的完美伴侶。另外,我自己對如何實現一門語言也充滿了好奇,Lua雖小五臟俱全而且還是正經實用的項目。就這些理由一直在支撐著我看下去。當然現在最難的時候已經過去了。

其他人的文章,國內雲風寫的是最多的。不過我認為雲風的文章key太高,很難follow,你如果對雲風寫的文章涉及的技術點沒有什麼涉獵就直接去看,可能很難看懂。
另外國外人寫過的,最推薦的有:
《》
《The implementation of Lua 5.0》

還有一個:
詳解關於Lua源碼分析學習教程
你可以找找。轉載僅供參考,版權屬於原作者

熱點內容
如何通過網吧電腦進入網吧伺服器 發布:2025-01-10 22:22:30 瀏覽:704
資料庫緩存是什麼 發布:2025-01-10 22:21:05 瀏覽:384
dns配置出現錯誤該怎麼辦 發布:2025-01-10 22:13:00 瀏覽:437
雲頂演算法 發布:2025-01-10 22:10:07 瀏覽:988
收件伺服器有什麼作用 發布:2025-01-10 21:50:01 瀏覽:389
安卓70緩存 發布:2025-01-10 21:49:03 瀏覽:682
圖像檢索演算法 發布:2025-01-10 21:43:58 瀏覽:557
plsqlforupdate 發布:2025-01-10 21:43:50 瀏覽:915
如何設置健康碼快捷方式vivo安卓 發布:2025-01-10 21:39:52 瀏覽:502
安卓不兼容怎麼解決 發布:2025-01-10 21:37:02 瀏覽:31