**C,C++,C#**

C语言,C++,C#都是非常重要的语言,并且C++是C的扩充,C#借鉴了C++的语法,它们有着相似的语言结构,却有着不同的语言特性,有着不同的故事。在编程语言排行榜上,它们也总是名列前茅。通过认识它们,能感受编程语言的魅力,更是见证了信息时代的降临。


图1 2002-2018编程语言排行榜

一、C语言

C语言,自1972年诞生至今,仍然在许多领域有着统治性的地位。技术迭代速度狂飙突进的计算机领域,技术淘汰速度快的惊人。而C语言这棵常青树,语法简单明了,历史积累丰富,和硬件距离贴近,和系统容易对接,学习资源海量,应用场合广泛,至今还是那么生机勃勃。C语言之所以会那么多人推崇,甚至被誉为“上帝语言”,因为它不但奠定了软件产业的基础,还创造了很多其它语言。C++是对C的扩展补充,Java、Go的语法从C和C ++中借鉴了很多东西,微软c#语言定义主要是从C和C++继承而来的,Rust是对C和C ++创建的内存管理难题的回应,也是对这两种语言的许多其他缺点的回应,python就是用C编写的。C语言在编程语言发展史上有着极其重要的作用,C语言对于编程语言的发展有着不可替代的意义。

1、C语言的历史
C语言诞生在著名的贝尔实验,起因却是因为想玩游戏。20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的机器——PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手PDP-7开发操作系统。后来,这个操作系统被命名为——UNIX。1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母),并且他用B语言写了第一个UNIX操作系统。1971年,D.M.Ritchie(DM里奇)玩心大发,也想要玩同事KenThompson开发的游戏Space Travel,所以加入了KenThompson,合作开发UNIX,他的主要工作是改进Thompson的B语言。1972年,爱玩的 D.M.Ritchie 在B语言的基础上改着改着就改出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年,C主体完成。Ken Thompson和D.M.Ritchie迫不及待的开始用C语言完全重写了UNIX。此时编程的乐趣已经使他们完全忘记了那个“Space Travel”,一门心思的投入到了UNIX和C语言的开发中。自此,C语言和UNIX相辅相成的发展至今。两个想玩的人促使了C语言的诞生,玩,究竟是不是人类的终极目的?这不得而知,但是玩是启发灵感的一剂妙药却是一定真实存在的。

图2 Ken Thompson与Dennis MacAlistair Ritchie

第一个事实上的C标准是《K&R》标准 ,以1978年发布的UNIX第七版中的C语言编译程序为基础,Brain W.Kernighhan和 Dennis M.Ritchie(合称K&R)合著了影响深远的名著《The C Programming Language》,这本书中介绍的C语言成为了后来广泛使用的C语言版本的基础。1983年,美国国家标准协会(ANSI)根据C语言问世以来各种版本对C语言进行了发展和扩充,公布了第一个C语言标准草案(83 ANSI C)。ANSI C比原来的C有了很大的发展。1989年,ANSI公布了一个完整的C语言标准-X3.159.1989,简称C89。 K&R在1988年修改了他们的经典著作《The C Programming Language》,按照即将公布的ANSI C重新写了该书。1990年,国际化标准组织IOS(International Standard Organization)接受C89为IOS C的标准,通称C90. C90与C89基本相同。1999年,IOS又修订了C语言标准,简称C99。 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。截至2020年,最新的C语言标准为2017年发布的 “C17”。

图3 The C Programming Language(ANSI C版)

2、C语言的现状与未来发展
在过去的四十年里,C语言已经成为世界上最流行、最重要的一种编程语言。C语言作为一门面向过程的计算机编程语言,是一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。目前大多数高校计算机相关专业仍是以C语言作为入门语言,并且许多工作多年的程序员仍然复习C的相关知识以求更进一步,这充分说明了C的重要作用。C不仅仅是一种编程语言,更是传承着编程的思想与灵魂。C生万物,编程之本。很多人初学编程都是从C语言学起的,C语言是必不可少的基础,C语言在各个领域应用广泛,比如嵌入式、大数据、云计算、人工智能、智能硬件、信息安全等各个领域都会用到C语言。目前来说,C语言对于计算机相关领域仍然十分重要,尤其在嵌入式、物联网、底层编程等方面。C语言历经多年发展,拥有数量庞大的资料库,用C开发的软件资料数不胜数,这也为C的长盛不衰奠定了基础。现在的市场行情来看,C语言的岗位需求仍然旺盛,这也充分说明了C语言仍然具有强大生命力。
在物联网万物互联的大趋势下,C语言势必会在自动驾驶、智能家居、机器人等领域有着更广泛的应用。嵌入式本就以C语言开发为主,而物联网的高速发展,势必会使C语言仍然具有强大的生命力,C语言在可预见的未来仍然是作为主流语言,仍是时代的先驱者。迄今为止,一堆编程语言里,只有C能做到不朽,其他都做不到。主流操作系统都是C写的,绝大多数语言的编译器也是C写的。大量的底层库是,驱动也是。这些因素也决定了C语言在将来不仅仅是历史的功臣,也是未来的顶梁柱!不管 C++ 和 Java 还是其他较新的语言如何流行,C 在软件产业中仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。C语言也一直位列主流编程语言的前三甲!特别是在嵌入式系统的编程中,C 一直占据主导地位。也就是说,在为汽车,照相机,DVD等其他现代化设备中逐渐普及的微处理器编程。同样,C 已开始进入长期以来一直属于 FORTRAN 的科学编程领域。由于它是一种适合用来开发操作系统的语言,C 在windows以及 Linux的开发中也扮演着重要的角色。因此,在未来几十年当中,C语言也将继续强势!

二、C++

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++是C语言的扩充,应用非常广泛。常用于系统开发,引擎开发等应用领域,支持类、封装、继承、多态等特性,这使它发布短短几年内迅速流行,C++在软件开发领域有着杰出的贡献。

1、C++的历史
C++是由C++的历史可以追溯到1979年,当时Bjarne Stroustrup正在准备他的博士毕业论文,他有机会使用一种叫做Simula 的语言,Simula语言的主要作用是仿真。Simula 67是Simula语言的一种变种,被公认是首款支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。他他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。“C with Classes”表明这种新语言是在C基础上研发的,是C语言的超集。C语言以其高可移植性而广受好评,且程序执行速度以及底层函数的性能不受程序移植的影响,Stroustrup要做的就是将面向对象的思想引入C语言。新语言的初始版本除了包括C语言的基本特征之外,还具备类、简单继承、内联机制、函数默认参数以及强类型检查等特性。Bjarne Stroustrup的第一款“C with classes”编译器叫Cfront,这个名字源自一个叫做Cpre的C编译器。Cfront的机理是把“C with classes”的代码翻译成原生C代码。颇为有趣的一点是Cfront源码大部分是由“C with Classes”编写,这使得Cfront成为了一种自足执行的编译器(可以编译自身源码的编译器)。由于很难整合C++的异常机制,Cfront在1993年退出了历史的舞台,但是它对以后C++编译器以及Unix操作系统的实现都产生了深远的影响。


图4 Bjarne Stroustrup

1983年,“C with Classes”语言更名为C++。C语言中“++”运算子的作用是对一个变量进行递增操作,由此我们多少可以知晓Stroustrup对这种新语言的定位。1985年,Stroustrup的C++参考手册《C++ Programming Language》出版,同年,C++的商业版本问世。由于当时C++并没有正式的语言规范,因此《C++ Programming Language》成了业界的重要参考。1989年,C++再次版本更新,这次更新引入了多重继承、保护成员以及静态成员等语言特性。1990年,《Annotated C++ Reference Manual》发布,同年,Borland公司的商业版Turbo C++编译器问世。1998年,C++标准委员会发布了C++语言的第一个国际标准—ISO/IEC 14882:1998,该标准即为大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可没。2003年,标准委员会针对98版本中存在的诸多问题进行了修订,修订后发布了C++03。2011年,新的C++标准(C++11)面世。2014年8月18日,经过C++标准委员投票,C++14标准获得一致通过。C++17 是继 C++14 之后,C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。而就在2017-12-5,ISO C++ 委员会正式发布了 C++ 17 标准,官方名称为 ISO/IEC 14882:2017。基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码。

图5 The C++ Programming Language(C++11版)
2、C++的现状和未来发展
C++在PC时代无疑是王者的存在,C++以其强大的性能优势和稳定性几乎横跨整个PC时代。直到C#和unity的出现才使其他语言分别在桌面应用和游戏领域分一杯羹。C++杰出的性能与编程效率,使它在游戏,网络软件,中层框架等领域有着广泛的应用。从C++目前的活跃程度以及应用现状来说是完全能够肯定,C++仍然是软件工业的基础。另外从Boost,Loki这些库中我们也能够看到C++的发展非常活跃,对于新技术新思维非常激进,C++仍然广泛受到关注。从ACE在高性能通信领域的应用,以及MTL这样的库在数值计算领域的出色表现,我们可以看到C++在高性能应用场合下的不可替代的作用,而嵌入式系统这样的内存受限开发平台,比如Symbian OS上,C++已经发挥着并且将发挥更大的作用。
虽然C++从脱胎于C开始,一路艰难坎坷的走过来,但是无论如何C++已经取得了工业基础的地位,业界的大量用C++写成的产品代码以及大量的C++职业工程师就是最直接的证明。其实在编程语言中真正的霸主多年来一直是C++,所有的操作系统和绝大多数的商品软件都是用C++作为主要开发语言的,在操作系统、设备驱动程序、视频游戏等领域,C++在很长的时间内仍将占据主要地位。各个高校的计算机专业都开设有C++这门课程,网络上对于C++的学习讨论也从来都没有停过。但是,在Java和.NET两大企业开发平台的围攻下,给人的感觉是C++越来越“不行”了。 C++在面向企业的软件开发中,在开发便捷性等方面的确要比Java和C#差很多,其中一个问题是C++语言本身比较复杂,学习曲线比较陡峭。另外一个问题是C++标准化的时间太长,丧失了很多的机会。C++在未来发展有两个趋势,一个趋势是C++变得更加复杂,更加学院派另一个趋势是C++在主流的企业应用开发中已经逐渐退出了。这将导致C++从业者的精英化。但至于说C++会在未来消失,个人认为不太可能,C++未来仍将有广泛应用,C++不会成为一点都不重要的语言。比如游戏领域,效率和稳定性是十分重要的,以腾讯微代表的游戏公司,很多游戏都是C++开发的。再比如工业互联网,现在工业互联网已经上升到国家战略层级,而很多工业机床或者系统都是数据接口都是提供的C++的接口,并且由于工业设备性能较落后对运行效率有较大要求,所以C++在工业数据采集和交互控制方面有天然优势和广阔应用前景。在游戏、科学计算、网络软件、中层架构、嵌入式、工业互联网、热工智能等领域,C++有着独特的优点,未来C++虽可能不会像之前一样大红大紫,但在许多领域仍是十分重要的语言。

三、C#

C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。C#借鉴了C++的语法,与Java的语言特性相似,但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

图6 微软图标

