如何通过构建高质量的开发工具和运行时观察机制,来解决以太坊特有的挑战,如代码不可变性和计算资源稀缺性。探讨了如何通过新的运行时库EDR和Solidity工具编译器slang,以提升开发者体验并促进生态系统的创新与增长。
我们释放以太坊开发者体验潜力的长期计划
编辑注(2023年9月): 我们的 Rust 运行时项目,之前名为 Rethnet,已更名为 EDR(以太坊开发运行时)。为清晰起见,我们对这篇文章进行了更新。
一个开发平台的成功与其工具密切相关,并且在平台与语言组合的复杂程度越高,其成功越依赖于工具的成功。
Rust 是开发者体验的黄金标准。他们通过将开发者体验作为项目的核心价值并将其作为功能需求优先考虑,成功达到了这种质量,覆盖了产品的所有方面,包括平台的最低层:编译器。
大多数现代成功语言,如 Go、Rust、Swift、Kotlin 或 TypeScript 都拥有具体的策略来使开发者满意。它们平衡构成编程体验的不同组件,通过精心协调的舞蹈来产生流畅和稳定的体验。
一些例子:
显然,实现世界级开发者体验需要超越构建编译器。这需要将工具作为核心语言工作的一部分,协调发布,并且重要的是,构建工具生态系统以助其繁荣的基础设施。
tsserver
服务,封装了编译器以启用工具之间的有状态接口通信。这是 TypeScript 编辑助手构建的基础。rust-analyzer
,它是一个专门构建的 Rust 编译器前端,旨在实现出色的编辑辅助。这些努力是构建传统开发平台伟大开发者体验所必需的。区块链开发平台需要什么?
除了任何新编程语言必须解决的所有挑战外,Solidity(或任何其他 EVM 语言)在以太坊运行时还面临至少两个独特的挑战。
一旦不可变代码部署并使用增加,就无法在没有对开发者造成重大成本的情况下升级编写合约所用的语言版本。这导致 Solidity 的版本会长期使用。工具——包括编译器——需要长时间支持每个版本的字节码,因为没有可能用更新的编译器重新编译并重新分发。这是一个具有重大困难的技术要求,特别是对于编译器而言。
在以太坊上计算是需要付费的,这使得编译器生成的字节码非常简洁。传统编译器通常会在编译输出中添加调试实用工具,例如生成堆栈跟踪,但在 EVM 上这样做将过于浪费。
在传统平台中,这些事情由编译后的软件负责,但在以太坊中,它们需要通过 运行时观察 来外部完成,以降低最终用户的成本。
如名称所示,运行时观察发生在编译字节码的执行过程中。这意味着在开发过程中,唯一合理的地方是开发者用于本地测试其代码的本地开发运行时。这样,使开发运行时成为所有 EVM 语言工具的核心支柱。
Hardhat Network 的创新之处在于:我们从根本上将其构建为 EVM 级运行时观察引擎,使其能够生成 Solidity 堆栈跟踪、console.log 语句,并通过描述性的错误消息识别和解释故障案例。
这同样的方法将最终使可靠的高级逐步调试器、代码覆盖分析和代码分析成为可能。
这个过程本质上需要逆向编译过程,将源代码转换为字节码。它首先通过分析字节码执行来指出对原始源代码的见解。
这种方法长期成功的一个重要方面是,编译器设计受到对编译过程透明性需求的影响。直接的编译器支持使工具能够 可靠地 观察运行时的字节码执行、收集信息并将其呈现给开发者以进行调试。
开发者体验是以太坊未来的重要方面,作为替代金融系统的支柱。如果开发者体验不好,新开发者将因学习曲线陡峭和耗时而感到沮丧。编码的乐趣便会减少。
每个对开发者体验的改进都会在生态系统中的每个团队中立即注入生产力,使开发者学习更加迅速,改善留存率。影响是 创新速度和增长的提升,在长期内形成强大的复合效应。
实现以太坊世界级开发者体验的道路需要在构建核心平台组件时将开发者体验优先视为基本价值。这一价值必须存在于工具链的最低层(编译器),以便逐步向上——在开发者基础设施层,以便生态系统有建设的杠杆,以及在最终用户工具层,给产品的任何交互增添使人愉悦的最后一抹魔法。
我们正在执行一项按照这一路径建立新核心构建模块的计划,将使高级运行时观察工具成为常态,带来许多新的工具,以提供开发者对 Hardhat 的热爱。
运行时观察是一个重大的工程挑战,需要在字节码级别进行工作。由于平台的初生状态,它的维护不是一次性完成的工作,而是一个非常复杂的任务。目前,这使得对于资源有限的团队而言,它还处于不可启动的状态。
为了满足各自用户的需求,像 Hardhat、Truffle、Remix、Ganache 和 DappTools 等工具都构建了自己的运行时观察形式。由于没有现有的构建块来做到这一点,这些项目构建了不同的临时实现,每个实现的权衡和限制各不相同。这导致了开发者体验的差异,开发者可以访问的 基本 特性的混合(即使是在 Hardhat 中)通常是不完全的——依赖于使用的工具,例如 console.log、错误消息、堆栈跟踪、逐步调试器——而有所不同。
我们正在构建 EDR,以实现一个 快速且一致的开发体验,跨越所有以太坊工具。
EDR 将是一个可重用的调试运行时,用于构建开发者工具。一个本地的、灵活的、可扩展的、快速的、语言无关的 EVM 开发运行时,作为 Rust 库,旨在成为提供调试信息给开发者的工具的后端。
它将是一个完全开源的公共基础设施层,处理运行时观察的复杂性,但设计为一个平台,让其他人可以在其上构建,不论选择哪个开发环境。我们选择 Rust,这样它就可以作为本地库导入到任何其他语言(JavaScript、Python、Go 等)中,或者编译为 WebAssembly 以在浏览器中运行。
不同的工具将能够在这个库之上构建他们自己有差异化的特性,而 EDR 将简单地坐落于后端,提供功能的基础线。它将直接提供 console.log、堆栈跟踪、代码覆盖和 gas 分析,以及逐步调试器,不仅针对 Solidity,还针对任何想要构建适配器的 EVM 语言。
构建以太坊开发工具的成本和困难将降低,新工具将会出现,开发者体验将变得更好且更一致。我们押注这将是以太坊工具的未来。
如前所述,可靠执行此过程需要与将运行时观察作为首要任务的编译器进行协调。
当前的 Solidity 编译器 solc
非常善于创建适用于主网的安全字节码——这是一个关键方面。出色的开发者体验如果导致软件不值得信任,是无法有效贡献以太坊成功的。这就是为什么 slang
的目标是通过不同的优先级来补充 solc
。
为了提升堆栈顶层的开发者体验,它需要在底层进行深入设计,而不损害其他关键方面。
作为 Solidity 开发工具的平台从基本原则出发设计,首要任务将是通过特定领域的 API 和元数据来服务工具,以实现包括运行时观察等功能。为了管理使用两个编译器所造成的差异风险,EDR 将与 solc
并行运行 slang
,以确保由 slang
生成的状态转换与 solc
的匹配。
因为 slang
的主要目标是工具而不是主网部署,它将无需处理以太坊不可变性的挑战。这意味着它不会受到更改特定 Solidity 版本生成的字节码的障碍,使得为历史版本的 Solidity 提供持续支持变得更容易。开发者将定期受益于更新,无论他们使用的是哪个语言版本。
为了确保工具可以可靠地处理 Solidity 代码,它将公开其内部解析器和类型解析引擎。为了提供一流的编辑辅助,它将提供类似于 rust-analyzer
和 tsserver
的语言服务器。
slang
和 EDR
将紧密协调,为生态系统提供丰富且稳定的平台,以继续构建提供一致性和高质量的新工具,无论开发者选择哪种 EVM 语言或应用语言。
长期的可能性真是非凡:我们旨在赋能生态系统创造全新的 EVM 编程语言。正如 Kotlin 在 JVM 之上实现,VB.net 在 dotnet 之上实现,得益于其深厚的基础设施宇宙。
我们正在使 slang
可扩展,这意味着只需实现一个解析器并调整一个类型系统,就可以在第一天为一种新的 EVM 语言获取复杂且全面的工具功能包。完全免费。
这两个项目都处于非常早期阶段, 我们正在寻找 世界级的工程领导来推动它们的发展。
- 原文链接: blog.nomic.foundation/sl...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!