前外交部副部长傅莹:一旦中美闹翻,有没有国家会站在中国一边

【少儿禁】马建《亮出你的舌苔或空空荡荡》

【成都mc是什么】成都mc浴室小黑屋见闻(史诗级巨瓜)

全球化丧钟,不仅为张一鸣而鸣

到底是谁杀害了在非洲的中国人

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

SUI 工程师:发现更多关于Move语言的特点

SevenUpDAO Sui World 2022-11-05

原文作者:Mysten Labs

本文来源:Sui

本文编译: SevenUpDAO


Jen:欢迎大家参加我们关于 Move 编程语言的新 AMA 会议。今天的嘉宾是我们来自 Mysten lab 的工程师 Adam 和 Todd。请介绍一下自己。


Adam:我的名字是Adam Welc。我在 Mysten Labs 的 Move 团队工作了大约七八个月。我的主要关注点是开发人员的开发体验和开发工具。


Todd:我是Todd·Nowacki。几乎从 Move 成立以来,我就一直在使用它。这一直是一个小团队,我们中的很多人只是在做当时最重要的事情。其中最大的一部分是编译器和源语言。最近,在 Mysten Labs,我一直致力于将语言集成到Sui-specific 的 Move 风格中。



问题 #1:Move推广

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


Adam:我们发起了一项开展黑客马拉松和研讨会的倡议;其中一些是在韩国举行的,但有计划在世界不同地区以线上或是线下的方式进行。这是目前我们提高开发者对语言及其功能的认识的主要途径。


另一方面是该语言是在 Meta 创建的,但现在在多个不同的链中使用,Mysten Labs 的 Sui 链就是其中之一。有一些社区我们希望不仅来自 Mysten Labs,而且更希望来自于其他的公司或者团体,以使其流行。


Todd:我唯一要简单补充的是,这个空间还很年轻而且很小,这些东西需要时间来建造。对于学习资源,我们正在努力建立意识。如果您对Move Book或者是 Damir wrote for the repo 有什么见解, 请告诉我们!这样的反馈对我们真的很有帮助。 


Jen:关于 Adam 所说的,我们确实计划举办更多活动,以让开发人员掌握各种技能。我们充分意识到很多人都有浓厚的兴趣,我们已经在内部强调了关注虚拟研讨会和面对面的研讨会。我们收到的回应中,更多的观点是希望获取以视频为中心的内容,这也正是我们目前正在努力解决的问题。我们非常感谢大家提供的意见。 



问题二:Sui Move 安全性

Sui Move 如何保证资产的安全,是怎么做到其他传统区块链根本无法做到的?

Adam:Move 是第一代智能合约语言中思想的演变。因此,它更像是一种进化类似于从 C 甚至 C++ 语言开发和实现到现在我们拥有 Go 或 Rust 等语言之间发生的安全性和安全性变化方面。


在过去,这就像“如果您以线程的形式编程以避免竞争(races)或死锁,您必须非常小心。” Rust 在那个部门采取了完全不同的方法。他们说我们将设计一种语言,这样如果你编写一个程序,我们的编译器就会接受它的程序。根据定义或设计,某类错误不会出现在您的程序中。例如,如果您在 Rust 中编写了一个并发程序并且它通过了编译,您将无法像在 C 或 C++ 中那样释放内存然后错误地重用它。


因此,Move 试图朝着与 Rust 对那些传统语言相同的进化方向发展,即尝试通过设计来阻止其中一些事情。例如,您不会有设计上的双花,并且并非每个属性都可以由编译器验证。您有一个称为 Prover 的附加工具,它可以与您写入代码的其他规范结合使用。但是,如果您编写这些规范,您将能够证明您的程序在运行时会做什么或不会做什么,但您甚至会在部署合约之前就通过静态信息来获取到这些信息。 


Todd:这是个很好的发展方向。我想补充的是,在决定您不想允许的事情时存在困难和细微差别。在 Adam 给出的关于 C++ 与 Rust 的示例中,他们的想法是我们希望与 C++ 保持接近,但这会产生一堆与内存安全相关的问题。这种方法将允许存在不安全代码,因此您只需将其包装起来,然后从外部角度将其呈现为安全的。Move 决定采用一种不同的方法来确保类似于 Rust 的内存安全。


