怎样剥离一个解释器的执行部分?

想在资源受限的嵌入式设备上,只保留解释器的执行部分,把其他部分分离出去。
怎么样分析一个解释器,把它的执行部分整理出来??

回复内容:

题主问的JavaScript引擎是Espruino,这个解释器已经非常非常非常小了,不知道题主还需要剥离哪些东西出去?

这个JavaScript引擎的执行部分是一个解释器,而且是边parse边解释的那种,连AST都不构造。这种实现方式让我想起了最早期的PHP…这是实现解释器最慢的做法“之一”了…
所以它的解释器主体就在这个文件里:
Espruino/jsparse.c at master · espruino/Espruino · GitHub
它依赖jslex.[h|c]与jsvar.[h|c]。jslex负责词法分析,jsvar负责内存管理(包括对象结构体的定义以及一个超简易的mark-sweep GC等)。

src目录里剩下的文件,
jswrap开头的都是用于实现JavaScript标准库的,这些如果有用不到的可以删掉;
然后剩下的js开头的文件(例如jsdevice.[h|c])主要都是跟操作嵌入式设备相关的,这些也可以看题主的需求裁剪。
话说有个同样是不构造AST直接边parse边解释执行的JavaScript实现,tiny-js,也非常小。官网:Pur3.co.uk :: TinyJS
而它其实就是Espruino的JavaScript实现的前身。难怪会用同样的思路去实现…呃
Espruino – Press

As a Linux user Gordon was aware that whatever tools were used had to work reliably on multiple platforms without needing extra software, so building an interpreter into the microcontroller seemed the obvious way forwards. BASIC interpreters for microcontrollers have been around for a while (like the amazing Maximite), but until recently the amount of built-in RAM and Flash in microcontrollers has been a stumbling block for more complex languages. When Gordon saw the STM32F1 development boards with 128kb of Flash and 8kb of RAM he realised he could use the lessons learned from his TinyJS JavaScript interpreter (originally built for Morphyre) to produce something that would run within those limits – and so Espruino started!

====================================

题主问的Python解释器MicroPython看起来比Espruino大一些。它至少包括了很完整的编译器+字节码解释器+GC,这核心可裁剪的东西不太多了。能动的主要是外围包含的库了…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2536850.html

(0)
上一篇 2025年3月6日 00:04:27
下一篇 2025年2月24日 23:43:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论