繁体   English   中英

“零成本抽象”是什么意思?

[英]What does 'Zero Cost Abstraction' mean?

我在探索 Rust 时遇到了这个术语。

我看到了关于这个的不同类型的解释,但仍然不太明白。

嵌入式 Rust 书中,它说

类型状态也是零成本抽象的一个很好的例子

  • 移动某些行为以编译时执行或分析的能力。

这些类型状态不包含实际数据,而是用作标记。

由于它们不包含数据,因此它们在运行时在 memory 中没有实际表示:

这是否意味着运行时更快,因为运行时没有 memory?

如果有人可以以易于理解的方式解释它,请欣赏它。

零成本抽象意味着添加更高级别的编程概念,如 generics、collections 等不带来运行时成本,只有编译器时间成本(代码编译速度会更慢)。 零成本抽象上的任何操作都与您使用较低级别的编程概念(for 循环、计数器、ifs 等)手动编写匹配功能一样快。

零成本抽象是在执行速度或 memory 使用方面不承担运行时成本的抽象。

相比之下,虚方法是高成本抽象的一个很好的例子:在许多 OO 语言中,方法调用者的类型是在运行时确定的,这需要维护一个查找表(运行时 memory 用法),然后实际执行查找(每个方法的运行时开销)调用,可能至少是一个额外的指针取消引用)与运行时类型来确定调用哪个版本的方法。 另一个很好的例子是垃圾收集:作为回报,您不必担心您通过 GC 暂停支付的 memory 分配的细节。

Rust 虽然主要尝试实现零成本抽象:让您拥有蛋糕并吃掉它的抽象。 编译器可以安全且正确地转换为不承担额外间接/内存使用的 forms 的那些。 事实上,我知道的唯一一件事(如果我错了,有人会纠正我)你在运行时在 Rust 中真正付出的代价是边界检查。

零成本抽象的概念最初来自功能世界。 但是,该术语来自 C++。 根据 Bjarne Stroustrup 的说法,

通常,C++ 实现遵循零开销原则:不使用什么,就不用付费。 更进一步:你使用的东西,你不能更好地编写代码。

这句话以及大多数答案都未能完整地传达这个想法,因为没有明确说明这些内容的上下文。

如果世界上只有一种编程语言:无论是 Rust 还是 C++,零成本抽象将与大多数其他编译器优化没有区别。 这里的含义是,有无数其他语言可以让你做与 Rust 或 C++ 相同的事情,但成本不为零,而且通常是特定于运行时的成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM