【CPP11?】结合CPP发展历史来理解CPP11
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1.CPP的由来
- 软件危机的来临
- 应时代的面向对象编程
- CPP的诞生
- 2.CPP语言的发展历程
- 3.启示
前言
由C到CPP的大概历史是如何的?CPP是一门怎样的语言?想必浏览本文将会对此有一些初步的认识,本文是结合历史来介绍CPP的发展历程的。
提示:在本文中,作者对相当内容都进行了概括,只是一个大体的过程,会与具体实际有出入
1.CPP的由来
软件危机的来临
20世纪80年代,由于个人计算机的发展以及图形化界面的开发,计算机需要大量软件开发,人们需求的不断增长,促使软件复杂化,软件开发进入“软件危机”。
主要表现在:
⭕出现了大规模的软件,代码量巨大。 往往需要数百万行代码组成,数千计程序员参与其中,代码维护、可靠结构和维护这样一个大的“代码山”成为一个新的难题。
⭕软件成本开发在计算机系统的总成本中比例居高不下,且逐渐增高。 由于硬件尤其是半导体电子管的发展,硬件成本在不断降低,然而对于软件开发,则需要投入大量的人力,软件成本随着软件规模和数量剧增,其中软件成本在那个年代占总成本的百分之90左右。
⭕软件开发生产率跟不上计算机应用普及速度。软件产品供不应求,阻碍了人类对于当时先进计算机性能的使用。
软件危机可以概括为:落后的软件生产方式无法满足迅速增长的计算机软件需求,导致在软件开发与维护过程中出现一系列严重问题的现象。这些问题包括但不限于开发成本超支、进度延误、软件质量不达标、软件难以维护、用户需求不明确以及缺乏适当的文档资料等。软件危机是计算机软件开发和维护过程中面临的一个重要挑战,需要采取有效的措施来应对和解决。
应时代的面向对象编程
以此为背景,计算机软件开发迫切需要“可组合型”、“可延展性”、“可维护性”的编译语言,为了解决这个问题,面向对象编程的概念被提上日程。面向对象编程的一系列语言诞生——最典型的便是CPP、C#、Java…编译语言对于底层的高度抽象化,使得程序员越来越不需要知道底层是怎么进行工作的了,软硬件界限进一步分化(在汇编出现便就是软硬件分化了)。
CPP的诞生
CPP英文是C plus plus,最初是对C语言的一种拓展,不过后来因为其拓展后的功能远远超过C语言,因而被独立出来作为一种新的语言。
1979年,贝尔实验室本加尼博士等人试图分析unix内核并将其模块化,因为C语言不方便对其进行模块化,便在C语言的基础上进行了拓展,增加了类的机制,当时称之为“C with classes”。这基本可以认为是CPP语言的开端。
2.CPP语言的发展历程
CPP语言至今基本经历了三次大版本更新,虽然经过很多小版本的发布,但是因为特性小众和不实用性因而一般不被视为大版本更新。
-
第一次是1998年到2003年,称为CPP98,2003年版本主要是对98版本的修订,因此常常视为一个版本。
CPP标准第一个版本,得到绝大多数编译器支持,得到了国际标准化组织ISO和美国标准化协会的认可,以模板方式重写CPP标准库,引入了STL,标志这CPP已经称为一种成熟语言并得到标准协会的认可。 -
第二次是2011年版本,我们一般称之为CPP11,里面增加了大量的新特性,毕竟接近十几年没有大改动了。
在这个版本中,增加了许多特性,使得CPP更加高级,比如增加了正则表达式、范围for、auto自动推导、新容器哈希表、列表初始化、标准的线程库等…
其中大部分公司和编译器均推荐支持CPP11… -
第三次比较大的更新是CPP20,引入了模块、协程、范围、概念等重大特性…
3.启示
我们发现:
1.CPP语言是一个相对古老的高级语言:这就说明了CPP肯定有很多历史遗留下的语言bug,大大增加了CPP语言的学习成本
2.CPP语言发展相对缓慢:相对于Java来说,Java基本两三年一更新,CPP则一个大版本出来需要十几年…其实这主要是因为CPP是由CPP委员会制定的,属于公益组织(没钱),而像Java这种高级语言,维护直接就是商业化公司(0racle)
更新速度说明不了全部:但是我们需要明白的是,这并不意味着CPP发展不如Java…我们需要明白,一个语言好不好用不是只看更新速度,而要看他适合干什么,虽然CPP更新比Java慢的多,但是实际应用到工作中,我们不需要用到最新的版本,一是因为可能存在bug,二是因为程序员学习也需要时间
EOF