C 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一。

到 2020 年 9 月为止,C 是仅次于 C 语言、Java 和 Python,位于全球第四的编程语言。根据最新的 TIOBE 索引,C 也是增长最快的语言。

近日,C 之父 Bjarne Stroustrup 在接受外媒访谈的时候,对 C 成功的关键和 它40 年来的发展历程进行了回顾。

C 的成功属于意料之外

1979 年,C 的创建者 Bjarne Stroustrup 开始着手开发这种编程语言,该语言最初被设计为对 C 语言对改进版,增加了基于面向对象编程的功能。

Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功,他说:“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标,就是有效的使用硬件,再加上强大的抽象机制,以及它根据来自实际使用情况的反馈进行谨慎的发展。”

构建 C 之初,Bjarne Stroustrup 希望用通信系统构建一个多计算机系统,该通信系统可以是共享内存,也可以是网络。他把重点放在了软件上,去编写底层的、接近硬件的代码。例如存储管理器,进程调度程序和设备驱动程序,以及分离软件组件,便于它们可以在运行使用更好的方式运行。

40 年前,是没有编程语言可以胜任这项工作的,Bjarne Stroustrup 对此花了很多心思。

现在,C 已经成为了最受开发人员欢迎的语言之一,巩固了全球的系统和服务。

C 11 使 C 成为一种新的语言

他从很早开始就意识到了这项工作不可能由他一个人来完成,但当时也只有 Bjarne Stroustrup 和他在贝尔实验室的几个同事全身心的投入其中。随着标准化进程加快,加入其中的人也越来越多,如今 C 标准委员会已有了 400 多名成员和更广泛的用户群体,他们共同努力影响着编程语言的发展方向。

1998 年是 C 正式标准化的一年,从那时起它就成了时间是最常用的编程语言之一,并至今都保持着这种地位。

Bjarne Stroustrup 说,其后 13 年到来的 C 11 为 C 的发展奠定了基础,他说:“C 11 使 C 感觉像是一种新的语言。”对并发的类型安全的支持是必不可少的,C 提供了相互支持的功能密集网络,例如用于编译时计算的函数、自动类型推导和可变参数模板的函数等等。

正如 Bjarne Stroustrup 所说,C 11 添加了一些新功能,这些功能可以使事情变得更简单,同时保持了兼容性和稳定性。不过,尽管 C 11 引入了一些使该语言更简单、更快、更具表现力的新功能,但它还是非常难掌握的。

Bjarne Stroustrup 坦言:“C 确实很复杂,要学会很好的使用它需要付出很多努力,但很多人想要的是更简单还具有更多功能的语言,并且不会破坏现有代码。”

对一种编程语言来说,最大的挑战之一是就决定采用和忽略哪些功能达成共识,这本身就需要大量的努力,花费很多时间去讨论。但即使是这样,也不是所有好的功能都可以被采用,必须添加真正对人们有帮助的东西。

C 流行几十年的秘诀

对于如何在几十年中保持 C 生存的秘诀,Bjarne Stroustrup 提到,“应该从小做起,阐明长期理想,并根据实际使用情况的反馈来发展。”

确实,C 走到今天已经超过 35 年了,今天的 C 比早期的 C 更加强大且富有表现力。但是,直到今天,它的一些简单程序仍在运行。

对于使用了数十年的系统来说,稳定性是一种非常重要的语言功能。事实上,许多早期的想法只有在 C 20 中才可用。Bjarne Stroustrup 说:“从一开始我就知道我无法构建理想的语言,所以我必须以渐进发展为目标。我不相信有完美的语言,这对语言本身和使用语言的人都有不同的标准。”

Bjarne Stroustrup 还补充道:“进化是应对不断变化的世界的挑战和融合新思想的必要条件。”

C 是一切的无形基础

C 是一种通用的编程语言,由于其强大的功能和灵活性而受到开发人员的青睐,这使其成为操作系统、Web 浏览器、搜索引擎(包括 Google)、游戏和商务应用程序等的理想选择。Bjarne Stroustrup 总结道:“如果有一个问题需要高效使用硬件并处理相当大的复杂性,那么C 显然是不错的选择。”

Bjarne Stroustrup 还提到,COVID-19 大流行阻碍了 C 下的两个迭代 C 20 和 C 23 的进展。未来他们会推出新功能,并在每三年发布一次修订的标准,C 17 和 C 20 也会按时交付。