问题#3:安全性保障

我们如何确保我们的 Sui Move 语言内置了安全性和保障性?


Todd:Move的设计模式类似于一种非黑即白的理念。您要么不对区块链进行任何更改,除非出现了gas消耗和failed事件,要么您成功地改变了存储。在 Sui 术语中,你into了一个对象,可能是新建可能是更新或者是一些其他的操作,又或者是什么都不做,move会根据对象是否进行了改变而进行全部更新或者根本不更新,这样的编译特性使用很简单的方法排除了很多的错误,使得开发者在开发过程中不必再因为手动管理内存的事情而费心。


当您想为程序定义更广泛的逻辑属性时,就需要使用到Provider,如果输入上的值大于零,此函数将永远不会失败。只要您将足够的coins或tokens传递给该功能,就不可能失败,或者如果您为此功能正确验证了您的密钥,那么您将永远不会失败。 


Adam:所以从语言的角度来说,有时在本地,很难判断你看到的对象是公开的(shared)还是私有的(owned),我认为Provider可以帮助确保如果你的函数需要一个公开的对象,它将以公开的形式传递给它的对象,或者如果有一个非公开对象被传递。然后,您可以定义 Todd 提到的类似属性,但也可以在非本地检查对象的属性。


Todd:当我早些时候谈到时,我们将随着对新事物的学习和时间的推移继续开发并改进Move语言。我们在 Move 中做的第一件事就是设置以 Move 帐户为基础的存储模型,但是这有一些缺点,使得他变得非常不同。假设你所有的coins都由这个coins模块管理,你不知道它上面是否有其他的模块调用这个coins模块。所以你不知道是否有人可以调用这个函数并窃取你所有的coins。当我们尝试了几种不同的方法来解决这个问题时,发现这是目前我们可以使用的最好的方法。但是在 Sui 对象模型中,我们实际上是强制您在执行时呈现您将要修改的所有对象。所以当你开始执行时,你可以划分出整个内存区并且只在这个区域内写或修改。 


这些是另一套安全性保证,与核心 Move 相比,它使理解 Move 功能的确切作用和 Sui Move 变得更容易理解。


问题#4:VSCode插件

你能和我们分享一些关于 VS Code 插件的内容和背景吗?


Adam:我们有一个相当基本的 VSCode插件,它是由 Meta 的一位原始团队成员开发的。当我加入 Mysten 时,我有点意识到它并不完全符合标准,如果有人习惯于使用更传统的语言开发,那么他们并不会收获很好的开发体验。因此,最初,我们只是着手为 VSCode插件提供一些您希望和期望从更现代的 IDE 中获得的功能。因此,诸如转到类型定义、查找在悬停时键入的所有引用以及将编译器预编译信息传递回编辑器之类的事情。 


问题 #5:VSCode插件的影响

VS Code 插件将对编码体验和开发团队产生什么影响?


Adam:我收到一些报告说人们已经开始使用这个新功能了,这是一件好事。在韩国举办了一个研讨会,我们的开发倡导者和 Move 核心团队的一员 Damir 亲自主持了研讨会并与人们一起工作,他关于这个问题的回馈了一些更非正式的反馈,这是人们实际使用的感受,他们认为这个插件非常好


Todd:我认为这可能会是一个不同的工具。我可以想象未来会有不同的工具集使其更容易理解。比如规范是如何应用的,你通过某些事情获得了什么样的覆盖率,或者让编码体验感觉不同于开发人员体验的其他方式。更像是“我正在编写这个函数,另一个函数的签名是什么,或者我想在这里查看代码吗?”我想这个定义可能对不习惯给定代码库的非开发人员最有帮助。代码的形式将会被更多人所理解。


归根结底,如果您正在考虑其他人的体验,让开发者更轻松或其他类型的非技术人员查看 Move 代码,您可能会需要一组不同的工具来帮助他们。 


问题 #6:开源性

人们可能想要查看哪些外部贡献?


