qq_33538558 2015-12-28 10:00 采纳率: 100%
浏览 1582
已采纳

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

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

  • 写回答

1条回答 默认 最新

  • qq_335498556 2015-12-28 10:25
    关注

    题主问的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 - PressAs 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,这核心可裁剪的东西不太多了。能动的主要是外围包含的库了…

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器