Facebook Move 语言虚拟机 VM 简介

虚拟机 VM

Move VM 执行以 Move 字节码表示的交易。它有两个核心包:核心 VM 和 VM 运行时。VM 核心包含 VM 的低级数据类型——主要是文件格式及其抽象。此处还定义了燃气计量(Gas metering???)逻辑抽象。

概述

MoveVM 是具有静态类型系统的堆栈机。 MoveVM 从几个方面来约束 Move 语言规范,包括混合文件格式、验证(可参阅验证器 README)和运行时的约束。文件格式的结构允许定义模块,类型(资源和非限制类型)和函数。代码通过字节码指令表示,字节码指令可以引用外部函数和类型。文件格式还强加了语言的某些不确定量,例如 opaque 类型和私有字段。根据文件格式的定义,我们知道可以通过模块(Modules)来定义函数或类型的作用域(Scope)或者说命名空间(Namespaces,译注:就是包名)。如果所有字段都是私有的,则类型是不透明的,并且类型不带任何函数或方法。

实施细节

Move VM 核心包提供文件格式的定义还有相关的实用程序:

  • 一个简单的 Rust 抽象文件格式(libra / language / vm / src / file_format.rs)和字节码。这些 Rust 结构广泛应用于代码库中。
  • 文件格式的序列化和反序列化,定义了代码的 on-chain 二进制表示。
  • 一些漂亮的打印功能。
  • 文件格式的 proptest 基础结构。
  • 天然气成本/综合基础设施。

libra / language / vm / src / file_format.rs 中的 CompiledModule 和 CompiledScript 定义分别是 Move Module 或 Transaction Script 的顶级结构。这些结构提供了对文件格式的简单抽象。此外还定义了一组视图,以便轻松浏览 CompiledModules/CompiledScripts。

文件夹结构

├──cost_synthesis   #天然气成本合成基础设施
├──src              # VM 核心文件
├──测试 				#Proptests
├──vm_genesis      # 帮助生成一个创世块,即区块链的初始状态
└──vm_runtime	 # 解释器和运行时数据类型(参见该文件夹中的 README)

译自 https://developers.libra.org/docs/crates/vm

展开阅读全文

没有更多推荐了,返回首页