0.3.2 2022年8月23日
0.3.1 2022年8月13日
0.2.1 2022年7月22日
0.1.6 2022年7月5日
0.1.4 2022年5月23日

#bytecode中排名第110

Download history 20/week @ 2024-03-11 16/week @ 2024-03-18 7/week @ 2024-03-25 102/week @ 2024-04-01 3/week @ 2024-04-08 9/week @ 2024-04-15 22/week @ 2024-04-22 13/week @ 2024-04-29 6/week @ 2024-05-06 13/week @ 2024-05-13 19/week @ 2024-05-20 4/week @ 2024-05-27 10/week @ 2024-06-03 11/week @ 2024-06-10 39/week @ 2024-06-17 10/week @ 2024-06-24

每月下载量70
用于166 个crate(44 直接使用)

Apache-2.0

580KB
13K SLoC


id: vm title: 虚拟机 custom_edit_url: https://github.com/move-language/move/edit/main/language/move-binary-format/README.md

MoveVM 执行用 Move 字节码表示的交易。有两个主要的crate:核心VM和VM运行时。VM核心包含VM的低级数据类型 - 主要包括文件格式及其抽象。还定义了气表量度逻辑抽象。

概述

MoveVM 是一个具有静态类型系统的栈式机器。MoveVM 通过文件格式、验证(参考 字节码验证器 README)和运行时约束来遵守 Move 语言的规范。文件格式的结构允许定义模块、类型(资源和无限制类型)和函数。代码通过字节码指令表示,这些指令可能引用外部函数和类型。文件格式还强加了一些语言的不变量,如不透明类型和私有字段。从文件格式的定义中可以看出,模块为函数和类型定义了一个范围/命名空间。所有字段都是私有的,因此类型是不透明的,类型不携带任何函数或方法。

实现细节

MoveVM 核心crate提供了文件格式的定义以及与文件格式相关的所有实用工具。

  • 对文件格式和字节码的简单Rust抽象(diem/language/move-binary-format/src/file_format.rs)。这些Rust结构在代码库中被广泛使用。
  • 文件格式的序列化和反序列化。这些定义了代码的链上二进制表示。
  • 一些格式化打印功能。
  • 文件格式的proptest基础设施。

diem/language/move-binary-format/src/file_format.rs 中的 CompiledModuleCompiledScript 定义分别是 Move 模块和交易脚本的顶级结构体。这些结构体提供了对文件格式的简单抽象。此外,还定义了一系列 视图,以便于导航和检查 CompiledModuleCompiledScript

文件夹结构

.
├── src             # VM core files
├── tests           # Proptests
└── vm-runtime      # Interpreter and runtime data types (see README in that folder)

依赖项

~1–2MB
~40K SLoC