Move 2024は、Mysten Labsが管理するMove言語の新しいエディションです。このガイドは、2024エディションと以前のバージョンのMove言語の違いを理解するのに役立つことを目的としています。

このガイドでは、新エディションの変更点の概要を説明します。より詳細で網羅的な変更リストについては、Suiドキュメントを参照してください。

新エディションの使用

新エディションを使用するには、moveファイルでエディションを指定する必要があります。エディションはmoveファイルでeditionキーワードを使用して指定します。現在、利用可能なエディションは2024.betaのみです。

edition = "2024.beta";

移行ツール

Move CLIには、コードを新エディションに更新する移行ツールがあります。移行ツールを使用するには、次のコマンドを実行します:

$ sui move migrate

移行ツールは、let mut構文、構造体の新しいpublic修飾子、friend宣言の代わりにpublic(package)関数の可視性を使用するようにコードを更新します。

let mutによる可変バインディング

Move 2024では、可変変数を宣言するためのlet mut構文が導入されました。let mut構文は、宣言後に変更可能な可変変数を宣言するために使用されます。

可変変数にはlet mut宣言が必要になりました。mutキーワードなしで変数を再代入しようとすると、コンパイラはエラーを発生させます。

// Move 2020
let x: u64 = 10;
x = 20;

// Move 2024
let mut x: u64 = 10;
x = 20;

さらに、mutキーワードはタプルの分解や関数の引数で可変変数を宣言するために使用されます。

// 値で受け取り、変更する
fun takes_by_value_and_mutates(mut v: Value): Value {
    v.field = 10;
    v
}

// `mut`は変数名の前に置く必要があります
fun destruct() {
    let (x, y) = point::get_point();
    let (mut x, y) = point::get_point();
    let (mut x, mut y) = point::get_point();
}

// 構造体のアンパック
fun unpack() {
    let Point { x, mut y } = point::get_point();
    let Point { mut x, mut y } = point::get_point();
}

フレンドの廃止

Move 2024では、friendキーワードは非推奨となりました。代わりに、public(package)可視性修飾子を使用して、同じパッケージ内の他のモジュールに関数を公開できます。

// Move 2020
friend book::friend_module;
public(friend) fun protected_function() {}

// Move 2024
public(package) fun protected_function_2024() {}

構造体の可視性

Move 2024では、構造体に可視性修飾子が付きます。現在、利用可能な可視性修飾子はpublicのみです。