学习用于 Substrate 的 Rust
Please read Substrate to Polkadot SDK page first.
正如您在准备工作环境中学到的那样,Substrate 是使用 Rust 编程语言构建的。 本研讨会并非关于学习 Rust,但有一些基本概念是 Rust 独有的,您应该熟悉这些概念,以确保您能够成功完成本研讨会。
所有权和借用
大多数语言使用垃圾回收或手动编码的操作来分配和释放内存。 在 Rust 中,所有权控制程序如何管理内存。 在较高的层次上,所有权由编译器检查的三个简单规则组成:
- 每个值都有一个所有者,该所有者由保存该值的变量标识。
- 一个值一次只能有一个所有者。
- 如果所有者超出范围,则该值将被丢弃。
要防止在您想要重用值时将其丢弃,您可以将其借用。 在 Rust 中,您可以在变量标识符前面添加一个与号 (&) 来表示您想要借用其值。 通过添加与号,您可以在整个函数中多次重用该值。
特征
特征类似于 Java 中的接口和 C++ 中的类。 特征使您可以为可以与其他类型共享的类型定义行为。 在 Substrate 中,特征为定义类型可以共有的共享行为提供了灵活的抽象。
返回错误的函数
在 Rust 中,函数必须返回Result
类型才能处理错误。
返回的 Result 要么是成功的Ok()
,要么是失败的Err()
。
例如:
match my_function() {
Ok(value) => value,
Err(msg) => return Err(msg),
}
宏
宏(编写代码的代码)并非 Rust 独有,但它们通过抽象否则会被重复的代码来简化代码。 Substrate 在核心运行时逻辑和各个模块的创建中都使用了大量的宏。 宏简化了许多常见任务,例如创建存储项以及定义事件和错误。 您将在研讨会中大量使用它们。
Rust 编译器输出
使用像 Rust 这样的强类型编程语言的众多优势之一是,编译器可以捕获和描述许多常见的编程错误和编码问题。 在大多数情况下,警告和错误消息甚至会建议如何修复代码中的错误。 例如,编译器将识别类型不匹配、未使用的变量、函数指定参数的数量或类型存在问题。 在许多情况下,Rust 编译器还会建议您可以在哪里找到有关它已识别问题的更多信息。 如果在任何时候您的程序无法编译,请仔细查看编译器消息。 您将从这些消息中学到很多东西,并且通常您能够在不进一步挖掘的情况下解决问题。