很自然,上面提出的规则基本上都适用于所有语言特征。下面的规则也同样影响C++ 如何作为一种表述高层设计的语言。

使用传统的(笨[1])连接器:初始目标就包括了容易移植,容易与用其他语言写的软件互操作。强调C++ 应该可以用传统连接器实现,就是为了保证这些东西。要求通过在Fortran早期就有的连接技术必然是一件很痛苦的事情。C++ 的一些特征,特别是类型安全的连接(11.3节)和模板(第16章)都可以用传统的连接器实现,但如果有更多的连接支持,它们还可以实现得更好。C++ 的第二个目标就是想推动连接器设计的改革。

采用传统连接器,使维持与C的连接兼容性变得相对简单。对平滑地使用操作系统功能,使用C和Fortran等,使用库,以及写为其他语言所用的库代码,这一特性都具有本质性。对于写想作为系统底层部分的代码,例如设备驱动程序等,使用传统连接器也是最关键的事情。

没有无故的与C的不兼容性:C语言是有史以来最成功的系统程序设计语言。数以十万计的程序员熟悉C,现存的C代码数以十亿行计,存在着集中关注C语言的工具和服务产业。而且C++ 又是基于C的。这就带来一个问题:“C++ 的定义在与C相匹配方面到底应该靠得多么近?”C++ 不可能把与C的100% 兼容作为目标,因为这将危及它在类型安全性和对设计的支持方面的目标。当然,在这些目标不会受到干扰的地方,应该尽量避免不兼容性——即使这样做出的结果不太优雅。在大部分情况下,已经接受的与C语言的不兼容性,都出现在C规则给类型系统留下重大漏洞的地方。

在过去这些年里,C++ 最强的和最弱的地方都在于它与C的兼容性。这种情况不奇怪。与C兼容性的强弱将来也一直会是一个重要议题。在今后的年代里,与C的兼容性将越来越少地看作是优点,而更多变成一种义务。必须找到一条发展的道路(第9章)。

在C++ 之下不为更低级的语言留下空间(除汇编语言之外):如果一个语言的目标就是真正成为高级的——也就是说,它想完全保护自己的程序,使之避开基础计算机中丑陋且使人厌倦的细节——那么它就必须把做系统程序设计的工作让给其他语言。典型情况下,这个语言就是C。但另一种情况也很典型,C在许多领域中将取代这种高级语言,只要在这里控制或速度被认为是最关键的问题。常见情况是,这最终将导致整个系统完全用C语言来编写;或者是导致这样的一个系统,只有对两种语言都非常熟悉的人才能够把握它。在后一情况下,程序员常常会遇到一个艰难的选择:给定的任务究竟适合在哪个层次上做程序设计呢,他不得不同时记住两种语言的原语和准则。C++ 试图给出另一条路,它同时提供了低级特征和抽象机制,支持用这两种东西构造混合的系统。

为了继续成为一种可行的系统程序设计语言,C++ 必须保持C语言的那种直接访问硬件、控制数据结构布局的能力,保有那些能以一对一的风格直接映射到硬件的基本操作和数据结构。这样,它的替代品就只能是C或者汇编语言。语言设计的工作就是去隔离这些低级特征,使不直接操作系统细节的代码不需要用这些低级特征。这里的目标是保护程序员,防止出现无意中越界的偶然的错误使用。

对不用的东西不需要付出代价(0开销规则):对于规模较大的语言,有一种论断人人皆知,说它们会产生大而慢的结果代码。最常见的是由于支持某些假设的高级特征而产生的额外开销,而这种开销又散布在整个语言的所有特征中。例如,所有对象都需要扩大,以保存为某种系统簿记而使用的信息;对所有数据都采用间接访问方式,因为某些特征通过间接访问特别容易管理;或是对各种控制结构都进行加工,以迎合某种“高级控制抽象”。对C++ 而言,这类“分布式增肥”根本就不合适,接受它就会在C++ 之下为更低级的语言留下空间,使得对那些低级和高性能的应用而言,C语言将成为比C++更好的选择。

这个规则在C++的设计决策中不断成为最关键的考虑。虚函数(3.5节)、多重继承(12.4.2节)、运行时的类型识别(14.2.2.2节)、异常处理和模板,都是与此有关的特征实例,它们的设计也部分地可以归于这条规则,都是到了我自己已经确信能构造出遵守0开销规则的实现方式时,这些特征才被接受进来。当然,一个实现者可以决定在0开销规则和系统所需要的某些性质之间如何做一种折中,但是也必须仔细地做。程序员通常对于分布式的增肥会有刺耳的、非常情绪化的反应。

如果想拒绝人们建议的一个特征,0开销规则可能是所有规则中最锋利的一个。

遇到有疑问的地方就提供手工控制的手段:我对信任“高级技术”总是非常勉强,也特别不愿意去假定某些真正复杂的东西是普遍可用的和代价低廉的。inline函数是这方面的一个很好的例子(2.4.1节)。模板初始化是另一个例子,我在那里应该更当心一点,后来又不得不增加了一种显式控制的机制(15.10节)。对存储管理的细节控制也是一个例子,通过手工控制可能得到重要的收获,然而,只有时间才能告诉我们这些收获是不是可以通过某种自动化技术以类似的代价得到(10.7节)。

