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 等)来实作类似的事情。

未来如果有新的实验或者尝试会更新在我的部落格——弦而时习之,也希望这次的尝试可以让大家也挑战看看自己在使用的语言能不能用类似的方式实作出来。


<<:  LeetCode 53. Maximum Subarray

>>:  【Day 29】练习专案 2/2 - Figma To Flutter

Day_01 Openwrt intro

你曾经被有家里的网路设备介面与功能雷到吗?你讨厌路由器原生不亲民的页面吗?你想要更多功能可是预算却有...

[13th][Day5] 建立一个 daemon container

除了 交互式的 container(interactive container) 也能建立长期运行的...

Day8:原来机器学习这个词跟我想的不太一样

  这几天研究下来,发现有三个词汇很让人搞不懂,也就是人工智慧(Artifical Intellig...

[影片]第27天:物件导向程序设计-类型转换(实例105~108)

4.7 类型转换 实例105 强制转换 实例106 将int 数值自动转型为double 数值 实...

< 关於 next.js: 开始打地基| Next中的Pages,究竟有什麽用途? >

09-15-2021 本章内容 pages意想不到的用途! 每个页面都是以pages作为基准路径 动...