iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 30
0
IoT

拿到錘子的我想在微控制器上面執行 Ruby系列 第 30

Day 30 - 後記

經過了一個月的嘗試,我們大致上已經掌握了能夠自己實現非常基礎的 Ruby VM 的能力。雖然在鐵人賽之前也花了一個月左右的時間去驗證整個想法是否可行,然後在鐵人賽的過程中重新依照之前摸索的情報再一次實作出 Ruby VM。

在最後幾天的時候反而有點懷疑這樣的主題真的適合 IoT 嗎?測試的時候確實是在開發版上運行,而且未來確實也有機會在上面實現一些功能,像是透過網路下載編譯過的 mrb 回來運行,就能夠做到類似 OTA 這類線上更新的效果。

不過在這個過程中,主要還是對於 Ruby VM 的運作以及 mruby 的設計有一個更加深入的了解,非資訊相關科系的學生在投入軟體開發的時候大多會選擇一個語言然後不斷的學習,即使是本科生也只停留在學校作業的階段,但是透過像這樣的分析跟探討,我們其實發現了很多自己在過去使用這個語言並沒有深入思考的問題。

像是 Ruby 在變數的儲存上的設計造成使用變數時的差異,而這些差異可能就會造成我們在呼叫上對於「傳值」和「傳參」的理解有所不同。或者是在 Block 或者方法參考外部的變數時,Ruby 會需要一層一層的向外尋找,如果使用的不當可能就會造成效能上的問題。

也有在 Ruby 特有的 Block、Proc、Method 等概念上,在語言底層是如何理解的,在應用上又能夠透過這樣的特性去討論能夠怎樣應用,都是非常有趣的。

可惜的是利用 mruby 現有的編譯器,只實作虛擬機的部分看起來入門相當容易,而我們在 30 天左右也獲得了一個看起來還不錯的成果。但實際上物件、陣列我們都還沒有討論到,以及一直沒有確實解決的記憶體錯誤問題,甚至要延伸到像是 GC(垃圾回收)等機制,如果真的要認真的去討論這些概念的話,可能就不會是短短 30 天可以用相對輕鬆的方式去講解的,同時也需要更多的準備。

這次鐵人賽結束後大概會有一段時間需要在 MOPCON、手邊的遊戲專案跟工作上忙碌一段時間,因此可能會暫停這個主題的探討,不過在明年會希望嘗試用不同的語言(像是 JavaScript、C#、Golang 等)來實作類似的事情。

未來如果有新的實驗或者嘗試會更新在我的部落格——弦而時習之,也希望這次的嘗試可以讓大家也挑戰看看自己在使用的語言能不能用類似的方式實作出來。


上一篇
Day 29 - 回傳值
系列文
拿到錘子的我想在微控制器上面執行 Ruby30

尚未有邦友留言

立即登入留言