1、C#的历史
C#主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语。C# 是一种多重范式,包含了强类型,指令式,声明式,函数式,泛型,面向对象(基于类型)以及面向组件的编程语言,它是微软为了推动.net平台而为CLI(公共语言基础结构/common language infrastructure)开发的。1998年12月,微软启动了一个全新的语言项目——COOL,这是一款专门为CLR设计的纯面向对象的语言,也正是C#的前身。1999年7月份,微软完成了COOL语言的一个内部版本。 2000年2月份,微软才正式将COOL语言更名为C#。历经了一系列的修改, 2000年6月26日,微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上发表新的语言C#。2014年11月12日,微软宣布.NET平台全技术栈开源并且将让.NET运行在Linux和MacOS上,并且会通过.NET Foundation(.NET基金会)来与社区密切合作在未来改进.NET。 自语言诞生至今,C#也是经历数次更新,从最初的纯粹面向对象、泛型编程新概念到动态编程,C#不断发展完善,已经成为十分重要的编程语言。

图7 Anders Hejlsberg
2、C#的现状和未来发展
C#是兼顾系统开发和应用开发的最佳实用语言,并且很有可能成为编程语言历史上的第一个“全能”型语言。C#几乎集中了所有关于软件开发和软件工程研究的最新成果:面向对象、类型安全、组件技术、自动内存管理、跨平台异常处理、版本控制、代码安全管理……C#与Java一直相爱相杀,共同发展竞争着。虽然现在Java更加广泛,但是C#一直也是跻身热门语言前几名。在网络服务方面,C# 的即时编译和本地代码Cacha方案比JAVA虚拟机具有绝对的性能优势。在游戏领域,C#一直是全世界游戏开发人员的最爱,它借助语法糖在性能、低水平、OOP和易于编码之间取得了很好的平衡,几乎一半的游戏是使用Unity 3D制作的。Windows是占垄断地位的平台,而开发Windows应用,当然微软的声音是不能忽略的,作为微软开发的C#,也是一直受到微软的重视与推广。

图8 unity3D图标
在未来,C#也必将继续发展壮大。C#可以编写任何东西:游戏、Xamarin移动应用、桌面应用、网络应用、网站和网络商店等。世界上只有少数几种语言是多功能的,而没有一个像C#那样干净整洁。然而C#与Java的竞争仍将继续,并且目前来看,C#仍然处于劣势。首先,在大量的现有Windows平台上,C# 的程序还不能运行,因为C# 程序需要 .NET运行库作为基础。其次,C# 能够使用的组件或库还只有 .NET 运行库等很少的选择,没有丰富的第三方软件库可用。第三,JAVA的成功因素里有一些是反微软阵营的吹捧,虽然“只写一次,到处运行”只是一句口号,但毕竟已经是一种成熟的技术。但是抛开非技术因素,C# 无疑是非常好的编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果。面向对象、类型安全、组件技术、自动内存管理、跨平台异常处理、版本控制、代码安全管理……而这些,也一定会促使C#更加繁荣。

