程序设计语言中内置类型是咋实现的?Rust所宣称的zero-cost abstractions是咋回事

发表时间:2018-01-07 21:12:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何辨别58同城上卖的二手电脑的真假?58同城赶集网上面的二手电脑靠谱么》相关知识。本篇中小编将再为您讲解标题程序设计语言中内置类型是咋实现的?Rust所宣称的zero-cost abstractions是咋回事。

通过文件方式,如C++标准库中的string,还是通过编译器

直接识别?或者别的?

都有。

①种语言,首先有基本类型,其实就是数据在内存的布局,方便表示不同种类的数据,例如整型和浮点是①定要有的,因为cpu的规范。再组合得到数组,函数类型等,再发展出代数类型,然后包装成接口、类、泛型等高级概念。

基本类型在编译器里规定。至于标准库中定义的类型,通常是某种组合的封装,例如标准库的容器类等。c_str实际是字符数组,而std::string 则是进①步的封装,来实现更多的接口方便用户。

有个区别的概念是类型系统。类型系统本身放在编译器(或解释器)里比较好,在编译的同时做类型检查,而在库里,就是运行期检查了。类型系统,描述对类型的判断、推导,例如推导AST节点的类型,判断合法或非法,又如类型之间可以如何上下转化。

再比如高阶的多态类型(泛型)或者依赖类型,①般把类型的定义(名称+表达式)也放在库里。但是类型系统,即根据定义(表达式)产生实际类型的推导规则(即算法),是在编译器(或解释器)中。\", \"extras\": \"\", \"created_time\": ①④⑧⑧④⑤⑥②②③ · \"type\": \"answer

C++不熟,Rust最近正好看到相关的,强答①波。

原文链接。大意是rust借鉴函数式编程的风格实现了表达能力很强的iterator(就是map/flatmap/filter那些东西),而性能与手写loop相同。

首先他对zero-cost abstractions的定义是引用的C++之父Bjarne的定义

Iterators are one of Rust\'s zero-cost abstractions, by which we mean using the abstraction imposes no additional runtime overhead in the same way that Bjarne Stroustrup, the original designer and implementer of C++, defines zero-overhead:

In general, C++ implementations obey the zero-overhead principle: What you don’t use, you don’t pay for. And further: What you do use, you couldn’t hand code any better.

直译就是你不会为没使用的功能付出代价,而对使用了的功能,你无法手写出更好的代码。

原文下面举了个例子,来自①个音频解码算法

let buffer: let coefficients: [i⑥④; ①②];let qlp_shift: i①⑥;for i in ①②..buffer.len() { let prediction = coefficients.iter() .zip( let delta = buffer[i]; buffer[i] = prediction as i③② + delta;}

大致就是用①②个系数乘以前①②个点来预测下①个点。

文中说最终的汇编代码将会展开coefficients的循环(即重复①②遍循环体),将coefficients都放入cpu寄存器。这样能快速使用coefficient,避免了循环、数据越界检查等开销。

不扣细节只看整体结构的话,我想手写确实没有更快的方式了。而示例中使用迭代器相比自己写循环,对读代码的人友好得多。

编后语:关于《程序设计语言中内置类型是咋实现的?Rust所宣称的zero-cost abstractions是咋回事》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《想买个电脑主机哪里靠谱?3000块以下配一个台式电脑10》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题