Move 2024全新升级,新版增加枚举和宏函数等功能

发布时间:2024年01月19日

Move计划于2024年初推出新版,2024版将增加枚举Enums、宏函数、Method语法等功能。这些更新为Move编程语言引入了新的定义数据和调用函数的方式,使在Sui上构建应用程序更加灵活,并符合当前编程语言的最新期望。

Move是Sui的原生编程语言,允许开发人员编写高效而富有表现力的代码。由Mysten Labs的联合创始人兼首席技术官Sam Blackshear设计,这种以智能合约为重点的编程语言充分利用了Sui的可扩展性和高吞吐量环境。

Move 2024版在更新中引入了枚举Enums、宏函数、Method语法等新功能,使其更加强大。作为开源项目,Move和Sui允许社区不断进行改进。

Move重大更新

以下功能将首先在Alpha版本中提供测试,然后加入发布候选并最终发布。

Method语法

Method语法是一种语法转换,允许在值上调用函数,而不是直接从模块调用。这个改变极大地提高了在Move中编程的便利性。

例如:

let c2: Coin<SUI> = c.withdraw(10);

升级后:

let c2: Coin = sui::coin::withdraw(&mut c, 10);

新增的语法 use fun 将用于添加公共或内部方法的别名。此功能可用于创建一个别名以重命名方法,或者用于在关联类型定义模块之外创建本地Method别名。

Index语法

在Method语法的基础上,Index语法添加了访问索引的代码,具体的代码取决于访问类型。暂时而言,这些代码如下:

&x[i] expands to x.borrow(i)
&mut x[i] expands to x.borrow_mut(i)
x[i] expands to *x.borrow(i)
x[i] = v expands to x.assign(i, v)

宏函数

高阶函数(如 map、filter、fold 和 for_each)在许多语言中用于简洁地转换集合。Move没有lambdasclosures函数指针,这使得在运行时不可能定义这些操作。

宏函数允许Move模仿这些类型的操作,而无需在运行时支持这种行为。模仿高阶函数的宏的主体将在每个调用站点内联,调用站点可以提供一个在宏展开时替代的lambda。

例如:

let v2 = v.map!(|x| x + 1);

v.for_each!(|x| foo(x));

此外,lambdas将通过 break 和 return 支持控流。

Enums(枚举)

枚举允许开发者定义一种单一类型,该类型可能包含多种不同形状的数据。与总是具有相同字段的结构不同,枚举可以根据枚举的变体具有不同的字段。例如,在 enum Option<T> { None, Some(T) } 中,变体 None 没有字段,而变体 Some 具有类型为 T 的单个字段。

Move将允许使用匹配表达式对枚举进行解构。Move中的一些枚举示例如下:

public enum Color {
RGB { red: u8, green: u8, blue: u8 },
HSL { hue: u16, saturation: u8, lightness: u8 },
Hex(u32)
}
public enum Option<T> {
None,
Some(T),
}
public fun is_rgb_color(color: Color): bool {
match (color) {
Color::RGB{ .. } => true,
_ => false,
}
}
const EOptionIsNone: u64 = 0;
public fun unwrap_some<T>(option: Option<T>): T {
match (option) {
Option::Some(x) => x,
Option::None => abort EOptionIsNone,
}
}

尽管枚举是Move 2024版本的一部分,但它们不会立即在Sui主网上线。相反,该功能将首先在开发网上启动,然后是测试网,一旦在环境中测试合适,最后会上线主网。

其他新功能

除上述显示的功能之外,Move 2024版本还包括一些较小的额外更新,例如消除显式友元声明的需要,并允许 break 带有一个值。路线图中详细说明了这些更新背后的原因和示例。总体上,它们旨在未来保护Move并提高编码体验的效率。

突破性更新

Move的一些计划中更新将影响现有代码。在这里列出的三个更新中,大多数需要更明确的代码,例如,如果为局部变量分配了或以可变方式借用了,则需要包括 mut 注释。

结构声明

目前,结构声明只能是 public,因此不需要包含可视性修饰符。为了为未来的结构类型具有除 public 之外的可视性留出空间,Move 2024版本将要求在所有结构声明中使用 public。

mut注释

目前,在Move中,所有局部变量都可以进行分配 x = e 和可变借用 &mut x。在进行修改或可变借用之前,变量不需要在 mut 注释的情况下进行注释,因为开发人员始终可以在本地查看以检查分配或可变借用。然而,上述新的Method语法将在某些情况下自动借用本地变量。

为了在存在Method调用的情况下提高可读性和可理解性,Move 2024版本将要求在对局部变量进行分配或可变借用时添加 mut 注释。

新关键字

Move 2024版本增加了先前作为标识符接受的新关键字。新关键字包括:

  • mut
  • enum
  • type
  • match

为了帮助迁移具有这些名称的现有字段、函数或局部变量,新语法允许开发人员将关键字用作标识符。例如:

let `type` = 0; `type` + 1

简而言之,可以通过用反引号括起来的方式将任何关键字用作标识符,例如 `type`。

测试和发布

Move 2024版本将以审慎的方式推出,让开发人员测试新功能并相应地更新现有代码。开发人员可以通过在其Move.toml文件的 [package] 部分下指定 edition = “2024.alpha” 来开始测试alpha版本。在alpha版本下发布的功能将不稳定,可能无法编译。

在这些新功能变得相对稳定且引入了突破性更新后,将发布候选版本。与alpha版本一样,开发人员可以通过在其Move.toml文件的 [package] 部分下指定 edition = “2024.rc” 来测试候选版本。

尽管候选版本相对于alpha版本更为稳定,但未来可能会发生一些小的突破性更新。在今年初,可能在三月初,当编译器构建项目时,将询问开发人员是否要迁移到候选版本。然后,自动工具将迁移项目到新版,添加Move.toml中的版本标记并自动修复所有突破性更新。

今年晚些时候,2024版本的Move更新将从候选版本推进,edition = “2024” 将成为所有新的Move包的默认版本。


关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网英文Twitter中文TwitterDiscord英文电报群中文电报群

文章来源:https://blog.csdn.net/Sui_Network/article/details/135699040
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。