C语言,C++,C#发展的回顾与展望相关推荐

  1. 程序设计语言发展回顾与展望

    文章转载自:计算机世界网,原文链接地址:http://www2.ccw.com.cn/1995/13/138106.shtml 编者按:程序设计语言是与现代计算机共同诞生.共同发展的,至今已有40余年 ...

  2. Groovy/Grails的发展与回顾

    Groovy/Grails的发展与回顾 作者: cornsomething 本文是这一年以来,在美国召开令人激动的 NFJS 系列会议的人们汇集在一起的东西.在几个礼拜之前,我非常幸运的在西雅图参加了 ...

  3. C++:C++语言入门级基础知识考察点回顾之基本数据类型、流程控制

    C++:C++语言入门级基础知识考察点回顾之基本数据类型.流程控制 目录 C++的基本数据类型 0.return 的两种实现

  4. C++:C++语言入门级基础知识考察点回顾之数组、指针

    C++:C++语言入门级基础知识考察点回顾之数组.指针 目录 C++的数组.字符串 1.数组 1.1.声明数组 1.2.一维数组的应

  5. C++:C++语言入门级基础知识考察点回顾之函数、结构体和类

    C++:C++语言入门级基础知识考察点回顾之函数.结构体和类 目录 C++的函数 1.函数的定义.调用,全局变量局部变量 1.1.自定义函数求其倒数

  6. 【报告分享】砥砺前行 智启新章:2019-2020中国银行业发展回顾与展望.pdf(附下载链接)...

    今天给大家分享的报告是德勤发布的<砥砺前行 智启新章:2019-2020中国银行业发展回顾与展望.pdf>,报告包含如下四大部分: 1.2019年经济和金融形势回顾: 2.2019年大型上 ...

  7. 光阴似箭——绿巨人NVIDIA显卡发展简史回顾

    光阴似箭--绿巨人NVIDIA显卡发展简史回顾<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...

  8. 幼儿园c ch语言教育,小班语言发育迟缓幼儿发展评估及教育干预的个

    小班语言发育迟缓幼儿发展评估及教育干预的个 转载:佚名 幼儿教学论文 2020-01-06 [摘要]本研究以一名3.5岁语言发育迟缓幼儿为研究对象,通过观察法并结合<3-6岁儿童学习与发展指南& ...

  9. 计算机语言处理程序发展,语言处理程序的发展经历了哪三个发展阶段。

    语言处理程序的发展经历了机器语言.汇编语言和高级语言三个发展阶段:机器语言是机器能直接识别的程序语言或指令代码:汇编语言是任何一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言:高级语言 ...

  10. 肖仰华 | 知识图谱研究的回顾与展望

    本文转载自公众号知识工场. 本文整理自2017年10月19日肖仰华教授在知识图谱前沿技术课程(华东师范大学站)所做的报告,报告的题目为<知识图谱研究的回顾与展望>. 大家好,很多人在对知识 ...

最新文章

  1. kubernetes关键特性和概述
  2. POJ 1840 Eqs 解方程式, 水题 难度:0
  3. 用数据驱动思想来设计游戏-读《游戏编程精粹1》
  4. 鲍姆-韦尔奇算法 数学推导
  5. 论文阅读笔记(一)【Journal of Machine Learning Research】Natural Language Processing (Almost) from Scratch(未完)
  6. LeetCode刷题(1)
  7. 寒门问题少年到计算机博士,硅谷穷小子是如何成为“创业之神”
  8. C++ 友元函数 友元类 friend class
  9. CAPL基础知识学习
  10. icem划分网格步骤_ICEM网格划分步骤
  11. c语言中的空字符常量,C ++中的空字符常量
  12. 五年从程序员到架构师 架构师进阶之路
  13. 世界超长经典名车荟萃
  14. word表格一行不对齐解决方法
  15. mysql sql语句 查询文章表,评论表(根据评论表文章评论次数排序查询出文章count(),group,left join)
  16. maven仓库如何加载瀚高数据库JDBC驱动
  17. 潍坊学院计算机系宿舍,关于表彰潍坊学院第十届大学生宿舍文化节先进集体和先进个人的决定...
  18. 端到端的框架DeepInf
  19. ipad电池饿死激活方法_询问操作方法:iPad电池寿命,批量调整照片大小以及同步大量音乐收藏...
  20. Paypal集成准备工作

热门文章

  1. Minecraft mod制作简易教程(五)——本地化和国际化
  2. 班级网站-前端网页技术精美完整源码HTML+CSS+JS
  3. 翻转课堂融入计算机课,【计算机基础论文】大学计算机基础翻转课堂的构建思路(共3745字)...
  4. 赵小楼《天道》《遥远的救世主》深度解析(6)为什么肖亚文说丁元英是魔是鬼都可以,就是不是人?
  5. python-flask 设置网页保留缓存静态文件时间
  6. 初识F5之BIGIP-LTM负载均衡
  7. 浅析Promise的then方法
  8. 设置/etc/fstab实现自动挂载
  9. BigDecimal,BigInteger 学习以及简单示例
  10. 向量相似度度量(二):EMD (Earth Mover's Distance)的MATLAB对照实现