回顾 7/28Sui AMA:Move 编程语言

本视频回顾了与 Mysten 实验室成员就Sui Move 编程语言进行的 AMA。

回顾 7/28Sui AMA:Move 编程语言

欢迎大家参加今天的 AMA 会议,我叫 Koh,在今天的会议中,我们将讨论Move 编程语言。现在,我将让团队成员分享他们的兴趣所在。让我们从你 Damir 开始。

达米尔

我正在努力争取让我在公司的正式头衔变成Move Guy,但现在,我只是Move 软件工程师。

托德

我从 2018 年开始研究Move 。我编写了源语言和其他一些编译器。我还涉足过Move 上的其他各种事情,无论是虚拟机还是工具。现在,我更专注于我们在Sui 上集成Move 的方式。

亚当

我也是Move 团队的一员,目前的工作重点是开发人员体验和工具。我最近的工作是改善Move 的 Visual Studio Code 插件的状态,它现在比几个月前好多了。

艾玛

自 2020 年以来,我一直在Move 团队全职工作。我的大部分贡献都来自Move prover,我还为 Diem 框架编写了很多正式规范。现在,我正在为Move 做出贡献,并为我们的Sui 核心框架编写大量代码。

. . .

托德

我要说的是,"面向对象 "是一个有内涵的术语。在

Move 核心语言;我们在Sui 方面添加了我们称之为对象的东西。我认为在某种意义上,它们的行为类似于对象,但如果你来自 Java 或其他面向对象的语言,你不会发现面向对象的编程风格。你可能期望有接口、继承、动态分派或虚拟函数等,但这些都不存在。

从存储模型的角度来看,我们确实有对象。我们有各种单独的数据包,这些数据包属于特定类型,有一个 ID,我们称其为对象。

. . .

问题 2:你们是否支持Move 以外的任何人都可以使用的翻译器,你们打算如何应用?

亚当

Move 是一种不同的语言,这不仅仅是语法的问题。如果你看看不同的编程语言,会发现它们有一些共同的特点,比如循环、变量、函数等,但如果你再深入研究一下以区块链为目标的语言,就会发现它们之间的差异是相当大的。Move 和其他语言的情况也是如此,你可能想用这些语言为不同区块链的智能合约编程。大多数安全属性,例如,它无法进行分析,它管理内存的方式,以及它管理存储的方式。所有这些都与其他大多数语言截然不同。

因此,我想说的是,至少要编写一个转译器或翻译器,将用一种语言编写的针对区块链的代码神奇地转换成Move 的代码,并能正常运行,这并非易事,而且在某些情况下,可能也是不可能的。

. . .

问题 3:Move 如何帮助改进Sui 的智能合约?如何实现安全性,尤其是规模化?

埃玛

与其他语言相比,Move 是专为区块链用例而设计的。它从 Rust 等语言中借鉴了大量安全特性,而且在设计之初就考虑到了形式上的可验证性。我们计划指定Move 的核心代码,以处理以下问题:我们如何分配奖励?如何转账?这也将有助于提高安全性。

亚当

在创建Move 语言时,编写智能合约的语言已经存在,只是没有内置的安全属性。一切都必须通过明确的编程干预才能实现。有了Move ,许多事情都可以通过编译器或艾玛已经提到的验证器来实现。不过,即使没有求证器,你想保留的属性(如无双重花费)也会内置于语言中。这也是 Solidity 等传统老式区块链语言的主要优势和不同之处。

. . .

问题 4:与其他特定语言相比,Move 有哪些优势?

达米尔

Move 是一种以资产为中心的语言,这意味着它为您提供了一种定义资产类型(网络上有价值的东西)的方法,而这正是Move 表达能力的主要区别。在大多数其他语言中,您必须创造出资产的含义,而不是定义并说这是一种可以采取多个步骤的资产。Move 可以让您以非常简短、简单和直接的方式实现这一点。

托德

因此,除了资产之外,这里的问题是,为什么我需要一种区块链专用语言?为什么我不能使用 Go 或 Rust 或 WebAssembly 或其他语言?我认为资产是答案的一部分,但我们也有:

  • 确定性:如果你只是把 Rust 或 Go 扔到这个东西上,那么这些语言就不是确定性的,你必须做大量的工作才能使其成为现实。最终,你将在这种语言中构建一种子语言,而且你可能无法使用任何你过去想使用的库。在同一种语言中构建完全不同的语言环境,你会失去很多实用性。
  • 计量:你要确保你使用的网络计算资源不超过你已支付的费用,并确保网络对你的使用是确定和公平的。付费是一种方法,但你需要有能力对执行情况进行计量,并且能够说,我已经完成了 X 次计算,你欠我这么多,以便支付费用。

. . .

问题 5:您对Move 新版本中的哪些更新最感兴趣?开发人员如何利用这些更新?

托德

Sui 光学系统的一大特点是并行性。通常在区块链环境中,所有交易都是有序的,即使是不相关的交易也是如此。例如,爱丽丝(Alice)向鲍勃(Bob)发送了一枚硬币,并说我也向亚当(Adam)和艾玛(Emma)发送了一些硬币,这些交易并不相关,但在普通区块链中,你必须等待所有交易按照相同的顺序达成共识。这有点傻,所以在Sui 中,我们有一个对象模型,可以让我们知道这些操作是否相关,这样我们就可以并行运行它们,并以Move 的原始形式运行。

达米尔

除此之外,我们还有不同的所有权模式和不同的存储模式,这也将为所有权提供额外的安全保障。因此,如果你拥有某个东西,任何人都无法从你手中夺走它。但是,在 solidity 和可能的 coreMove 中,如果出现错误,这个模块就无法访问你的对象。

谢谢。有很多关于并行性的后续问题,特别是共享对象与单个对象的问题。有谁想就此发表意见?