C++低级程序设计支持规则相关推荐

  1. elasticsearch控制match执行过程的低级查询处理规则

    本篇文章主要说明match执行过程中的低级查询(bool term)以及涉及到评分规则(包括同义词).elasticsearch一些较复杂业 务查询中 match 多词和同义词搜索可能会遇到的问题. ...

  2. AI支持的自然语言编程

    --由开发新编程语言的讨论而突然想到的一些想法 今天在微信上看到了CSDN主办的一个讨论,是魏永明和许式伟两位老总谈新的编程语言,他们两人都是为数极少的中国创造的编程语言的创始人.难得!可贵!在听他们 ...

  3. 汇编语言程序设计IV-贺利坚-专题视频课程

    汇编语言程序设计IV-2245人已学习 课程介绍         汇编语言是一门低级程序设计语言,在数以千计的计算机语言中,有着不可替代的重要地位,广泛地用于开发操作系统内核.设备驱动程序等.随着近年 ...

  4. 全国计算机等级考试python教材.pdf_全国计算机等级考试二级教程Python语言程序设计(2018年版).PDF...

    全国计算机等级考试二级教程Python语言程序设计(2018年版).PDF 全国计算机等级考试二级教程 Python语言程序设计 (2018年版) [第1章] 程序设计基本方法 考纲考点 n Pyth ...

  5. 数据结构与程序设计——C++语言描述(Data Structures Program Design in C++) by Robert L.Kruse Alexander J.Ryba

    第1章程序设计原理   率章首先慨述良好程序设计的重要原理,特别是它们在大型项目中的应用:然后介绍用 于发现有救算法的方法,如面向对象的设计和白顶向下的设计.在此过程中,我们提出将在 后继章节中论述的 ...

  6. 汇编语言程序设计-贺利坚-专题视频课程

    汇编语言程序设计-2766人已学习 课程介绍         汇编语言是一门低级程序设计语言,在数以千计的计算机语言中,有着不可替代的重要地位,广泛地用于开发操作系统内核.设备驱动程序等.随着近年来物 ...

  7. 汇编语言程序设计V-贺利坚-专题视频课程

    汇编语言程序设计V-2353人已学习 课程介绍         汇编语言是一门低级程序设计语言,在数以千计的计算机语言中,有着不可替代的重要地位,广泛地用于开发操作系统内核.设备驱动程序等.随着近年来 ...

  8. 第一章 程序设计基本方法

    文章目录 1.程序设计语言概述 2.IPO程序编写方法 3.编译和解释 4.Python语言的诞生 5.Python程序的特点 6.Python语言的运行方式 1.程序设计语言概述 程序设计语言也叫编 ...

  9. 2010c语言系统编程结果,(2010年版)《C语言程序设计》实验指导书.pdf

    <C 语言程序设计>实验指导书 2010 年 6 月 长江大学电信学院计算机课程组 前 言 C 语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点, 又具有低级程序设计 ...

最新文章

  1. python制作音乐模块_用Python打造一个只属于你的专属音乐播放器,享受动手的快乐!...
  2. linux comm 12,Linux comm命令
  3. windows nginx c++读取请求数据_震撼!全网第一张源码分析全景图揭秘Nginx
  4. JZOJ 5454. 【NOIP2017提高A组冲刺11.5】仔细的检查
  5. Python中的GIL和深浅拷贝
  6. WPF MVVM实例三
  7. Linux 双网卡绑定
  8. mxnet实战系列(一)入门与跑mnist数据集
  9. 创建MyFilter1类过滤器,对于未登陆用户(如果session对象中包含用户名就认为已登录)进行过滤跳转到登录页面
  10. input不管用 vue_重读 VUE 官方文档 lt;2gt;
  11. 创建ASP.NET MVC5 应用程序
  12. 悦保OCR识别,提供票据、卡证、保险场景识别新方案
  13. Zabbix3.4监控Linux主机CPU温度
  14. 不同速度流体的剪切形成不同尺度的漩涡,看起来很像分形。
  15. JZOJ 3339. 【NOI2013模拟】wyl8899和法法塔的游戏
  16. Ubuntu编译OpenPose的一些坑(附可能涉及的码云地址)
  17. 你想知道,Microsoft Edge这种巨型项目是如何进行版本管理的吗?
  18. 大漠多线程循环任务自动切换模板判断账号登陆成功
  19. 怎么调出全局搜索_eclipse全局搜索快捷键是什么
  20. bmp180气压传感器工作原理_40张动图揭示各种传感器工作原理!

热门文章

  1. HEVC测试序列网址和账号
  2. matlab 曲线拟合--视频编码中PSNR计算及码率计算
  3. c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)
  4. 网络-网络编程模型步骤
  5. Eclipse-复制项目
  6. 74LS139改3―8线译码器_3、5号线沿线楼盘6800起!另:为无缝衔接地铁 新增调整公交线路一览!...
  7. rms 公式 有效值_有效值是电流电压的均方根值吗?
  8. 【redis 学习系列08】Redis小功能大用处02 Pipeline、事务与Lua
  9. baidu 地图 鼠标移上显示标签 鼠标离开隐藏标签
  10. 大量文本框非空判断,如何提高灵活性?