自己動手做虛擬機器:解析程式語言的設計與實現(iT邦幫忙鐵人賽系列書) n) S7 W6 q$ |. t, S
作者: 蒼時弦也(邱政憲)' H0 R( ?; O1 `, _2 P
出版社:博碩
9 U( `0 G& C8 s- f9 i" k7 q 出版日期:2022/05/11
/ \" z" z8 x c! Y 內容簡介
+ t$ J4 N: n _6 ^& w! u 本書內容改編自第12屆iT邦幫忙鐵人賽IoT組優選系列文章《拿到錘子的我想在微控制器上面執行Ruby》。在學習程式語言的過程中,隨著我們理解的知識、技巧越來越多,我們難免需要更加深入了解我們所使用的語言。而這是一本關於程式語言設計的書籍,我們將透過mruby這款設計給嵌入式系統的Ruby語言,一步一步重現Ruby虛擬機器的部分功能,並藉由這樣的方式逐步了解一個語言的實現,且將其在開發板上執行,另外這也幫助我們重新思考使用程式語言時虛擬機器的運作及語言的關聯。3 _1 @4 ]& q0 }
【內容重點】- @7 q( W$ [) }6 K% v' \
我們將從閱讀原始碼開始,從前人的經驗學習如何打造一個語言虛擬機器,逐步實現一個能在ESP8266開發板上執行,並具備物件導向特性的精簡版虛擬機器。
/ U$ q* a6 z) M' |) e ?加法虛擬機器
+ V5 h. k( D! g- Z4 ~- Z 實現一個語言的虛擬機器,並沒有我們想像中的困難,我們第一個虛擬機器會以將Ruby的「加法」實現出來為目標,透過數百行的程式碼完成一個最簡單的虛擬機器。# v4 _ X' s7 |
?實現邏輯判斷
% Z) c+ B4 o1 I6 ?$ ?2 l; Q3 a 加入能夠在我們的虛擬機器中進行if類型的判斷,透過這樣的虛擬機器實現,進而能夠讓程式按照我們的預期進行複雜的行為。6 ]4 c* B* G* w: a; @
?實現物件導向: W' Y$ @/ ^, V: J3 K& ~" x
Ruby語言的一大特色就是物件導向特性,我們將會討論如何管理物件的封裝資訊,以及將C語言的程式碼轉換成可以在Ruby中直接被呼叫的方法等機制。
9 p( C5 p v( G- B! b ?用測試驗證想法# B) T. D6 [0 S5 ]# O- G' q2 K' ]
本書的目標是實現一個能夠在ESP8266開發板上執行的虛擬機器,為了減少反覆上傳程式到開發板的步驟,我們可以透過撰寫測試的方式,來驗證每一個虛擬機器的實現是否如我們所預期的來運作。$ N3 ?" g; n( T- i: v
【目標讀者】
9 u/ ^+ \& m3 a: B& x3 x ?想了解程式語言運作原理的人。
5 v8 F+ ?4 U1 c; z- r" N! d$ ? ?想更好撰寫程式的人。
) D/ N+ k: H3 k1 w/ F, c ?想在開發板上使用不同程式語言的人。
& \9 P0 K" i9 h0 f4 D 本書特色* m( E5 j$ A, Y1 ^7 n5 \
逐步打造語言虛擬機器,深入了解程式語言的運作原理
% |2 E" X% I1 A ?每項功能都有完整實作,可更容易了解語言虛擬機器的實現方式
* E* w0 [! |& }4 U& g ?搭配撰寫測試驗證程式,可在學習實作之外,也學習到軟體測試的技巧8 `4 [. Q) e U2 v+ R5 ?6 V
?詳細分析mruby虛擬機器的基本原理,並透過簡化的方式引導學習語言虛擬機器( T9 h; @9 d: n
目錄
5 E5 b8 v6 \# y/ c k/ r |CHAPTER 01| 基礎知識( Z7 `) q9 D: g' _+ I& d. ]& ^
1.1 虛擬機器
8 P! B+ y) J0 M, `4 W. U) @ 1.2 C語言概念; {- C( i, j9 `
1.3 mruby入門
; ^( U0 `5 T: i: ?8 j 1.4 微控制器) |, h7 H! W- W+ z2 Q0 D
|CHAPTER 02| 閱讀原始碼的技巧& B4 d, t8 e' L
2.1 Octotree擴充套件3 @) J! O! P3 q, L; N) I5 F0 U1 l2 \
2.2 Sourcegraph擴充套件
5 g5 _3 Z- U9 Z8 b9 x7 i* B 2.3 熟悉語言& k* `: [+ X9 _" @8 P
|CHAPTER 03| 從mruby-L1VM開始+ i% y# ~6 }4 z& Y4 r5 M
3.1 從範例開始
b% v1 N7 d" D8 ~9 ?7 ~+ K 3.2 虛擬機器初始化
- ]8 X, z U' k 3.3 啟動虛擬機器
; N# V9 W3 Q5 g+ o 3.4 處理IREP2 Y/ o: @3 g# `$ F R5 P% ]
3.5 處理OPCode. J$ J8 E2 y4 J, M. P8 T7 u# t# f: [
3.6 虛擬機器的概念
7 q" x! ~. ~, k" m4 y4 ~ |CHAPTER 04| 小試身手% d5 h/ P# W8 U
|CHAPTER 05| 建立專案
5 ]/ C" k, M$ ?. R4 M/ L 5.1 專案設定; P1 N$ t* w/ ?
5.2 關於測試
3 h8 ~( g/ l% o3 }9 } f% G 5.3 讀取IREP資訊- s' C+ j. j! J* Z
|CHAPTER 06| 處理OPCode
% }& M' g G" w 6.1 ISEQ前置處理
# D4 u6 v9 W+ K7 u6 J4 b 6.2 讀取OPCode! d+ h6 d# Y/ H' I. ]
6.3 定義OPCode
: F+ u, _. I9 F6 O1 e; f 6.4 處理OPCode
' B' U- k- `; S7 h) o$ Z% J8 [% S |CHAPTER 07| 數學運算# R I( z2 N# r* }* c0 I' m
|CHAPTER 08| 邏輯判斷
' u8 E$ A( Y5 X, T; t8 v R" f |CHAPTER 09| 變數3 v. K% I% c) y- s) r
9.1 資料封裝
! ?! u0 Y m; S& L* ? c( X# b$ t- D, Q 9.2 整數變數% `) Q5 n' t! q7 I! o
9.3 布林值變數
+ ~! ]& ~- ~2 l9 V& F9 { |CHAPTER 10| 字串讀取2 ^/ E# o/ m+ L3 O+ l
10.1 資料讀取
/ ]$ [. F( G0 C! Q8 |) \& v+ \- M 10.2 顯示文字
2 D( M# u' c' y$ k. r! C |CHAPTER 11| 在ESP8266開發板上測試! G( \* q, S7 H: l+ o
11.1 撰寫主程式3 }4 Z! J8 g) f i s
11.2 執行虛擬機器" y( T# T' W) o/ z/ A( p
11.3 調整專案架構
& B. L3 O* o0 U6 h4 R* Z 11.4 整理檔案
8 c' j9 d) U0 V |CHAPTER 12| 定義方法
0 O7 c7 s/ f; K2 V 12.1 klib
- ?& \$ L% z [" B. H3 m; X 12.2 定義Hash, q% O' {# S2 }% V( @$ u
12.3 方法查詢
) w$ S* `% I% l+ U" I& \" Q, G 12.4 在電腦測試
% d, b! b; @5 L+ c 12.5 虛擬機器狀態4 m, p2 x4 m- l
12.6 修復測試4 ]$ d5 P" d8 V. v0 { i
|CHAPTER 13| 方法參數
6 l# P) U7 N: v" \7 f 13.1 暫存資料管理1 Y- A$ U/ m+ T) q& f+ B- g, D
13.2 呼叫資訊
6 K9 u" J t% S |CHAPTER 14| 迴圈機制4 x( o* I6 W% n, x: U7 R
14.1 分析OPCode% X! {: R+ g8 @% Z& k
14.2 實作迴圈+ N; s: Q9 A: S/ l
14.3 效能分析
s8 ?3 f2 O, B: Q' I9 f 14.4 完善功能
! G" h" T+ n9 H( s& j a$ e2 j 14.5 加入測試
" N9 L$ ?9 X6 T% p |CHAPTER 15| Block機制
' c( N7 r$ k2 q0 j: ^ 15.1 Proc是什麼+ G9 F- [: t' k& W( E# B1 r! L
15.2 製作Block
( z v, Z/ [: T. {* c2 z7 ~ 15.3 跳出Block$ `! o9 v4 g/ |
15.4 存取變數" u1 p* J. |; b9 _
15.5 加入測試0 {; ], J) g$ j1 ?5 T) w6 b
|CHAPTER 16| 實作類別+ r" O/ Z# W: r& ]
16.1 RObject和RClass- X, m. g: P: p7 j$ Q! Y4 o
16.2 定義RClass
) k& g8 M% V! d 16.3 自訂類別
3 ]) E; X( Q \2 {. y 16.4 更新虛擬機器0 g* x& R- m* W, A7 o6 ?) r7 x
16.5 實作繼承
; j4 F. k' {. {& i 16.6 加入測試! @3 U* S" h' S* [5 z; _# p* W
|CHAPTER 17| 實作物件
, b/ O! d5 J, U1 y+ _6 u8 k 17.1 定義RObject
7 b( b+ l* N1 @3 i: t 17.2 產生物件
4 l5 `1 D. z, }/ e+ x. ` 17.3 加入測試! T/ D2 c! L2 B# u9 { r M
|CHAPTER 18| 實例變數
" E- C' K$ b8 ` S' T4 o 18.1 實例處理+ K- Q$ ?* \& n
18.2 實作物件
8 I! Q, F7 s' u 18.3 初始化數值
1 L l" ]6 \% G& L5 I: P# I x 18.4 加入測試3 S1 w. [' C" P4 `) J8 n
|CHAPTER 19| 垃圾回收/ n( D; c) Q y; o4 `+ i! i( [
19.1 辨識資料4 I& C3 i. |+ e2 p
19.2 減少動態配置(Allocate)
2 a; t% u# }7 l ^ 19.3 使用tgc函式庫
) ]0 |- X. @/ I j% r 19.4 加入tgc函式庫" K, a9 s6 o) F& a
19.5 套用tgc函式庫# O% J# Q5 R) G, w8 s4 O
19.6 更新測試0 M4 m- R8 M8 A
|CHAPTER 20| 整合Arduino
' G( e2 X3 U5 K( b+ ~% H8 f/ w9 J 20.1 失效的垃圾回收
0 A$ x! u5 I! b 20.2 避免Watch Dog Timer觸發
0 E2 ]3 L& _$ {' B( D& z( x) t' T 20.3 重構減少重複$ V" C( y$ A# D8 y, N( C
20.4 自動編譯mrb二進位檔案1 ^- P& a' A7 g$ F, U% r& y1 N
|CHAPTER 21| 繪製文字
" y6 s9 \; J x( X' _; d7 A8 ` 21.1 安裝函式庫0 Y2 X' _9 j, p$ [2 \1 G& L
21.2 加入螢幕類別7 K @2 t9 T1 Z7 P! ~! d
21.3 跑馬燈效果
# s+ X- W6 [ s% S5 D- ` X% Q, ~$ q$ _; b
& W$ ~3 }$ ?/ F5 ?4 b3 X* t
剩余 2% 内容需要支付 3.00×2共享币 后可完整阅读并提供下载链接
共享资料赚共享币,鼓励用户共享优质资料
|