#虚拟机 #字节码 #JavaScript #运行时 #中间语言 #原始类型 #操作符

bin+lib amvm

Apika 的我的虚拟机。一个具有中间语言的虚拟机

1 个不稳定版本

0.1.0 2024 年 3 月 13 日

#145模拟器

MIT 许可证

76KB
2K SLoC

Apika 的我的虚拟机 (AMVM)

AMVM旨在构建一个运行自定义字节码的虚拟机。此项目与Brayan-724/js-ast非常相似,它是一个JavaScript分词器、解析器和运行时。目标是把JavaScript转换成这种字节码,使其性能更好,并使用这个虚拟机来构建需要运行时的未来项目。

目标

  1. 构建一个虚拟机。
    1. 成功处理字节码。
    2. 实现原始类型(String,一些数字 u8..)。
    3. 实现基本操作符(+ - * /)。
    4. 实现基本语句(ifforwhile)。
  2. 将JavaScript转换为字节码。

使用它

进行中!

合作

由于此项目非常年轻,因此会有很多变化。如果您想合作(我非常感激)您需要了解以下内容

这分为两部分:lib.rsmain.rs

还有更多文件,它们不是为 main.rs 编写的,而是为 lib.rs 编写的。

lib.rs

这里关于解析、生成和运行字节码的所有内部信息,这将作为 amvm-core 发布,以便在项目之间共享或与引擎紧密接触。

main.rs

这是最终用户命令行界面所在的位置,因此它具有 IO 操作。作为 amvm 发布,以运行字节码输出文件。

字节码

AMVM_HEADER       = "\x08\x48\x30" // Arbitrary value for sign (0B4B30)
COMMAND_SEPARATOR = '\0'

CMD_DCLR_VAR	  = '\x01'
CMD_ASGN_VAR	  = '\x0D'
CMD_PUTS	      = '\x0E'
CMD_EVAL	      = '\x02'

VAR_CONST	      = '\x0B'
VAR_LET	          = '\x0C'

EXPR_VALUE	      = '\x03'
EXPR_VAR	      = '\x0A'
EXPR_ADD	      = '\x09'

VALUE_UNDEFINED	  = '\x04'
VALUE_STRING	  = '\x05'
VALUE_U8	      = '\x06'
VALUE_I16	      = '\x07'
VALUE_F32	      = '\x08'

(CMD_DCLR_VAR) 命令声明变量

在当前上下文中声明一个变量。

``

无运行时依赖