然而,尽管 C 已经广泛流行,但 Bjarne Stroustrup 还是认为很难准确指出它的用途。他说:“在任何大型系统中,通常会在较低级别和对性能至关重要的部分中找到 C 。最终用户甚至系统的其他部分的开发人员通常都看不到系统的这些部分,因此有时我指的是 C 是一切的无形基础。”

来源:SegmentFault

https://segmentfault.com/a/1190000038196287

C 之父:C 的成功属于意料之外,C 11是转折点相关推荐

  1. C++ 的成功属于意料之外

    C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一. 到 2020 年 9 月为止,C++ 是仅次于 C 语言.Java 和 Python,位于全球第四的编程语言.根据最新的 ...

  2. 大咖 | “大数据之父”达文波特:成功的数据科学家不一定要有研究生学位

    大数据文摘作品 作者:托马斯·H·达文波特 2006年6月,乔纳森•高德曼(Jonathan Goldman)进入商务社交网站LinkedIn工作.作为斯坦福大学物理学博士,他醉心于无处不在的链接和丰 ...

  3. 加载静态文件,父模板的继承和扩展(2017.11.3)

    用url_for加载静态文件 <script src="{{ url_for('static',filename='js/login.js') }}"></scr ...

  4. vue2.0 子组件和父组件之间的传值

    Vue是一个轻量级的渐进式框架,对于它的一些特性和优点在此就不做赘述,本篇文章主要来探讨一下Vue子父组件通信的问题 首先我们先搭好开发环境,我们首先得装好git和npm这两个工具(如果有不清楚的同学 ...

  5. vue子父组件间传值

    父组件传值给子组件 props方式 父组件上1处声明传递的键并赋值,子组件2处使用props接收一下这个键就可以使用了.在父组件改变这个值的话子组件跟着一起响应,子组件改变这个值的话父组件不改变.次为 ...

  6. VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Vue是一个轻量级的渐进式框架,对于它的一些特性和优点在此就不做赘述,本篇文章主要来探讨一下Vue子 ...

  7. vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父

    今看到一篇很不错的vue组件传值文章,便于理解,遂作笔记-vue 通常页面的视图App.vue应为这样 一.父组件向子组件传值浏览器 1.建立子组件,在src/components/文件夹下新建一个C ...

  8. 欢乐的《教父》创作过程

    做一个接地气,不扭捏的,从玩家视角来给玩家带来好游戏的开发者! 作为<教父>的忠实书迷和影迷,作为游戏开发者,我会很好奇<教父>的书和电影都是怎么创作出来的,作者都经历了那些. ...

  9. GetParent、SetParent、MoveWindow - 获取、指定父窗口和移动窗口

    提示: SetParent 应该 Windows.SetParent, 因为 TForm 的父类有同名方法. //声明:{获取父窗口句柄} GetParent(hWnd: HWND): HWND;{指 ...

最新文章

  1. 在疯狂的前端世界,为什么选择学习React
  2. (转)nginx+iis实现负载均衡
  3. 大学计算机基础毕业论文操作步骤,大学计算机基础教学论文
  4. (网页)swiper.js轮播图插件
  5. Taro+react开发(95):问答模块02
  6. 统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法
  7. android上最好的linux终端,如何在带有Termux的Android上使用Linux命令行 | MOS86
  8. thinkphp模板常用的方法
  9. solr 使用记录 - solr dataimporter 定时任务
  10. JavaScript:Boolean对象
  11. 【目标检测 论文泛读】Fast R-CNN (一张表格对比 R-CNN SPP FRCN)
  12. [附源码]java毕业设计宾馆客房管理系统
  13. adobe怎么统计字数,在Adobe Reader中统计PDF中的文字数
  14. android 色值(全)
  15. KNN(K临近算法)的简单模拟实现
  16. 2021-03-13高级经理计算题:成本效益分析
  17. python处理word_Python操作word手册
  18. IP组播配置与管理——5
  19. Python代码优化:pyx编译pyd
  20. oracle_sod,sod: PDF.NET 的追求:代码的精简,开发、维护的简单与极致的运行效率!...

热门文章

  1. java 8 集合分组_Java 8:按集合分组
  2. 在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南
  3. 在JDK 10中不可变与不可修改
  4. java安全级别过高_Java应该是更高级别还是更低级别?
  5. 如何在Gradle多项目构建中管理依赖项
  6. CUBA平台–用于快速应用程序开发的开源Java框架
  7. JAXB和Log4j XML配置文件
  8. 本机速度文件支持的“纯” Java大数据存储
  9. gson json和类转换_带有GSON和抽象类的JSON
  10. @Deprecated新外观可能是什么?