- Move言語には「モジュール」と「スクリプト」の2種類のプログラムが存在する。
- モジュール
- 構造体の型と型を操作する関数を定義するライブラリ。
- 構造体の型はグローバルストレージのスキーマを定義し、モジュール関数はストレージの更新ルールを定義。
- モジュール自体もグローバル ストレージに格納される。
- スクリプト
- 実行可能なエントリポイント。
- グローバル ストレージの更新を実行する公開モジュールの関数を呼び出す。
- グローバル ストレージに公開されない一時的なコード スニペット。
- 複数のモジュールとスクリプトを含めることができる。
- モジュールの公開やスクリプトの実行は、別々の VM 操作。
スクリプト
script {
<use>*
<constants>*
fun <identifier><[type parameters: constraint]*>([identifier: type]*) <function_body>
}
- useから始まり、その後に定数、最後にmain関数の宣言が続く。
script {
// Import the debug module published at the named account address std.
use std::debug;
const ONE: u64 = 1;
fun main(x: u64) {
let sum = x + ONE;
debug::print(&sum)
}
}
- スクリプトの機能は非常に限られており、フレンドや構造体の型を宣言したり、グローバル ストレージにアクセスできない。
- スクリプトの主な目的はモジュール関数を呼び出すこと。
モジュール
module <address>::<identifier> {
(<use> | <friend> | <type> | <function> | <constant>)*
}
- 有効な名前付きアドレス、もしくはリテラルアドレス。
アドレス
module 0x42::example {
struct Example has copy, drop { i: u64 }
use std::debug;
friend 0x42::another_example;
const ONE: u64 = 1;
public fun print(x: u64) {
let sum = x + ONE;
let example = Example { i: sum };
debug::print(&sum)
}
}
module 0x42::example
の部分は、example
モジュールがグルーバルストレージ内で公開されることを指定。