#jsvm
共 9 篇文章
JSVM2:表达式求值的现实主义,左值、运算符与 ES2015 裁剪
赋值难在左值是引用不是值;运算符能委给宿主的全委;ES2015 只做了够用的一部分,readme 打钩的 for-of 和 ** 实测并没有实现。
JSVM2:return/break/continue 怎么传,Signal 信号与 finally 的坑
throw 可以白嫖宿主异常,return/break/continue 只能造 Signal 对象逐层仲裁;label 协议、switch 的 matched 布尔、finally 覆盖 return,以及两个读代码读出来的真 bug。
JSVM2:变量提升与闭包,两阶段扫描与一道经典面试题
上一篇把骨架搭完了:visitor 按节点类型分发,Path 带着 scope 和 ctx 往下传,Scope 链管所有名字的来去。这篇讲这套骨架上长出来的第一个反直觉语义:变量提升。顺着它会碰到闭包,碰到那道 循环里 和 的面试题,最后还得坦白一件没做的事:TDZ。 提升不是挪代码,是先跑一遍声明 讲变量提升…
JSVM2:解释器的骨架,visitor、Path 与作用域链
上一篇说了为什么要自研,以及整体链路:源码经 @babel/parser 出 AST,然后交给解释器求值。这篇拆开解释器本身。它的中枢代码只有 5 行,真正花心思的是两个抽象:Path 和 Scope。前者向 Babel 借的,后者对应 ECMA-262 里的环境记录。这套结构的雏形在 [2020 年那篇综述](/p…
使用TS 开发 JS 虚拟机
背景 在我们的小程序&低代码平台中,有需要执行动态下发代码的诉求。世面上已知的一些 vm 没有完整通过 es5 或 es2015 测试用例的,无法在生产环境使用。因此需要自研一个 JSVM 引擎。 目前已放到 github 上 :jsvm 2 传送门。 目前除了 WithStatement 语句外,其他 es5 特性…
