(1)作者是的伺服器開發工程師和架構師,精通java、go和lua等語言,對高階語言的虛擬機器有深入研究,《自己動手寫java虛擬機器》作者。(2)本書3大內容特色:零基礎自製程式設計語言、掌握lua語言實現原理和工作機制、提升go和java語言程式設計能力。(3)本書得到了七牛雲創始人兼ceo等大佬的高度評價和推薦。內容提要本書是一本面向lua程式師和指令碼語言愛好者的語言自製指南和實戰寶典。作者融合自己豐富的工程實踐經驗,詳細闡述lua語言的核心語法和實現原理,深入探討lua虛擬機器、編譯器和標準庫,並給出了實際可以編譯執行的代碼。助你從零基礎開始程式設計實現lua語言,理解指令碼語言工作原理。全書分為3個部分,共21章。*部分主要討論luaapi和虛擬機器實現,包括二進位chunk格式、lua虛擬機器指令集、元程式設計、錯誤處理等。第二部分主要討論lua語法和編譯器實現,包括詞法分析、語法分析、代碼優化、代碼生成等。第三部分主要討論lua輔助api和標準庫實現,包括基礎庫、實用工具庫、包和模組、協程等。目錄前言部分準備第1章準備工作 31.1準備開發環境 31.1.1作業系統 31.1.2安裝lua 41.1.3安裝go 41.2準備目錄結構 41.3本章小結 6第二部分lua虛擬機器和lua api第2章二進位chunk 92.1什麼是二進位chunk 102.2luac命令介紹 112.2.1編譯lua原始檔案 112.2.2查看二進位chunk 132.3二進位chunk格式 152.3.1資料類型 162.3.2總體結構 172.3.3頭部 182.3.4函數原型 222.4解析二進位chunk 272.4.1讀取基底資料型別 282.4.2檢查頭部 292.4.3讀取函數原型 302.5測試本章代碼 332.6本章小結 36第3章指令集 373.1指令集介紹 373.2指令編碼格式 383.2.1編碼模式 383.2.2操作碼 393.2.3運算元 403.2.4指令表 413.3指令解碼 423.4測試本章代碼 443.5本章小結 47第4章lua api 494.1lua api介紹 494.2lua棧 514.2.1lua資料類型和值 514.2.2棧索引 544.2.3定義luastack結構體 544.3lua state 574.3.1定義luastate介面 574.3.2定義luastate結構體 584.3.3基礎棧操縱方法 594.3.4push方法 644.3.5access方法 654.4測試本章代碼 694.5本章小結 70第5章lua運算子 715.1lua運算子介紹 715.2自動類型轉換 755.3擴展luastate介面 795.3.1arith方法 805.3.2compare方法 835.3.3len方法 855.3.4concat方法 865.4測試本章代碼 875.5本章小結 88第6章虛擬機器雛形 896.1添加luavm介面 896.1.1定義luavm介面 916.1.2改造luastate結構體 926.1.3實現luavm介面 936.2實現lua虛擬機器指令 946.2.1移動和跳轉指令 946.2.2載入指令 966.2.3算數運算指令 1016.2.4長度和拼接指令 1036.2.5比較指令 1066.2.6邏輯運算指令 1076.2.7for迴圈指令 1106.3指令分派 1136.4測試本章代碼 1156.5本章小結 118第7章表 1197.1表介紹 1197.2表內部實現 1217.3表相關api 1257.3.1get方法 1267.3.2set方法 1297.4表相關指令 1317.4.1newtable 1317.4.2gettable 1337.4.3settable 1357.4.4setlist 1367.5測試本章代碼 1387.6本章小結 140第8章函式呼叫 1418.1函式呼叫介紹 1418.2函式呼叫棧 1438.2.1調用幀實現 1448.2.2調用棧實現 1458.3函式呼叫api 1478.3.1load 1488.3.2call 1498.4函式呼叫指令 1528.4.1closure 1528.4.2call 1538.4.3return 1578.4.4vararg 1588.4.5tailcall 1598.4.6self 1608.4.7擴展luavm介面 1628.4.8改進setlist指令 1638.5測試本章代碼 1648.6本章小結 166第9章go函式呼叫 1679.1go函數登場 1679.1.1添加go函數類型 1689.1.2擴展lua api 1699.1.3調用go函數 1709.2lua註冊表 1729.2.1添加註冊表 1729.2.2操作註冊表 1739.3全域環境 1759.3.1使用api操作全域環境 1759.3.2在lua裡訪問全域環境 1789.4測試本章代碼 1799.5本章小結 181第10章閉包和upvalue 18310.1閉包和upvalue介紹 18310.1.1背景知識 18310.1.2upvalue介紹 18510.1.3全域變數 18710.2upvalue底層支援 18910.2.1修改closure結構體 18910.2.2lua閉包支援 19110.2.3go閉包支援 19210.3upvalue相關指令 19510.3.1getupval 19510.3.2setupval 19610.3.3gettabup 19710.3.4settabup 19910.3.5jmp 20010.4測試本章代碼 20210.5本章小結 203第11章元程式設計 20511.1元表和元方法介紹 20511.1.1元表 20611.1.2元方法 20611.2支援元表 20711.3調用元方法 20811.3.1算術元方法 20911.3.2長度元方法 21111.3.3拼接元方法 21111.3.4比較元方法 21211.3.5索引元方法 21411.3.6函式呼叫元方法 21611.4擴展lua api 21711.4.1getmetatable 21811.4.2setmetatable 21811.5測試本章代碼 21911.6本章小結 222第12章反覆運算器 22312.1反覆運算器介紹 22312.2next函數 22612.2.1修改luatable結構體 22712.2.2擴展lua api 22812.2.3實現next函數 22912.3通用for迴圈指令 22912.4測試本章代碼 23212.5本章小結 234第13章異常和錯誤處理 23513.1異常和錯誤處理介紹 23513.2異常和錯誤處理api 23713.2.1error 23813.2.2pcall 23913.3error和pcall函數 24013.4測試本章代碼 24113.5本章小結 242第三部分lua語法和編譯器第14章詞法分析 24514.1編譯器介紹 24514.2lua詞法介紹 24714.3實現詞法分析器 25114.3.1定義token類型 25214.3.2空白字元 25414.3.3注釋 25614.3.4分隔符號和運算子 25614.3.5長字串字面量 25814.3.6短字串字面量 25914.3.7數位字面量 26214.3.8識別字和關鍵字 26314.4lookahead和其他方法 26414.5測試本章代碼 26514.6本章小結 267第15章抽象語法樹 26915.1抽象語法樹介紹 26915.2chunk和塊 27015.3語句 27215.3.1簡單語句 27315.3.2while和repeat語句 27315.3.3if語句 27415.3.4數值for迴圈語句 27515.3.5通用for迴圈語句 27515.3.6區域變數聲明語句 27615.3.7設定陳述式 27715.3.8非局部函式定義語句 27815.3.9局部函式定義語句 27915.4運算式 28015.4.1簡單運算式 28015.4.2運算子運算式 28115.4.3表構造運算式 28115.4.4函式定義運算式 28215.4.5首碼運算式 28315.4.6圓括號運算式 28415.4.7表訪問運算式 28415.4.8函式呼叫運算式 28515.5本章小結 286第16章語法分析 28716.1語法分析介紹 28716.1.1歧義 28816.1.2前瞻和回溯 28916.1.3解析方式 29016.2解析塊 29016.3解析語句 29316.3.1簡單語句 29416.3.2if語句 29616.3.3for迴圈語句 29716.3.4 區域變數聲明和函式定義語句 29916.3.5賦值和函式呼叫語句 30016.3.6非局部函式定義語句 30216.4解析表達式 30316.4.1運算子運算式 30416.4.2非運算子運算式 30616.4.3函式定義運算式 30716.4.4表構造運算式 30816.4.5首碼運算式 31016.4.6圓括號運算式 31116.4.7函式呼叫運算式 31216.4.8運算式優化 31316.5測試本章代碼 31516.6本章小結 316第17章代碼生成 31717.1定義funcinfo結構體 31717.1.1常量表 31817.1.2寄存器分配 31917.1.3區域變數表 32017.1.4break表 32317.1.5upvalue表 32417.1.6位元組碼 32517.1.7其他資訊 32717.2編譯塊 32717.3編譯語句 32917.3.1簡單語句 33017.3.2while和repeat語句 33117.3.3if語句 33317.3.4for迴圈語句 33417.3.5區域變數聲明語句 33517.3.6設定陳述式 33717.4編譯運算式 33917.4.1函式定義運算式 34017.4.2表構造運算式 34117.4.3運算子運算式 34317.4.4名字和表訪問運算式 34517.4.5函式呼叫運算式 34617.5生成函數原型 34717.6使用編譯器 34917.7測試本章代碼 35017.8本章小結 350第四部分lua標準庫第18章輔助api和基礎庫 35318.1lua標準庫介紹 35318.2輔助api 35518.2.1增強版方法 35718.2.2載入方法 35818.2.3參數檢查方法 35918.2.4標準庫開啟方法 36018.3基礎庫 36118.3.1基礎庫介紹 36218.3.2基礎庫實現 36218.4測試本章代碼 36518.5本章小結 366第19章工具庫 36719.1數學庫 36719.2表庫 36919.3字串庫 37219.4utf-8庫 37419.5os庫 37619.6本章小結 379第20章包和模組 38120.1包和模組介紹 38120.2實現包庫 38620.3測試本章代碼 39120.4本章小結 392第21章協程 39321.1協程介紹 39321.2協程api 39621.2.1支持執行緒類型 39621.2.2支持協程操作 39821.3實現協程庫 40021.4測試本章代碼 40321.5本章小結 404附錄alua虛擬機器指令集 405附錄blua語法ebnf描述 407後記 409作者介紹作者簡介張秀宏伺服器開發工程師,有多年的java和遊戲伺服器開發和架構經驗,對高階語言虛擬機器有非常深入的研究。曾在ea、樂元素等遊戲公司擔任高級伺服器工程師,現任某創業公司架構師。曾於2016年6月出版《自己動手寫java虛擬機器》一書,廣受讀者好評,並多次重印。《自己動手實現lua:虛擬機器、編譯器、標準庫》是他時隔兩年之後推出的又一力作。
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。(1)作者是的伺服器開發工程師和架構師,精通java、go和lua等語言,對高階語言的虛擬機器有深入研究,《自己動手寫java虛擬機器》作者。(2)本書3大內容特色:零基礎自製程式設計語言、掌握lua語言實現原理和工作機制、提升go和java語言程式設計能力。(3)本書得到了七牛雲創始人兼ceo等大佬的高度評價和推薦。內容提要本書是一本面向lua程式師和指令碼語言愛好者的語言自製指南和實戰寶典。作者融合自己豐富的工程實踐經驗,詳細闡述lua語言的核心語法和實現原理,深入探討lua虛擬機器、編譯器和標準庫,並給出了實際可以編譯執行的代碼。助你從零基礎開始程式設計實現lua語言,理解指令碼語言工作原理。全書分為3個部分,共21章。*部分主要討論luaapi和虛擬機器實現,包括二進位chunk格式、lua虛擬機器指令集、元程式設計、錯誤處理等。第二部分主要討論lua語法和編譯器實現,包括詞法分析、語法分析、代碼優化、代碼生成等。第三部分主要討論lua輔助api和標準庫實現,包括基礎庫、實用工具庫、包和模組、協程等。目錄前言部分準備第1章準備工作 31.1準備開發環境 31.1.1作業系統 31.1.2安裝lua 41.1.3安裝go 41.2準備目錄結構 41.3本章小結 6第二部分lua虛擬機器和lua api第2章二進位chunk 92.1什麼是二進位chunk 102.2luac命令介紹 112.2.1編譯lua原始檔案 112.2.2查看二進位chunk 132.3二進位chunk格式 152.3.1資料類型 162.3.2總體結構 172.3.3頭部 182.3.4函數原型 222.4解析二進位chunk 272.4.1讀取基底資料型別 282.4.2檢查頭部 292.4.3讀取函數原型 302.5測試本章代碼 332.6本章小結 36第3章指令集 373.1指令集介紹 373.2指令編碼格式 383.2.1編碼模式 383.2.2操作碼 393.2.3運算元 403.2.4指令表 413.3指令解碼 423.4測試本章代碼 443.5本章小結 47第4章lua api 494.1lua api介紹 494.2lua棧 514.2.1lua資料類型和值 514.2.2棧索引 544.2.3定義luastack結構體 544.3lua state 574.3.1定義luastate介面 574.3.2定義luastate結構體 584.3.3基礎棧操縱方法 594.3.4push方法 644.3.5access方法 654.4測試本章代碼 694.5本章小結 70第5章lua運算子 715.1lua運算子介紹 715.2自動類型轉換 755.3擴展luastate介面 795.3.1arith方法 805.3.2compare方法 835.3.3len方法 855.3.4concat方法 865.4測試本章代碼 875.5本章小結 88第6章虛擬機器雛形 896.1添加luavm介面 896.1.1定義luavm介面 916.1.2改造luastate結構體 926.1.3實現luavm介面 936.2實現lua虛擬機器指令 946.2.1移動和跳轉指令 946.2.2載入指令 966.2.3算數運算指令 1016.2.4長度和拼接指令 1036.2.5比較指令 1066.2.6邏輯運算指令 1076.2.7for迴圈指令 1106.3指令分派 1136.4測試本章代碼 1156.5本章小結 118第7章表 1197.1表介紹 1197.2表內部實現 1217.3表相關api 1257.3.1get方法 1267.3.2set方法 1297.4表相關指令 1317.4.1newtable 1317.4.2gettable 1337.4.3settable 1357.4.4setlist 1367.5測試本章代碼 1387.6本章小結 140第8章函式呼叫 1418.1函式呼叫介紹 1418.2函式呼叫棧 1438.2.1調用幀實現 1448.2.2調用棧實現 1458.3函式呼叫api 1478.3.1load 1488.3.2call 1498.4函式呼叫指令 1528.4.1closure 1528.4.2call 1538.4.3return 1578.4.4vararg 1588.4.5tailcall 1598.4.6self 1608.4.7擴展luavm介面 1628.4.8改進setlist指令 1638.5測試本章代碼 1648.6本章小結 166第9章go函式呼叫 1679.1go函數登場 1679.1.1添加go函數類型 1689.1.2擴展lua api 1699.1.3調用go函數 1709.2lua註冊表 1729.2.1添加註冊表 1729.2.2操作註冊表 1739.3全域環境 1759.3.1使用api操作全域環境 1759.3.2在lua裡訪問全域環境 1789.4測試本章代碼 1799.5本章小結 181第10章閉包和upvalue 18310.1閉包和upvalue介紹 18310.1.1背景知識 18310.1.2upvalue介紹 18510.1.3全域變數 18710.2upvalue底層支援 18910.2.1修改closure結構體 18910.2.2lua閉包支援 19110.2.3go閉包支援 19210.3upvalue相關指令 19510.3.1getupval 19510.3.2setupval 19610.3.3gettabup 19710.3.4settabup 19910.3.5jmp 20010.4測試本章代碼 20210.5本章小結 203第11章元程式設計 20511.1元表和元方法介紹 20511.1.1元表 20611.1.2元方法 20611.2支援元表 20711.3調用元方法 20811.3.1算術元方法 20911.3.2長度元方法 21111.3.3拼接元方法 21111.3.4比較元方法 21211.3.5索引元方法 21411.3.6函式呼叫元方法 21611.4擴展lua api 21711.4.1getmetatable 21811.4.2setmetatable 21811.5測試本章代碼 21911.6本章小結 222第12章反覆運算器 22312.1反覆運算器介紹 22312.2next函數 22612.2.1修改luatable結構體 22712.2.2擴展lua api 22812.2.3實現next函數 22912.3通用for迴圈指令 22912.4測試本章代碼 23212.5本章小結 234第13章異常和錯誤處理 23513.1異常和錯誤處理介紹 23513.2異常和錯誤處理api 23713.2.1error 23813.2.2pcall 23913.3error和pcall函數 24013.4測試本章代碼 24113.5本章小結 242第三部分lua語法和編譯器第14章詞法分析 24514.1編譯器介紹 24514.2lua詞法介紹 24714.3實現詞法分析器 25114.3.1定義token類型 25214.3.2空白字元 25414.3.3注釋 25614.3.4分隔符號和運算子 25614.3.5長字串字面量 25814.3.6短字串字面量 25914.3.7數位字面量 26214.3.8識別字和關鍵字 26314.4lookahead和其他方法 26414.5測試本章代碼 26514.6本章小結 267第15章抽象語法樹 26915.1抽象語法樹介紹 26915.2chunk和塊 27015.3語句 27215.3.1簡單語句 27315.3.2while和repeat語句 27315.3.3if語句 27415.3.4數值for迴圈語句 27515.3.5通用for迴圈語句 27515.3.6區域變數聲明語句 27615.3.7設定陳述式 27715.3.8非局部函式定義語句 27815.3.9局部函式定義語句 27915.4運算式 28015.4.1簡單運算式 28015.4.2運算子運算式 28115.4.3表構造運算式 28115.4.4函式定義運算式 28215.4.5首碼運算式 28315.4.6圓括號運算式 28415.4.7表訪問運算式 28415.4.8函式呼叫運算式 28515.5本章小結 286第16章語法分析 28716.1語法分析介紹 28716.1.1歧義 28816.1.2前瞻和回溯 28916.1.3解析方式 29016.2解析塊 29016.3解析語句 29316.3.1簡單語句 29416.3.2if語句 29616.3.3for迴圈語句 29716.3.4 區域變數聲明和函式定義語句 29916.3.5賦值和函式呼叫語句 30016.3.6非局部函式定義語句 30216.4解析表達式 30316.4.1運算子運算式 30416.4.2非運算子運算式 30616.4.3函式定義運算式 30716.4.4表構造運算式 30816.4.5首碼運算式 31016.4.6圓括號運算式 31116.4.7函式呼叫運算式 31216.4.8運算式優化 31316.5測試本章代碼 31516.6本章小結 316第17章代碼生成 31717.1定義funcinfo結構體 31717.1.1常量表 31817.1.2寄存器分配 31917.1.3區域變數表 32017.1.4break表 32317.1.5upvalue表 32417.1.6位元組碼 32517.1.7其他資訊 32717.2編譯塊 32717.3編譯語句 32917.3.1簡單語句 33017.3.2while和repeat語句 33117.3.3if語句 33317.3.4for迴圈語句 33417.3.5區域變數聲明語句 33517.3.6設定陳述式 33717.4編譯運算式 33917.4.1函式定義運算式 34017.4.2表構造運算式 34117.4.3運算子運算式 34317.4.4名字和表訪問運算式 34517.4.5函式呼叫運算式 34617.5生成函數原型 34717.6使用編譯器 34917.7測試本章代碼 35017.8本章小結 350第四部分lua標準庫第18章輔助api和基礎庫 35318.1lua標準庫介紹 35318.2輔助api 35518.2.1增強版方法 35718.2.2載入方法 35818.2.3參數檢查方法 35918.2.4標準庫開啟方法 36018.3基礎庫 36118.3.1基礎庫介紹 36218.3.2基礎庫實現 36218.4測試本章代碼 36518.5本章小結 366第19章工具庫 36719.1數學庫 36719.2表庫 36919.3字串庫 37219.4utf-8庫 37419.5os庫 37619.6本章小結 379第20章包和模組 38120.1包和模組介紹 38120.2實現包庫 38620.3測試本章代碼 39120.4本章小結 392第21章協程 39321.1協程介紹 39321.2協程api 39621.2.1支持執行緒類型 39621.2.2支持協程操作 39821.3實現協程庫 40021.4測試本章代碼 40321.5本章小結 404附錄alua虛擬機器指令集 405附錄blua語法ebnf描述 407後記 409作者介紹作者簡介張秀宏伺服器開發工程師,有多年的java和遊戲伺服器開發和架構經驗,對高階語言虛擬機器有非常深入的研究。曾在ea、樂元素等遊戲公司擔任高級伺服器工程師,現任某創業公司架構師。曾於2016年6月出版《自己動手寫java虛擬機器》一書,廣受讀者好評,並多次重印。《自己動手實現lua:虛擬機器、編譯器、標準庫》是他時隔兩年之後推出的又一力作。
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。※ 二手徵求後,有綁定line通知的讀者,
該二手書結帳減5元。(減5元可累加)
請在手機上開啟Line應用程式,點選搜尋欄位旁的掃描圖示
即可掃描此ORcode
|
||||||||||||||||||
|
||||||||||||||||||
|