title: Rust所宣称的zero-costabstractions是怎么回事？
desc: 我一直都认为“零代价抽象”即抽象的同时不影响执行的效率是程序设计的理想状态，然而现有的编程语言大都没有达到这个状态。最近听说Rust宣称自己是zero-cost abstractions，所以很好奇：<br><br>1. 这跟我所理解的“零代价抽象”是不是一个意思？<br>2. Rust是如何实现这一点的？<br>3. 为什么之前的编程语言都没有做到这一点？<br><br>希望能得到巨擘们的耐心解答，谢谢！<br><br>------<br>再详细解释一下我说的”零代价抽象“<br><br>比如C为此做的一些事情：<br>1. inline，const或者macro的使用<br>2. 编译器自动地在编译期间把int x 1000 9 中的加法计算处理掉，相当于写int x 1009<br>这些都是为了在”抽象“的同时不损失程序的执行效率而做的事情。<br><br>然而你在C里写int x pow10， 3 9 编译器并不能帮你把它优化成int x 1009 因为这里pow是个函数。所以说C是做不到我想要的”零代价抽象“的。
topic: 编程语言
content: 这题干怎么改成了Rust？这段C的答案岂不是白写了，大家随便看看吧。这个东西你要读cpp他爹写的那本cpp设计与演化。零开销抽象的意思是，你把几个变量包成了一个类，那个类的效率就和“散装”变量的内存布局，执行效率完全一致，而不会有boxunbox的开销。如果用模板写程序，效率和人力手写一个版本也一模一样当采用元编程技术时，也不会增加运行时的反射开销。bs说的很明确，万一当年搞cpp的时候，做出来的效率比c低，那就是
answerer_tags: 曾经的STGer/Touhouer/LLer，半脱宅