论C++的发家史以及相对其他语言优缺
C++发家史:
最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。
当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
下面让我们来一起看一下C++历史上的主要事件:
1983年8月, 第一个C++实现投入使用(所以我喜欢说1983年C++开了天界)
1983年12月,Rick Mascitti建议命名为CPlusPlus,即C++。
1985年2月, 第一个C++ Release E发布。
10月,CFront的第一个商业发布,CFront Release 1.0。
10月,Bjarne博士完成了经典巨著The C++ Programming Language第一版
1986年11月,C++第一个商业移植CFront 1.1,Glockenspiel。
1987年2月, CFront Release 1.2发布。
11月,第一个USENIX C++会议在新墨西哥州举行。
1988年10月,第一次USENIX C++实现者工作会议在科罗拉多州举行。
1989年12月,ANSI X3J16在华盛顿组织会议。
1990年3月, 第一次ANSI X3J16技术会议在新泽西州召开.
5月, C++的又一个传世经典ARM诞生。
7月, 模板被加入。
11月,异常被加入。
1991年6月, The C++ Programming Language第二版完成。
6月, 第一次ISO WG21会议在瑞典召开。
10月,CFront Release 3.0发布。
1993年3月, 运行时类型识别在俄勒冈州被加入。
7月, 名字空间在德国慕尼黑被加入。
1994年8月, ANSI/ISO委员会草案登记。
1997年7月, The C++ Programming Language第三版完成。
10月,ISO标准通过表决被接受
1998年11月,ISO标准被批准。
接下来让我们一起看一下C++编译器的“第一个”:
1985年10月,Cfront Release 1.0发布。
1987年12月,GNU C++发布。
1988年1 月,第一个Oregon Software C++发布。
6 月,第一个Zortech C++发布。
1990年5 月,第一个Borland C++发布。
1992年2 月,第一个Dec C++发布。
3 月,第一个Microsoft C++发布。
5 月,第一个IBM C++发布。
与Java相比的优缺点:
优点:
1.Java比C\C++慢。Java 1.0 比C慢20倍 现在的Java 1.6运行速度也只是C 的一半。
2. C++在继承和派生上比Java更灵活
3. C++ 中可以直接插入汇编 能直接操控底层硬件 所以操作系统还是得用 c写
4. Java办的到C++一定办得到,C++办得到的Java则不一定。
5. Sun被甲骨文收购了之后,Java的发展很受影响。
6. C++编译的程序可以直接运行,Java需要安装JRE有几十MB,影响产品发 布的用户体验。
缺点:
1.Java比C,C++简单,学起来比C\C++容易
2.Java完全对象化,比如数组在Java中是一个对象,含有length这个属性;
而不像C++中数组是一个指针。所以访问数组,Java都会进行边界检查,更安全
,但牺牲了速度。同时因为Java中所有类都会继承Object这个基类,所以可以 把几个好不相干的类用基类联系起来,比如放在同一个数组里。
3.Java中没有指针这样不安全(虽然指针速度快)的概念。
4.Java中有完善的内存管理机制,能自动垃圾回收,最大可能降低内存溢 出的可能,同时提高编程效率。
5.Java中有完善的异常机制(标准C++中不够完善)。
6.Java中保持数据时对象本身是在堆里,同时靠一在栈里的句柄与之连接 。这个设计更合理。
由以上几点可见Java更安全。
8.Java标准库完整的多,相比之下C++除了一个STL(而且还超级难用)就没
了,实际C++编程中需要大量使用第3方库。这很大程度上是因为Java有一些商
业公司支持,更新速度快,而C++只有一个可怜的标准委员会,上一个C++标准 版本还是C++98
9. Java因为是把程序编译为字节码,运行时需要JVM把字节码再翻译为机 器码,所以他跨平台,一次编译到处运行。但这也是他慢的根本原因。
10.Java原生支持多线程(C++仅靠标准库办不到),原生的UI,如AWT Swing
心得:乍一看,总感觉Java比C++的优点要好太多,纵观现在社会,学Java的人越来越多,相对于Java来说,C++似乎是一个卖力不讨好的事,可是假如你出去工作两到三年,你就会越来越发现你会主动的去了解学习C/C++的知识,因为你用的语言太高级了,当出现一些底层的错误时,你单单看表面是无法解决问题的,你需要深入的去了解这些封装背后的东西。因此我认为,学习C/C++必须的,学好了,再去学习其他语言,就是手到擒来。
论C++的发家史以及相对其他语言优缺的更多相关文章
- GFW的前世今生,一部GFW之父方滨兴的发家史
http://whu.myubbs.com/thread-96390-1-1.html方滨兴(1960年7月17日-),男,中国共chan党党员,中国工程院院士,全国人大代表,中国科学院信息工程研究所 ...
- 原来Java的发家史是这么回事
java的诞生: 1991 年Sun公司成立了一个计算机开发小组,由James Gosling等人开发一款希望用于控制嵌入在有线电视交换盒.PDA等的微处理器的计算机语言,本来他们想直接扩展C++,后 ...
- 浅谈Hybrid技术的设计与实现
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...
- Hybrid技术的设计与实现(转)
浅谈Hybrid技术的设计与实现 前言 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而 ...
- 【转】阿里2015校招面试回忆(成功拿到offer)
原文转自:http://blog.jobbole.com/78722/ 1. 引言 继上次<百度2015校园招聘面试题回忆(成功拿到offer)>文章过后,大家都希望除了题目之外,最好能给 ...
- 论山寨手机与Android联姻 【4】手机产业链
前文说到,生产手机以前,制造厂家需要预先得到软硬件的产品级设计方案,然后按照设计方案亦步亦趋地做,就可以制造出手机了.软硬件的产品级设计包括以下内容, 1. 主板设计,或者Gerber文件,或者PCB ...
- 阿里2015回顾面试招收学历(获得成功offer)
1. 引言 继上次"百度2015校园招聘面试题回顾录(成功拿到offer)"文章过后,大家都希望除了题目之外.最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有參考价值 ...
- 浅谈Hybrid技术的设计与实现(转)
前言 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而H5的低成本.高效率.跨平台等特性 ...
- 英语口语练习系列-C05-水电
<登幽州台歌>·陈子昂 陈子昂(公元659-公元700年),唐代文学家,初唐诗文革新人物之一. Num 诗句 1 前不见古人, 2 后不见来者. 3 念天地之悠悠, 4 独怆然而涕下! T ...
随机推荐
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- 【MOOC EXP】Linux内核分析实验八报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点 ...
- Linux内核分析— —扒开系统调用的三层皮(上)
实验部分 根据系统调用表,选取一个系统调用.我选得是mkdir这个系统调用,其系统调用号为39,即0x27 由于mkdir函数的原型为int mkdir (const char *filename, ...
- Linux内核分析作业八
进程的切换和系统的一般执行过程 贾瑗 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029 ...
- Linux实践三:程序破解
一.汇编指令机器码 二.反汇编与十六进制编程器 三.可执行文件的基本格式 hexdump -x login 用16进制数字显示login内容 objdump -x login 显示login中各个段以 ...
- selective search
1.引言:图像的物体识别主要有两个步骤:定位.分类.在分类的过程中,需要对图像中文物体的区域划分出来.传统的方法是利用滑窗,一个窗口一个窗口得选择,将之与目标进行比较,确定物体的位置. 为了降低搜索空 ...
- JAVA链表中迭代器的实现
注:本文代码出自<java数据结构和算法>一书. PS:本文中类的名字定义存在问题,Link9应改为Link.LinkList9应该为LinkList.由于在同包下存在该名称,所以在后面接 ...
- NumsCount
package com.home.test; import java.util.Arrays; public class NumsCount { public void getNumCount(int ...
- Filter(转载)
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- 业务-----修改Service常用逻辑
注意:修改时唯一属性不能重复 //num==null 时,没有修改Num,不用考虑重复问题.//num!=null 时,修改了num.考虑重复问题 if(!StringUtils.isEmpty(re ...