自己動手做虛擬機器:解析程式語言的設計與實現(iT邦幫忙鐵人賽系列書)
內容描述
【強力推薦】
創造自己的程式語言絕對不是不可能的夢想,本書透過虛擬機器來教導「創造自己的程式語言」所需要的知識,幫助你學習新的東西,可以閱讀這本書的大家實在是很幸運!
──Ruby語言之父 松本行弘(Matz)
【本書特色】
逐步打造語言虛擬機器,深入了解程式語言的運作原理
✪每項功能都有完整實作,可更容易了解語言虛擬機器的實現方式
✪搭配撰寫測試驗證程式,可在學習實作之外,也學習到軟體測試的技巧
✪詳細分析mruby虛擬機器的基本原理,並透過簡化的方式引導學習語言虛擬機器
【內容簡介】
本書內容改編自第12屆iT邦幫忙鐵人賽IoT組優選系列文章《拿到錘子的我想在微控制器上面執行Ruby》。在學習程式語言的過程中,隨著我們理解的知識、技巧越來越多,我們難免需要更加深入了解我們所使用的語言。而這是一本關於程式語言設計的書籍,我們將透過mruby這款設計給嵌入式系統的Ruby語言,一步一步重現Ruby虛擬機器的部分功能,並藉由這樣的方式逐步了解一個語言的實現,且將其在開發板上執行,另外這也幫助我們重新思考使用程式語言時虛擬機器的運作及語言的關聯。
【內容重點】
我們將從閱讀原始碼開始,從前人的經驗學習如何打造一個語言虛擬機器,逐步實現一個能在ESP8266開發板上執行,並具備物件導向特性的精簡版虛擬機器。
✪加法虛擬機器
實現一個語言的虛擬機器,並沒有我們想像中的困難,我們第一個虛擬機器會以將Ruby的「加法」實現出來為目標,透過數百行的程式碼完成一個最簡單的虛擬機器。
✪實現邏輯判斷
加入能夠在我們的虛擬機器中進行if類型的判斷,透過這樣的虛擬機器實現,進而能夠讓程式按照我們的預期進行複雜的行為。
✪實現物件導向
Ruby語言的一大特色就是物件導向特性,我們將會討論如何管理物件的封裝資訊,以及將C語言的程式碼轉換成可以在Ruby中直接被呼叫的方法等機制。
✪用測試驗證想法
本書的目標是實現一個能夠在ESP8266開發板上執行的虛擬機器,為了減少反覆上傳程式到開發板的步驟,我們可以透過撰寫測試的方式,來驗證每一個虛擬機器的實現是否如我們所預期的來運作。
【目標讀者】
✪想了解程式語言運作原理的人。
✪想更好撰寫程式的人。
✪想在開發板上使用不同程式語言的人。
【範例檔下載網址】
https://github.com/elct9620/book-craft-your-mruby-virtual-machine
目錄大綱
|CHAPTER 01| 基礎知識
1.1 虛擬機器
1.2 C語言概念
1.3 mruby入門
1.4 微控制器
|CHAPTER 02| 閱讀原始碼的技巧
2.1 Octotree擴充套件
2.2 Sourcegraph擴充套件
2.3 熟悉語言
|CHAPTER 03| 從mruby-L1VM開始
3.1 從範例開始
3.2 虛擬機器初始化
3.3 啟動虛擬機器
3.4 處理IREP
3.5 處理OPCode
3.6 虛擬機器的概念
|CHAPTER 04| 小試身手
|CHAPTER 05| 建立專案
5.1 專案設定
5.2 關於測試
5.3 讀取IREP資訊
|CHAPTER 06| 處理OPCode
6.1 ISEQ前置處理
6.2 讀取OPCode
6.3 定義OPCode
6.4 處理OPCode
|CHAPTER 07| 數學運算
|CHAPTER 08| 邏輯判斷
|CHAPTER 09| 變數
9.1 資料封裝
9.2 整數變數
9.3 布林值變數
|CHAPTER 10| 字串讀取
10.1 資料讀取
10.2 顯示文字
|CHAPTER 11| 在ESP8266開發板上測試
11.1 撰寫主程式
11.2 執行虛擬機器
11.3 調整專案架構
11.4 整理檔案
|CHAPTER 12| 定義方法
12.1 klib
12.2 定義Hash
12.3 方法查詢
12.4 在電腦測試
12.5 虛擬機器狀態
12.6 修復測試
|CHAPTER 13| 方法參數
13.1 暫存資料管理
13.2 呼叫資訊
|CHAPTER 14| 迴圈機制
14.1 分析OPCode
14.2 實作迴圈
14.3 效能分析
14.4 完善功能
14.5 加入測試
|CHAPTER 15| Block機制
15.1 Proc是什麼
15.2 製作Block
15.3 跳出Block
15.4 存取變數
15.5 加入測試
|CHAPTER 16| 實作類別
16.1 RObject和RClass
16.2 定義RClass
16.3 自訂類別
16.4 更新虛擬機器
16.5 實作繼承
16.6 加入測試
|CHAPTER 17| 實作物件
17.1 定義RObject
17.2 產生物件
17.3 加入測試
|CHAPTER 18| 實例變數
18.1 實例處理
18.2 實作物件
18.3 初始化數值
18.4 加入測試
|CHAPTER 19| 垃圾回收
19.1 辨識資料
19.2 減少動態配置(Allocate)
19.3 使用tgc函式庫
19.4 加入tgc函式庫
19.5 套用tgc函式庫
19.6 更新測試
|CHAPTER 20| 整合Arduino
20.1 失效的垃圾回收
20.2 避免Watch Dog Timer觸發
20.3 重構減少重複
20.4 自動編譯mrb二進位檔案
|CHAPTER 21| 繪製文字
21.1 安裝函式庫
21.2 加入螢幕類別
21.3 跑馬燈效果
作者介紹
蒼時弦也(邱政憲)
我是軟體開發的求道者蒼時弦也,主要使用猶如賢者之石一般的Ruby語言,期望能夠在軟體開發的這條路上,找出一個能讓每個人都享受撰寫程式樂趣的方法,並且讓世界上能有更多優秀的程式被設計出來。