Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit an issue.
构建Smart Contracts (Move)Move Book | Move 书籍Move 2 Release Notes | Move 2 版本说明

Move 2 版本说明

本页描述 Move 2 语言的各个版本发布情况。

新特性的参考文档已整合至书中,并在文本中用 ” 自语言版本 2.n 起 ” 标记。

Move 2.2

Move 2.2 语言版本新增以下特性:

  • 可选 acquires:函数声明中的 acquires 注解现在可以省略,由编译器自动推断。

  • Function Values :Move 现在支持将函数作为值传递,可作为参数或存储在资源中。

    详见 Function Values

Move 2.1

Move 2.1 语言版本新增以下特性:

  • Compound Assignments:现在可以使用 x += nx -= n 等语法来组合赋值与算术运算。

    支持的运算符详见 Compound Assignments

  • Loop Labels:现在可以为循环添加标签,并通过 breakcontinue 表达式引用这些标签。这使得可以从嵌套循环中继续或中断外部循环。

    详见 循环标签参考文档

  • Underscore function parameters are wildcards, not symbols:名为 _ 的函数参数不再作为变量使用:它们不会绑定值,且函数的多个此类参数不会引发冲突。在值表达式中使用 _ 将产生错误,因为它没有值。这使得 _ 的行为更接近其在模式和 let 表达式中的通配符角色(不绑定值)。

Move 2.0

Move 2.0 语言版本新增以下特性:

  • 枚举类型:新增定义可存储类型不同数据变体的功能。

    文档详见枚举类型章节

  • Receiver Style Functions:支持使用 value.func(arg) 这种熟悉的语法调用函数。

    文档详见点接收者函数调用风格章节

  • 索引表示法:支持通过 &mut vector[index]&mut Resource[addr] 等语法访问 elements of vectorsresource storage

  • Positional Structs:支持定义包装类型如 struct Wrapped(u64)

    文档详见 位置结构体章节 。枚举变体也支持位置形式。

  • Dot-dot pattern wildcards:支持 let Struct{x, ..} = value 这类语句来匹配数据的特定部分。

    文档详见 部分模式章节 。这些模式同样适用于枚举变体。

  • Package visibility 允许声明一个函数在包内任意位置可见,但在包外不可见。

    友元函数仍然受支持,不过在多数情况下包内可见性更为适用。作为一种更简洁的写法,包内函数和友元函数可以分别简写为 package funfriend fun,而不用较长的 public(package) funpublic(friend) fun

    该特性文档见 此处

  • Assert abort code optional assert!宏现在可以只带一个参数使用,省略中止代码,此时将选择默认代码。另见 此处

  • New Cast Syntax 此前类型转换必须始终放在括号内,需要写成 function((x as u256)) 这样的代码。

    现在取消了这一要求,类型转换可以作为顶层表达式不加括号使用,例如 function(x as u256)。但在表达式中仍需写成 (x as u64) + (y as u64)

    新的枚举变体测试 data is VersionedData::V1 同样适用此规则。

  • Well-defined evaluation order 以下情况的求值顺序现已明确定义(此前未作规定):

    • 函数调用的(a)参数和(b)二元运算的操作数表达式都从左到右求值。
    • 对于形如*lexp = rexp的”可变”表达式(参见 通过引用修改 ),其中 lexp&mut T 类型的表达式,rexpT 类型的表达式,rexp 会先于 lexp 被求值。
  • Bug fix for acquires annotation 函数应被标注 acquires 当且仅当它直接或通过调用链间接使用 move_fromborrow_globalborrow_global_mut 访问资源。

    否则,这将是一个错误。此前,当调用链图中存在循环时,这类错误不会被报告:这是不正确的行为。我们现在已修正该行为,即使调用链图中存在循环也会报告这些错误。