回顾 8/10Move AMA:Mysten 工程师的Move 编程语言

本重温报道了与 Mysten Labs 工程师就Move 编程语言进行的 AMA。

回顾 8/10Move AMA:Mysten 工程师的Move 编程语言

欢迎大家参加我们关于Move 编程语言的新一期 AMA 课程。今天我们请来了可爱的 Mysten 工程师 Adam 和 Todd。请做一下自我介绍。

亚当

我叫亚当-韦尔奇(Adam Welc)。我在 Mysten Labs 的Move 团队工作了大约七八个月。我的主要工作是开发人员体验和工具。

托德

我是托德-诺瓦基。我几乎从Move 成立之初就加入了。一直以来,它都是一个小团队,我们中的很多人都在做当时最优先的事情。其中最大的部分就是编译器和源语言。最近,在 Mysten Labs,我更多地致力于将这门语言整合到Sui 中,使其更具Move 风格。

. . .

问题 1:Move 团队计划如何让更多开发人员加入Move 语言,并加快开发人员对该语言的采用,特别是考虑到它是一种新语言这一事实?

亚当

我们发起了一项开展黑客马拉松和研讨会的倡议;其中一些活动是在韩国举行的,但我们计划在世界不同地区以虚拟和实际的方式开展这些活动。我们确实想通过这种方式提高人们对语言及其功能的认识。

另一个方面是,该语言是在 Meta 创建的,但现在已在多个不同的链中使用,Mysten Labs 的Sui 链就是其中之一。不仅是 Mysten Labs,其他公司也希望通过社区的努力来推广这种语言。

托德

我唯一要简单补充的是,这个空间还很年轻,规模也很小,这些东西的建立需要时间。对于学习资源,我们正在努力建立认知。如果您对Move 书达米尔为 repo有任何反馈,请告诉我们!这样的反馈非常有用。

关于亚当所说的,我们确实计划举办更多活动,让开发人员掌握各种技能。我们充分意识到很多人都有浓厚的兴趣,因此我们在内部确定了一个重点,即研究虚拟研讨会和现场研讨会。我们收到了大量反馈,希望能有更多以视频为重点的内容,这也是我们目前正在努力的方向。我们非常感谢人们将此作为他们需要的东西,我们正在寻求如何提供这些资源。

. . .

问题 2:Move 如何以其他传统区块链根本无法做到的方式保证资产安全?

亚当

Move 是由第一代智能合约语言中的思想演变而来的。因此,从 C 甚至 C++ 语言的开发和实现,到现在的 Go 或 Rust 等语言,在安全和保障方面发生的变化,类似于思维方式的演变。

以前,人们会说:"哦,如果你以线程方式编程,就必须非常小心,以避免竞赛或死锁"。Rust 在这方面采取了一种完全不同的方法;他们基本上是说,我们将设计一种语言,如果你写了一个程序,我们的编译器就会接受它的程序。根据定义或设计,某类错误不会出现在你的程序中。例如,如果你用 Rust 编写了一个并发程序并编译成功,那么你就无法像在 C 或 C++ 中那样,错误地去分配内存然后重新使用它。

因此,Move 尝试与 Rust 处理这些传统语言的方向相同,即尝试通过设计来防止其中的一些问题。例如,在设计上就不会出现重复支出的情况,而且编译器也不会验证每个属性。你有一个额外的工具,叫做 "验证器",它可以与你写入代码的额外规范一起使用。但如果你编写了这些规范,你就能证明程序在运行时会做什么或不会做什么的其他事情,但你会在部署合约之前就静态地知道这些事情。

托德

说得非常好。我想补充的一点是,在决定不允许使用哪些东西时,存在着一定的困难和细微差别。在亚当举的关于 C++ 与 Rust 的例子中,他们的想法是,我们希望与 C++ 保持某种程度的接近,但这会产生大量与内存安全相关的问题。Move 决定采用与 Rust 类似的另一种方法来确保内存安全。

. . .

问题 3:我们如何确保Move 语言的安全可靠?

托德

对于Move 来说,这有点像 "要么全有,要么全无 "的事情。要么对区块链不做任何改动(除了被收取气体和失败),要么成功更改存储。用Sui 的术语来说,就是你把一些对象作为输入,然后你要么产生一些新的对象,要么转移这些对象,要么以其他方式改变它们,要么你什么都不做。我知道这听起来很简单,但这种 "全有或全无 "的行为排除了很多 bug,因为你不必担心手动管理这些变化的内存。

当你想为程序定义更广泛的逻辑属性时,证明器就开始发挥作用了,比如如果输入的值大于零,这个函数就永远不会失败。这可以帮助我们知道,只要向函数输入足够多的硬币或令牌,就不可能失败,或者,如果你正确地验证了这个函数的密钥,那么你就永远不会失败。

亚当

因此,从语言的角度来说,有时在本地很难判断你看到的对象是共享对象还是自有对象,我认为 Prover 可以帮助确保,如果你的函数期待一个共享对象,那么传递给它的将是一个共享对象,或者传递的是一个非共享对象。然后,你还可以定义托德提到的类似属性,但这些属性也可以在非本地检查对象的属性。

托德

我刚才说到,我们将继续开发语言,学习新的东西,并随着时间的推移做出改变。我们在Move 中做的第一件事就是建立基于Move 账户的核心存储模型,但这也有一些弊端,变得非常不同。比方说,你的所有硬币都由一个硬币模块管理,你不知道上面是否有任何模块调用这个硬币模块。因此,你不知道是否有人可以调用这个函数,窃取你所有的硬币。我们尝试了几种不同的方法来解决这个问题,但效果都不是很好。但在Sui 对象模型中,我们实际上强迫你在执行时提交所有要修改的对象。因此,当你开始执行时,你可以划出整个内存区域,然后说,我只打算在这个区域内写入或修改。

这些是另一套保证,只是让我们更容易、更容易理解Move 函数到底在做什么。

. . .

问题 #4:您能与我们分享一下 VS Code 插件的来龙去脉吗?

亚当

我们有一个相当简陋的 VS 代码插件,它是由最初的团队成员之一在 Meta 开发的。当我加入 Mysten 时,我意识到这个插件还不够完善,如果有人习惯于使用更传统的语言,他们就不会对开发体验感到满意。因此,最初我们只是着手为 VS 代码插件提供一些现代集成开发环境所需要和期望的功能。比如转到类型定义、查找悬停时键入的所有引用,以及将编译器诊断结果传回编辑器。

. . .

问题 5:VS 代码插件会对编码体验和开发人员团队产生什么影响?

亚当

我收到一些报告,说人们已经开始使用这些新功能,这很好。在韩国举行的一次研讨会上,我们的开发人员倡导者、Move 核心团队成员达米尔亲自参加了研讨会,并与人们一起工作,他反馈了一些非正式的反馈意见,即人们确实在使用它,而且他们很喜欢它。

托德

我认为这可能会是一个不同的工具。我可以想象,在未来的道路上,会有不同的工具集让我们更容易理解。也许,规范是如何应用的,你通过某些事情获得了什么样的覆盖率,或者其他一些让编码体验与开发者体验不同的方式。它更像是''我在写这个函数,另一个函数的签名是什么,还是我想看看这边的代码?我想,如果你不习惯特定的代码库,定义可能对非开发人员最有帮助。代码定义太神奇了。

归根结底,如果您考虑的是他人,是让他们的生活更轻松,或者是让其他非技术人员查看Move 代码,那么您可能需要一套不同的工具来帮助他们。

. . .

问题 6:人们可能会关注哪些外部贡献?

亚当

我可以和那些已经做出贡献并加入 VS 代码插件扩展的人说几句。因此,如果您在Move 代码库中查找带有Move analyzer 标签的问题,就能看到我们计划要做的事情,以及我们将自己或在社区帮助下做的更多细节。

请记住,VS 代码插件扩展是最近才推出的--人们才开始注意到它所添加的内容,也就是支持这些额外的功能,这些功能是通过更紧密的编译器集成实现的,它建立了中间表示法,让你能在编辑器层面上做更聪明的事情。

这使得一些额外的事情得以发生,其中一个外部贡献就是提供了一个正在编辑的文件的大纲视图。如果你熟悉 VS 代码编辑器,就会发现它的左侧有一个窗口,如果你打开这个大纲,它就会显示函数、类型定义以及文件中定义的源代码的主要大纲。这是一位外部贡献者添加的。

. . .

问题 7:对于Move编写通用代码的能力有什么计划?

例如,我最近遇到一个用例,需要比较两个通用类型为 T 的事物,我认为这无法通过 trait bounds、能力以及将函数作为参数传递给其他函数来实现。

托德

是的,特质(traits),正如你所期望的那样,它们是函数指针,只是永远不会出现在Move 。你可能会想,我一直在使用高阶编程,Rust 或 JavaScript 或你使用的几乎所有其他编程语言,为什么不使用Move 呢?这样做可以避免很多问题,而且归根结底,Move 并不是一种通用编程语言。我们试图构建安全的东西,我们可以证明这些东西是安全的,而一旦有了动态派发,很多问题就迎刃而解了。

重用代码有很多不同的方式,我认为作为开发人员,我们已经习惯了这些方式,就像使用特质接口模式一样。

. . .

问题 8:Move EVM 兼容吗?

亚当

简短的回答是 "否 "和 "是"。我们一直在努力尝试跨语言解决方案,或者在 Meta 编译或转译Move 为 EVM 字节码。据我所知,使用该语言的其他链(如 0x、Aptos 或Sui )都没有采用这种方法。我认为这些使用Move 的链都没有计划使其与 EVM 兼容。我认为 meta 可能尝试过的原因是,你想重新利用你在编写语言和开发语言代码时积累的专业知识,并尝试将其应用到更广阔的领域,尤其是 meta 出于监管考虑而在该领域开发的原始产品;但这并没有成功。

我认为这更多的是关于我们如何使用Move 语言,让更多人能够接受它。执行模型和 EVM 方面提供的保证存在很大差异,因此我不确定这是否能百分之百奏效。实际上,我也不知道是否还在开发中,但至少对于 Mysten 实验室和Sui 区块链来说,还没有使其与 EVM 兼容的计划。

. . .

问题 9:例如,可互换代币与不可互换代币本质上就是智能合约中第一类无引号的含义。

托德

我不太理解这个问题。我不太清楚资源、资产和代币等几样东西在Move 上是否是一等品。这不仅仅是资产这个词,我们有很多物品都是无形资产,甚至你的硬币也是无形资产,如果你真的关心硬币的概念的话;可替代性方面是人类的概念,当我关心某样东西可替代或不可替代时,这是人类水平的辨别能力。比如我钱包里有一张 1 美元的钞票,而你钱包里也有一张 1 美元的钞票,你愿意把它们交换,因为我们并不在意它,但如果有人在我的 1 美元钞票上亲笔签名,这对我来说可能很重要,但对你来说并不重要。这对我来说是不可替代的,但对你来说仍然是可替代的。

亚当

当人们使用纸币时,纸币就是可替代代币的一个例子,但事实上,纸币是不可替代的,因为每张纸币都有一个序列号,所以我们只是选择忽略并用一张纸币交换另一张纸币,但在Sui 中,这是完全相同的概念,每个硬币对象都有其唯一的 ID,但如果你忽略它们,那么你基本上就拥有了可替代资产。