Rust:为什么不直接添加类?
Rust 是一个新兴的编程语言,已经赢得了众多程序员的青睐。然而,与其他主流编程语言不同的是,Rust 没有直接支持类的语法。很多人对此感到困惑并提出了一个问题:为什么 Rust 不直接添加类?
事实上,Rust 的设计者们深谙“危险在于隐蔽”的道理。尽管类这样的语法对反思我们的代码设计非常重要,但它也需要面对很多难以克服的挑战。Rust 因此选择了使用 trait 和结构体的组合来达到类似的效果。
首先,让我们看一下 Rust 中的 trait。Trait 看起来像是接口,但它有不同的用法。Trait 的一个显眼的特点是可以实现多个 Trait,而 Java 和 C# 中的接口是不能实现多个的。此外,Trait 还可以带有默认方法和静态方法。通过 trait,Rust 鼓励开发者定义更细粒度的行为接口。因为 trait 是动态分发的,所以它们比 Rust 中的类型更加灵活。
接着,我们看一下结构体。结构体是 Rust 提供的一种自定义类型,类似于 C 语言的结构体或者 C++ 中的 struct。不同的是,结构体中可以定义方法。那么,如何将结构体和 trait 结合起来呢?这就是 Rust 的设计思路所在了。通过 trait 的默认实现,我们可以给结构体添加方法。同时,trait 也可以被当做约束来使用,给出泛型类型需要满足的条件。
除此以外,Rust 引入了 Rust doc,一种可以为代码添加文档和注释的方式。这使得在可预测性和文档化方面,Rust 可以比较容易地替代类似于 javadoc 和 C# xml doc 的实践。
最后,没有类语法,也就没有对象的概念。何时和如何分配内存?如何管理所有权和生命周期?与其引入这些概念,Rust 希望通过使用结构体和 trait 来降低复杂度,简化和明确语言规则。
虽然 Rust 没有类的语法,但它的设计思路和基于 trait 和结构体的特性使得 Rust 可以实现类似于类的效果,并可以由开发者自由定制更加细粒度的代码设计。当然,Rust 不适合所有的项目。它的强调系统编程、无人值守执行等特性,都要求开发者必须具备一定的技能和经验。但无论如何,Rust 都是一个独具特色的编程语言,值得我们继续关注和探索。
了解更多有趣的事情:https://blog.ds3783.com/