Adam:我与那些已经为VSCode插件扩展做出贡献的一部分的人交谈。如果您在 Move 存储库中查找 Move 分析器标记的问题,您将能够更详细地看到我们计划做的事情,以及我们自己做的事情或在社区的帮助下做的事情。 


请记住,VSCode插件扩展是最近才出现的,人们才开始了解VSCode插件相关的内容,这是对这些附加功能的支持,这是由更紧密的IDE所构建的中间件,让你可以做智能程度堪比编辑器级别的东西。 


还有一些其他的东西你可以看到,其中一个外部贡献是提供您正在编辑的文件的大纲视图。如果你对 VSCode编辑器很熟悉,它在左侧有一个窗口,如果你打开它到这个大纲,它应该显示在文件中函数、类型定义和定义的源代码的主要大纲。这是由一位外部贡献者添加的。


问题 #7:泛型问题

Move 是怎么计划编写泛型代码的?


Jen:例如,我最近有一个用例来比较两个泛型 T 的东西,假设为你不能使用非定义类型,特殊类型,也不能将函数作为参数传递给其他函数。 


Todd:是的,类型,正如您所料,它们是永远不会出现在 Move 中的函数指针。你可能在想,我一直在使用高阶编程,而 Rust 或 JavaScript 或几乎任何其他你使用的编程语言中都有泛型的存在,为什么Move中不存在呢?实际上,它可以避免一堆问题,而且归根结底,Move 并不是一种泛型编程语言。我们正在尝试构建安全的东西,我们可以证明它是安全的,一旦你有了动态调度,将无法确保安全性。 


有很多不同的方法可以重用代码,我认为我们作为开发人员已经习惯了,就像达到那种类型接口模式一样,我们在这里尝试做一些改变,所以我们拥有了一个更有安全保证的语言。


问题 #8:Move与EVM模式

Move 是已经兼容了EVM还是将要兼容?


Adam:简单来说是NO。Meta 一直在努力尝试跨语言解决方案,或者能够将 Move 编译或转译为 EVM 字节码。据我了解,使用 0x、Aptos 或 Sui 等语言的其他链都没有发现这一点。我认为这些链中没有任何使用 Move 使其与 EVM 兼容的计划。我认为可能在 meta 上进行尝试的原因是,您希望重用您在编写语言和开发语言代码方面积累的专业知识,并尝试将其应用到更广泛的空间,尤其是原始产品出于监管方面的考虑,meta 正在该领域发展;它从来没有成功过。 


我认为这更多是关于我们可以使用 Move 语言做些什么,以使其更适合更广泛的受众。执行模型的差异和 EVM 方面提供的保证非常重要,我不确定这是否会 100% 起作用。我实际上也不知道兼容EVM的模式是否仍在开发中,但至少对于 Mysten 实验室和 Sui 区块链没有计划使其与 EVM 兼容


问题 #9:资产问题

迁移到另一种语言是否会忽略资源和资产的意义,例如,可替代代币与不可替代代币本质上是智能合约中一流报价(first-class quote)与不报价(unquote)的含义?


Todd:我不太明白这个问题。我不太确定资源、资产和token等一些东西是 Move 上的最主要的东西。它不仅仅是资产这个词,我们有 NFT 的对象,如果你真的关心那个coins的模式,甚至你的coins也是 NFT;当我关心可替代或不可替代的东西时,它的可替代性方面是人类的概念,这是人类的辨别能力水平。就像如果我的钱包里有一张 1 美元的钞票,而你的钱包里有一张 1 美元的钞票,你愿意交易它们,因为我们不在乎,但如果有人在我的 1 美元钞票上签名,那对我来说可能很重要,但是对你来说不重要。它对我来说是不可替代的,但对你来说仍然是可替代的。 


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


推荐阅读:

SUI 周报:SUI 在越南举办线下活动, Scale3Labs 宣布Beta版将在Sui上发布
三分钟快速入门SUI 的区块浏览器
Sui白皮书|Sui——智能合约平台
Sui钱包最新改进!等你体验!
关注Sui World
发现Web3时代新机遇

公众号内私信回复“1”加入Sui World官方群

文章有问题?点此查看未经处理的缓存