Bjarne Stroustrup访谈-抽象和手工编写的代码
Interview with Bjarne Stroustrup - abstraction and hand-crafted code
我读过Bjarne Stroustrup关于C++及其设计的采访。我被他在那里使用的术语弄糊涂了,所以我希望能澄清一些这样的时刻。
我在我的书《C++的设计与实现》和我的两篇编程语言史会议论文中记录了我的设计目标和对设计的限制,但简单地说,我的目标是
- 与使用抽象时手工制作的代码相比,零开销
- 与C的机器模型非常相似的机器模型
- 一套极其灵活的抽象机制,以及
- 静态型安全
- 在这种情况下,"手工编写的代码"是什么意思?。。Stroustrup指一些手工制作的抽象概念工具程序员可以创造吗
- 在这种情况下,"机器模型"是什么意思?一种语言与硬件交互的方式
我看了他提到的那本书(我相信这本书实际上是《C++的设计与进化》),但我仍然不太确定。这两个术语在谷歌上的搜索也不太好。
"机器模型"是指计算机在语言中表现自己的方式。例如,C和C++以或多或少相同的方式处理字节、内存位置、指针和整数类型。
这里的"手工制作"指的是不使用C++中提供的抽象,而是用C或汇编(或C++,只是不包括该抽象)高效编写的等效代码。这是一个"目标",而不是"约束"——C++并不是在所有情况下都能准确地实现它。
因此,举个例子,vector<int>
并不总是实现与使用malloc
和free
编写的类似可调整大小的阵列完全相同的性能,因为该代码可以(当然也会)在必要时使用realloc
来调整存储的大小。realloc
通常不会为您节省任何时间,但当它这样做时,它会节省大量时间。vector
不能做到这一点,因为分配器接口没有与realloc
等效的东西,因此引入了少量开销。但vector
几乎在所有时间都具有大致相同的性能,因此几乎达到了零开销的目标。
再举一个例子:在发布模式下使用一个不错的C++编译器,与编写my_int_pointer[3]
相比,编写myvector_of_int[3]
确实没有任何开销。与访问指针类型的局部变量(my_int_pointer
)相比,访问局部变量的数据成员(存储在myvector_of_int
中的数据指针)没有开销的原因可能并不明显,但它不需要任何额外的成本。
通过"手工制作"的代码,Stroustrup意味着抽象的手工实现;例如,手工制作的for
循环将是循环体的N个副本。(参见Duff’s Device了解一个简单的实现。)
Stroustrup所说的"机器模型"是指编译器对机器的看法。例如,C和C++提供了字节、内存位置、内存访问顺序等大致等效的视图;相比之下,Fortran没有任何"字节"的概念,内存位置(或数组访问)与C/C++视图的对应性也不好。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- Stroustrup的C++书挑战赛,有人可以帮助我理解这段代码吗?
- 代码在Visual C ++中无法按预期工作(来自bjarne stroustrup编程和原则书籍2n版本的示例)
- Stroustrup的代码审查-编程原理-Ch-4-问题:3-错误:矢量下标超出范围
- Bjarne Stroustrup访谈-抽象和手工编写的代码
- 'Programming: Principles and Practice Using C++'(第2版),作者:Bjarne stroustrup,第3.3章:代码不起作用
- 视觉 作者的代码是否正确?B. Stroustrup的PPP使用C++:第7章,第7.2节 - 输入和输出