- 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モジュールがグルーバルストレージ内で公開されることを指定。