一个用Dart编写的JavaScript解释器,能够通过评估自身来评估自身

2013年,我将一个更早的、用JavaScript的子集编写的JavaScript解释器(能够自我解释)移植到了Dart。2021年,我重新发现了这个项目,并将其移植到了支持空安全(sound null-safe)的Dart 2.13,稍微改变了AST节点表示的方式。

结果是一个有些hacky(取巧)的概念验证,代码量是原始版本的近3倍。我最初写这段代码是为了学习Dart,我想。我还找到了一篇名为jsi-in-dart.mdown的文章(德语),我在其中(主要是给自己)记录了需要更改或扩展的内容。

你应该像我一样写解释器吗?大概不应该。

我仍然喜欢jsi.js的简洁和精巧。AST是JSON可序列化的,我最初使用这个特性来引导Objective-C和Java中的JSI-AST解释器,以便为移动设备提供一个可嵌入的跨平台JavaScript解释器。在其当前形式下,它主要(并且过去也主要是)一个概念验证,而非生产就绪的库。(我们继续使用了一个类似Lisp的语言,它的运行时更简单,并且比JavaScript的边缘情况更少。)

GitHub

查看 Github