#bytecode #programming-language #vm #statically-typed #language #p-code-machine

bin+lib

用于静态和动态类型编程语言的基于寄存器的字节码机器

6 个版本

0.6.0 2023 年 10 月 24 日
0.5.5 2020 年 3 月 10 日
0.5.4 2019 年 2 月 23 日
0.5.3 2018 年 12 月 17 日

#362编程语言


2 crate 中使用

自定义许可

56KB
1.5K SLoC

Strontium

简介

锶是一个具有类型寄存器和多方法的字节码机器,用于静态和动态类型编程语言。

它主要用于支持 Mag 作为语言引擎的底层执行部分。任何 Mag 源代码首先通过解析器,然后编译为 Strontium 字节码,最后由这个虚拟机解释。

指令集架构

使用轻量级的 RISC 类指令集架构,以保持指令数量小且易于维护,同时使用多个字节码指令的组合来实现更复杂的功能。

寄存器

机器启动时预分配以下寄存器

寄存器 类型 内容 描述
ip UInt64 0 bc 寄存器中读取下一个字节的索引。
bc Array<UInt8> [] 运行程序的字节码。
r1..r8 Empty 通用寄存器

使用 LOAD 指令在运行时从字节码中加载值到通用寄存器。

指令集

以下指令可以用于程序字节码来操作寄存器

操作码 名称 描述
0 HALT 立即停止所有执行。
1 LOAD 从程序字节码中加载一个 Value 到寄存器中。
2 MOVE 将一个值从一个寄存器移动到另一个寄存器。操作后源寄存器将被清空。
3 COPY 将一个值从一个寄存器复制到另一个寄存器。源寄存器将保持不变。
4 CALCULATE 在两个寄存器上执行计算(ADDSUBTRACTMULTIPLYDIVIDE),并将结果写入第三个寄存器。
5 COMPARE 在两个寄存器上执行比较(EQNEQLTLTEGTGTE),并将结果写入第三个寄存器。
6 BITWISE 对一个寄存器(NOT)或两个寄存器(ANDORXORLSHRSH)执行位运算,并将结果写入另一个寄存器。
7 跳转 使用以下方法之一(绝对正向反向)将程序计数器设置为存储位置中的值。
8 JUMPC 与上一条指令相同,但额外带有一个寄存器地址参数。只有当指定的寄存器包含值为真时,才会执行跳转。
9 中断 发出需要立即关注的事件(读取打印)。
10 调用 未实现的调用指令
11 返回 未实现的返回指令

本README将很快更新,添加更多文档。

项目状态

该项目仍处于alpha阶段,因此该库的语义和API表面将在一段时间内动态变化。请勿在生产环境中依赖于此,并预期会有重大变化。

如果您有兴趣参与这个项目,请与我们联系!

测试

即将推出

许可协议

MIT许可协议下授权。

依赖项

约7-18MB
约239K SLoC