所谓zero-costabstractions指的是在构建一个抽象的时候这个抽象不会造成额外的负担,典型的对比是 struct 和 Java 的 class。zero-costabstractions是指Rust中抽象用到的类型和Trait信息不会保留到运行时,虽然做出了抽象,但是并没有为抽象支付成本。
所谓 zero cost abstraction 指的是你在构建一个抽象的时候这个抽象不会造成额外的负担,典型的对比是 struct 和 Java 的 class。如果Java 的类 A 里有类类型 B 的成员,那么通过这个 A 类对象访问 B 成员事实上需要两次指针访问,但如果是 Rust 的 struct,你直接把它分配到栈上,那直接就可以访问到了,就和 C++ 里的 class 一样。你虽然做出了抽象,但是并没有为抽象支付成本,和你不抽象直接把东西放一起是一样的。
所谓的0抽象是指Rust中抽象用到的类型和Trait信息不会保留到运行时,这个跟你描述的优化是两个事情,不能混为一谈。
对比Java,Java可以在运行时做类型的强转,以及判断对象是否属于某个接口,甚至直接返回接口,这些都需要保留一部分类型信息在运行时才能做到而在Rust中是没有的。注意这里的没有并不是说Rust做不到这类功能,可以通过trait明确写死信息来做,或者dyn trait去做。
然后你想想,你写代码的时候是各种类型各种trait,这些信息只用来在编译期间检查你代码的正确性,编译之后这些信息都没了,还能正确运行,是不是0抽象了?
延伸阅读:
什么是Rust?
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。
Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续七年(2016,2017,2018,2019,2020, 2021, 2022)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。
文章标题:Rust所宣称的zero-costabstractions是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/39253