学生编程讨论吧 关注:4,071贴子:13,874
  • 4回复贴,共1

C语言的发展阶段

只看楼主收藏回复

C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
1.1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
2.20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的机器——PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为——UNIX。
3.1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。
4.1971年,同样酷爱Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。
5.1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
6.1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。
7.在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。
8.1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
-----------------------------------------------------------------------------------------------------------------------------
C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。
1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。
1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。
在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。


IP属地:广东1楼2019-06-25 09:31回复
    C++语言发展大概可以分为三个阶段:
    1.第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;
    2.第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;
    3.第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。
    以下是C++发展年代列表:
    1.在“C with Class”阶段,研制者在C语言的基础上加进去的特征主要有:类及派生类、共有和私有成员的区分、类的构造函数和析构函数、友元、内联函数、赋值运算符的重载等。
    2.1985年公布的的C++语言1.0版的内容中又添加了一些重要特征:虚函数的概念、函数和运算符的重载、引用、常量(constant)等。
    3.1989年推出的2.0版形成了更加完善的支持面向对象程序设计的C++语言,新增加的内容包括:类的保护成员、多重继承、对象的初始化与赋值的递归机制、抽象类、静态成员函数、const成员函数等。
    4.1993年的C++语言3.0版本是C++语言的进一步完善,其中最重要的新特征是模板(template),此外解决了多重继承产生的二义性问题和相应的构造函数与析构函数的处理等。
    5.1998年C++标准(ISO/IEC14882 Standard for the C++ Programming Language)得到了国际标准化组织(ISO)和美国标准化协会(ANSI)的批准,标准C++语言及其标准库更体现了C++语言设计的初衷。名字空间的概念、标准模板库(STL)中增加的标准容器类、通用算法类和字符串类型等使得C++语言更为实用。此后C++是具有国际标准的编程语言,该标准通常简称ANSI C++或ISO C++ 98标准,以后每5年视实际需要更新一次标准。
    6.后来又在2003年通过了C++标准第二版(ISO/IEC 14882:2003):这个新版本是一次技术性修订,对第一版进行了整理——修订错误、减少多义性等,但没有改变语言特性。这个版本常被称为C++03。
    7.此后,新的标准草案叫做C++ 0x。对于C++ 0x标准草案的最终国际投票已于2011年8月10日结束,并且所有国家都投出了赞成票,C++0x已经毫无疑义地成为正式国际标准。先前被临时命名为C++0x的新标准正式定名为ISO/IEC 14882:2011,简称ISO C++ 11标准。C++ 11标准将取代现行的C++标准C++98和C++03。国际标准化组织于2011年9月1日出版发布《ISO/IEC 14882:2011》,名称是:Information technology -- Programming languages -- C++ Edition: 3。
    ===================================
    语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。
    最初导致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取来了异常。


    IP属地:广东3楼2019-06-26 09:28
    回复
      C11标准
      2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,简称C11标准,原名C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
      新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括:
      1.对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及<stdalign.h>头文件。
      2._Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。
      3._Generic 关键字。
      4.多线程(Multithreading)支持,包括:
      5._Thread_local存储类型标识符,<threads.h>头文件,里面包含了线程的创建和管理函数。
      6._Atomic类型修饰符和<stdatomic.h>头文件。
      7.增强的Unicode的支持。基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>.
      8.删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。
      9.增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。
      10.增加了更多浮点处理宏。
      11.匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。
      12.静态断言(static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。
      13.新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。
      14.新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。


      IP属地:广东7楼2019-06-28 09:44
      回复
        C++语言标准:
        不是叫做C
        C++98 标准
        C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998[18] 。
        绝大多数编译器都支持C++98标准。不过当时错误地引入了export关键字。
        由于技术上的实现难度,除了Comeau C++编译器export关键字以外,没有任何编译器支持export关键字。
        并且这个标准对现代的一些编译理念有相当的差距,有很多在高级语言都应当有的功能,它都没有。
        这也正是后来需要制定C++11标准的原因所在。
        C++03 标准
        C++标准第二版,2003年发布。正式名称为ISO/IEC 14882:2003[19] 。
        这个标准仅仅是C++98修订版,与C++98几乎一样,没做什么修改。
        仅仅是对C++98做了一些“勘误”,就连主流编译器(受C99标准影响)都已支持的long long都没有被加入C++03标准。
        C++11 标准
        C++标准第三版,2011年8月12日发布。正式名称为ISO/IEC 14882:2011[20] 。
        由C++标准委员会于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。此次标准为C++98发布后13年来第一次重大修正。
        注意: C++11标准(ISO/IEC14882:2011)与C11标准(ISO/IEC9899:2011)是两个完全不同的标准,后者是C语言的标准。
        C++14 标准
        C++标准第四版,2014年8月18日发布。正式名称为ISO/IEC 14882:2014[21] 。
        2014年8月18日,ISO组织在其网站上发布文章称:
        C++ 作者Bjarne Stroustrup 称,主要的编译器开发商已经实现了 C++ 14 规格。
        C++14 是 C++ 11 的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等等。
        C++14正式名称为"International Standard ISO/IEC 14882:2014(E) ProgrammingLanguage C++"。
        C++14旨在作为C++11的一个小扩展,主要提供漏洞修复和小的改进。
        C++14标准的委员会草案(Committee Draft)N3690于2013年5月15日发表。
        工作草案(Working Draft)N3936已于2014年3月02日完成。
        最终的投票期结束于2014年8月15日,结果(一致通过)已于8月18日公布。
        ======================


        IP属地:广东8楼2019-06-29 21:29
        回复
          C++与C的关系
          C语言是C++的基础,C++和C语言在很多方面是兼容的。
          C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。
          C++对C的“增强”,表现在六个方面:
          •(1) 类型检查更为严格。
          •(2) 增加了面向对象的机制。
          •(3) 增加了泛型编程的机制(Template)。
          •(4) 增加了异常处理。
          •(5) 增加了运算符重载。
          •(6) 增加了标准模板库(STL)。
          与C不兼容之处
          C++一般被认为是C的超集合(Superset),但这并不严谨。大部分的C代码可以很轻易的在C++中正确编译,但仍有少数差异,导致某些有效的C代码在C++中失效,或者在C++中有不同的行为。
          1.最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许。
          2.另一个常见的可移植问题是,C++定义了新关键字,例如如new,class,它们在C程序中可以作为识别字(例:变量名)的。
          3.在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解,以及在代码中混合声明。不过C99也纳入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数)。
          若要混用C和C++的代码,则所有在C++中调用的C代码,必须放在 extern "C" { /* C代码 */ } 内。


          IP属地:广东9楼2019-07-03 09:16
          回复