首页>>资讯>>产业

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

2024-01-19 16:11:10 106

Sui的原生编程语言Move将在2024年初推出新功能,包括Enums、宏函数和Method语法等突破性更新。


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


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


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


github更新:https://github.com/MystenLabs/sui/issues/14062


Move重大更新


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


1、Method语法


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


github:https://github.com/MystenLabs/sui/issues/14063


更新前:


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


更新后:


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


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


2、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)


3、宏函数


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


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


例如:


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



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


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


4、Enums(枚举)


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


github:https://github.com/MystenLabs/sui/issues/15653


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主网上线。相反,该功能将首先在开发网上启动,然后是测试网,一旦在环境中测试合适,最后会上线主网。


5、其他新功能


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


突破性更新


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


1、结构声明


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


2、mut注释


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


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


3、新关键字


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包的默认版本。

声明:本网站所有相关资料如有侵权请联系站长删除,资料仅供用户学习及研究之用,不构成任何投资建议!