托德

好吧,如果我想让很多人访问同一个对象,该怎么办?在Sui 上,我们有两种方法可以做到这一点:

  • 你可以拥有一个任何人都可以访问的共享对象;它可能是一笔交易,也可能是对该对象的一些修改。在这种情况下,我们必须达成共识,就像你习惯的那样。不过,我们只需要就该共享对象达成共识,其他对象仍然可以并行运行。此外,我们还可以与其他共享对象并行运行。
  • 你可能会遇到这样的情况:我已经用完了这个对象,所有数据都是不可变的,我不会改变它。我只是想让其他人从中提取数据,并让他们自己的事务不可改变。因此,你可以创建一个只读对象,并将其冻结为不可变对象。

. . .

问题 6:Move 语言有哪些课程?

达米尔

如果您想学习Move ,我建议您直接查阅Sui 文档。我们一步一步地把所有东西都写下来了。你可以直接试用这些代码并将其部署到网络上。

如果您对编码略知一二,我们还有一个不错的资源。有一套示例来帮助您入门。它具体涵盖了Move 的大部分主要功能,但当你看到这些示例时,你就会明白其中的重点,因为大部分示例都非常简洁明了。

亚当

我想说明两点:不要害怕依赖项。我认为安装依赖项的主要问题出在 Windows 系统上,所以说明显然就在那里。这应该更简单,而且所有这些都可以在网上免费获取,所有文档都是公开的,我们也欢迎大家贡献自己的力量。访问Sui 开发人员门户网站找到我们的文档,开始黑客之旅。

. . .

问题 7:Move 的长期愿景是什么?我们的前进方向是什么?

托德

我们可以谈很多不同的事情,我会尽量谈很多。

  • 我们正致力于扩展语言的可用性,并关注语言的表现力。我们需要更好的开发人员工具,无论是你可能期待的自动格式化工具,还是让编写测试变得更容易的工具。
  • 要让人们在我们交谈的过程中学会这门语言,还有很长的路要走。在求证器方面,我们仍然需要让求证器完全工作并集成到Sui 中,以便人们更容易编写。
  • 还有语言的实用性。有些东西,我们在其他语言中会认为是理所当然的,无论是漂亮的语法小技巧,如使用括号对向量进行索引访问,还是一般的 for 循环。

艾玛

此外,我们还希望在Move 上改进Sui ,例如,通过引入不同类型的所有权来 改进对象模型

现在,我们无法将对象向量传递到入口函数中,这对我们的表现力造成了一些影响。由于缺乏这种功能,有些代码我无法完成,因此我们也在努力改进这些功能。

亚当

语言的发展方向完全取决于你们,也就是开发人员社区,我们欢迎反馈意见。事实上,我们希望我们未来的工作,除了我们认为对语言和生态系统有利的事情外,还能以实际使用语言的人认为对语言在生态系统中的重要性为驱动力。

达米尔

在这一点上,很多人问我们关于语言的问题,我们也不知道。我们不可能在这个时候知道,因为我们所有人都与这种语言打了很长时间的交道。我们不知道这门语言的起点和发展道路。因此,理想情况下,请提交一些反馈意见。如果你看了教程后有不明白的地方,请给我们留言,让我们知道这是不清楚的地方。

我们的问题就问到这里,如果听众有问题,我们可以花几分钟时间提问。

社区成员 #1:

大家好。我想对这一理论思想有一个全面的了解。我显然有ERC 20和ERC 721,我有点喜欢这样的想法:在Sui ,这也许不是必要的,或者说定理似乎是非常以接口为中心的。而在Move 中,它是以类型为中心的,几乎是基于泛型的理念,而且是静态可验证的。请您谈谈这一点,以及您是如何设想令牌标准的发展的?

达米尔

好吧,接口存在于Solidity世界中,只是为了让人们知道这些构建代币的代码实际上就是代币。有了代币类型,基本上就可以说这是ERC 20或这是Sui ,这样我们就可以在所有代币之间进行统一,它们的行为方式都是一样的。关于ERC 721 或其他 NFT 标准,我们也不需要它们,因为默认情况下,每个对象都是人们通常所说的 NFT,甚至硬币本身也是,只是具有一定价值的硬币在某种程度上是一种 NFT。我们并没有说这种硬币是唯一存在的硬币,因为我们认为会有项目创造出自己的硬币。它将是一个不同的类型,它将以不同的方式表现,它可能有一些管理这个硬币的机构,或者只是一些使用这个硬币的方法,比如想象一下只能在内部展示两次的硬币,它是可以实现的。

托德

硬币的一大优点是,一般来说,你希望所有硬币的行为方式都是一样的。标准的整个要点在于,你是站在事物的稳固性一边的,所以你会想,我希望能够进行这些记录操作,而且你可能希望它们以自然的方式工作,比如拆分、连接之类的事情。因此,你不必特意去编写自己的模块,只需编写一个 struct 即可。

社区成员 #2:

在更新或更改模块时,我有一个关于发布合约模块的简单问题。例如,在 solidity 中使用代理合约,是这种情况吗?或者说,这只是一个如何构建封装功能的问题?也许你有这方面的想法?

托德

是的,我们最近经常讨论这个问题。我想说的是,根据对象的不同,你可以进行代理设置。我想说的是,你可以编写一个使用现有资产的新模块。根据现有模块中暴露的内容,你基本上可以编写它的第二版,或者至少有一些包装行为。我们正在研究用新版本代码完全替换软件包的问题。

随之而来的还有一些安全问题,比如,如何确保有人不会做一些邪恶的事情,试图窃取现有资产?如何确保他们不会引入新的漏洞或出现一系列问题?

我们正在努力解决所有的细节问题,并试图回答其中的一些问题。