#bytecode #ir #compile #script #verifier #input #automatic

已删除 mv-ir-compiler

将 Move IR 转换为字节码编译器

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 日

#41 in #verifier

32 每月下载量
用于 108 个 crate (3 直接)

Apache-2.0

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 编写的模块和脚本编译为其各自的字节码表示形式。用于表示这些输出的两种数据类型是 CompiledModuleCompiledScript。这些数据类型定义在 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