0.3.2 |
|
---|---|
0.3.1 |
|
0.2.1 |
|
0.1.6 |
|
0.1.4 |
|
#41 in #verifier
32 每月下载量
用于 108 个 crate (3 直接)
1MB
24K SLoC
id: ir-to-bytecode title: Move IR 编译器 custom_edit_url: https://github.com/move-language/move/edit/main/language/move-ir-compiler/README.md
摘要
Move IR 编译器将 Move IR 编译为其字节码表示形式。
概述
Move IR 编译器将用 Move 编写的模块和脚本编译为其各自的字节码表示形式。用于表示这些输出的两种数据类型是 CompiledModule
和 CompiledScript
。这些数据类型定义在 file_format.rs。
除了将 Move IR 翻译为 Move 字节码之外,编译器的目的是作为字节码验证器的测试工具。因此,其任务是输出尽可能接近输入 IR 的字节码程序;在编译过程中不执行优化和高级语义检查。实际上,编译器特意将这些语义检查推入字节码,并将 Move IR 中的语义无效代码编译为等效的——语义无效的——字节码程序。然后,通过 字节码验证器验证编译后的字节码的语义。编译器命令行在编译结束时自动调用字节码验证器。
命令行选项
USAGE:
compiler [FLAGS] [OPTIONS] <source-path>
FLAGS:
-h, --help Prints help information
-l, --list-dependencies Instead of compiling the source, emit a dependency list of the compiled source
-m, --module Treat input file as a module (default is to treat file as a script)
--no-verify Do not automatically run the bytecode verifier
--src-map
-V, --version Prints version information
OPTIONS:
-d, --deps <deps-path> Path to the list of modules that we want to link with
ARGS:
<source-path> Path to the Move IR source to compile
示例用法
cargo build --bin compiler
- 这将构建编译器 + 验证器二进制文件。
- 二进制文件位于
diem/target/debug/compiler
。 - 或者,可以直接使用
cargo run -p compiler
运行二进制文件。
要编译和验证包含 Move IR 模块的 foo.mvir
编译器--地址0x42 --无-stdlib-m foo.mvir
编译和验证包含交易脚本的 bar.mvir
编译器--地址0xca --无-stdlib bar.mvir
文件夹结构
compiler # Main compiler crate. This depends on stdlib.
├── ir-to-bytecode # Core backend compiler logic, independent of stdlib.
│ ├── src
│ │ ├── compiler.rs # Main compiler logic - converts an AST generated by `syntax.rs` to a `CompiledModule` or `CompiledScript`.
│ │ └── parser.rs # Wrapper around Move IR syntax crate.
│ └── syntax # Crate containing Move IR syntax.
│ └── src
│ ├── ast.rs # Contains all the data structures used to build the AST representing the parsed Move IR input.
│ ├── lexer.rs # Lexer for the Move IR language.
| └── syntax.rs # Parser for the Move IR language.
└── src
├── main.rs # Compiler driver - parses command line options and calls the parser, compiler, and bytecode verifier.
└── util.rs # Misc compiler utilities.
依赖项
~6–15MB
~161K SLoC