C语言的产生竟然源于一个失败的项目---Multics工程。该项目试图建立一个非常巨大的操作系统,能够应用于规模很小的硬件系统中。Multics成了总结工程教训的宝库,但它同时也为C语言体现“小即是美”铺平了道路。

Ken Thompson Dennis Ritchie
    Thompson PDP-7 新型的操作系统(汇编语言)
    Brian Kernighan 1970 命名为UNXI(1970.1.1) 
    Thompson 创建了B语言,他把用于研究的语言BCPL做了简化,使B的解释器能常驻于PDP-7只有8KB大小的内存中。因为硬件系统的内存限制,它只允许放置解释器,而不是编译器,由此产生的低效阻碍了使用B语言进行UNIX自身的系统编程。

1965-7(BCPL)---》1969(B)---》1971(New B)---》1972-3(早期的C)
                        语言
    UNIX(用PDP-7汇编语言编写)---》UNIX(用PDP-11汇编语言编写)---》UNIX(用C编写)    
                        操作系统
        PDP-7  PDP-11 
                    IBM 360   
                    Honeywell 635

确切地说,UNIX比C语言出现得早(这也是为什么UNIX的系统时间是从1970年1月1日起按秒计算的,因为它就是那时候产生的。

编译器设计者的金科玉律:效率(几乎)就是一切
    需要关心的东西: 有意义的错误信息;良好的文档;产品支持

编译器效率包括:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度)。除了一些开发和学习环境之外,运行效率起决定性作用。

有很多编译器优化措施会延长编译时间,但能缩短运行时间。还有一些优化措施(如清除无用代码和忽略运行时检查等)技能缩短编译时间,又能减少运行时间,同时还能减少内存的使用量。这些优化措施的不利之处在于可能无法发现程序中无效的运行结果。

Dennis Ritchie发明了注重效率的“New B”却获得了成功。
    B语言发扬了“引用数组元素相当于对指针加上偏移量的引用”这个想法。B语言同时保持了BCPL语言无类型的特点,它仅有的操作数就是机器的字。Thomposon发明了++和--操作符,并把它加入到PDP-7的B编译器中。它们在C语言中依然存在。 
    //C语言中,拷贝字符串的一个字符的语句: 
    *p++ = *s++;
    可以极其有效地被编译为PDP-11代码: 
    moveb (r0)+, (r1)+
    Thompson PDP-11(汇编语言)

PDP-11以后,无类型语言很快就显得不合时宜了。这种处理器以硬件支持几种不同长度的数据类型为特色,而B语言无法表达不同的数据类型。 
    "New B"->C采用编译模式,并引入类型系统,并且使用每个变量在使用前必须先声明。

C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段相关推荐

  1. 《C专家编程》第二章——这不是Bug,而是语言特性

    无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...

  2. C专家编程 第1章 C:穿越时空的迷雾 1.4 KR C

    时间:1978 人物:Steve Johnson 事件:编写了pcc这个可移植的C编译器 影响:形成了一代C编译器的基础. C语言的演化之路如图1-2所示. 1973-3(早期的C)--->19 ...

  3. C专家编程 第1章 C:穿越时空的迷雾 1.9 阅读ANSI C标准,寻找乐趣和裨益

    阅读ANSI C标准,寻找乐趣和裨益      int foo(const char **p) {     }     编译这段代码,编译器会发出一条警告信息:      int main(int a ...

  4. C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说

    运动的诗章:运行时数据结构      编程语言理论的经典对立之一就是代码和数据的区别.有些语言(如Lisp)把二者视为一体.其他语言(如C语言)通常维持两者的区别.Internet蠕虫非常难以被人们所 ...

  5. C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP

    C++之于C,就像Algol-68之于Algol          ---David L.Jones     如果你觉得C++还不够复杂,那你知道protected abstract virtual ...

  6. C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组

    使用指针创建和使用动态数组     当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...

  7. C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.2 根据位模式构筑图形

    根据位模式构筑图形     图标(icon)或者图形(glyph)是一种小型的位模式映射于屏幕后产生的图像.一个位表示图像上的一个像素.如果一个位被设置,那么它所代表的像素就是"亮" ...

  8. 《C专家编程》1-2章阅读收获

    一. C诡异离奇,缺陷重重,却获得了巨大的成功. ·编译器设计:效率(几乎)就是一切.编译器的效率包括两个方面:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度). 除了开发和学习环境外,运 ...

  9. C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么

    操作系统在a.out文件里干了些什么      为什么a.out要以段的形式组织.段可以方便地映射到链接器在运行时可以直接载入的对象中!载入器只是取文件中的每个段的映像,并直接将它们放入到内存中.从本 ...

  10. C专家编程 第11章 你懂得C,所以C++不再话下 11.13 多态---运行时绑定

    多态---运行时绑定     多态(polymorphism)源于希腊语,意思是"多种形状".在C++中,它的意思是支持相关的对象具有不同的成员函数(但原型相同),并允许对象与适当 ...

最新文章

  1. java项目包创建顺序_java程序初始化的顺序
  2. red hat linux 7.1 使用手册!,Red Hat Linux 7.1使用手册(中)
  3. 浅析ios开发中Block块语法的妙用
  4. .NETStandard FreeSql v0.0.9 功能预览
  5. PHP将Excel另存为html页面
  6. Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析
  7. mysql 类似wm concat_oracle中有没有类似于mysql中的group_concat的函数?
  8. struts1.x 错误之 java.lang.IllegalArgumentException: No bean specified
  9. 小暑至盛夏始吃苦尝酸保健康
  10. lsqcurvefit拟合结果为复数_高考数学专题突破,向量运算与复数运算、算法、推理与证明,方法规律总结,知识归纳,易错示警...
  11. SwitchHost常见问题解决
  12. 开心网“卖身”:错过转型时机,逆水行舟,不进则退
  13. 欢迎来到咆哮2020:人工智能时代
  14. 学python要有多少英语词汇量_英语学习自测神器——用python爬虫打造专属英文词汇量测试脚本!...
  15. 禅道CMS 11.6漏洞
  16. Storyboard 之segue用法总结
  17. 利用AIDA64对电脑进行简单的稳定性测试的技巧分享
  18. Color类颜色对照表
  19. Web设计网站软件推荐
  20. 安卓【.9图】制作方法教程及技巧

热门文章

  1. 常见的路由器(刷openwrt的同学看下!)
  2. 2020软考信息系统项目管理师-案例分析真题解析视频课程-任铄(小任老师)-专题视频课程...
  3. Epson LQ1600K3+ 打印区域
  4. 已经导入aspectjweaver maven坐标却无法import
  5. 服务器没有D盘怎么架设传奇?
  6. 7-ZIP SFX Maker Display Resource Hacker was not found
  7. 网络定位服务NetworkLocationProvider
  8. 苹果电脑mac计算机图标怎么删除吗,苹果电脑桌面的图标怎么删除不了怎么办
  9. 【檀越剑指大厂--jvm】jvm总结
  10. 免费SSL证书的制作