这个问题不好正向回答。

正向逻辑是“因为C语言好,所以长盛不衰”。但是大家都知道好东西未必就不可替代,甚至还有“劣币驱逐良币”的情况。C语言本身的好或坏,并不是长盛不衰的充分条件。

所以我想试着反向分析一下:当我们去试着替换C语言的时候,会发现什么。

1、Perl、Python、Lua等语言发明的动机

我们先看看其它容易被替代的语言,比如Perl、Python等。

Perl于1988年首次推出,目标是代替功能较弱的命令行工具。它的设计思路借鉴了Unix命令行工具如awk、sed。Perl作为完善的语言显然功能强大的多,可以胜任通用的编程任务。

Python于1991年推出,差不多是同时期的语言,目标也是做一种易学易用的、能够代替命令行编程的通用语言。它受早期ABC语言启发较多,同样也是受到Unix shell的影响。(显然那个年代的解释型语言都受shell影响很大,毕竟那时候写正经程序用C语言,写日常脚本用shell是默认选择。)

左:Perl之父 右:Python之父

Lua大约在1994年推出,它的最初设计动机是为了搞研究写论文,主要目标是实现一种高性能堆栈式虚拟机,结果出乎意料的好,后来逐渐发展成一门通用语言。

2、这些语言凭什么立足

语言出现只是第一步,这些语言在众多语言之中能够立足、被大家所喜爱,主要凭借的是“在日常编程时的独特优势”,因为好用所以吸引很多人来用。一旦不好用就会丧失生命力。Python现在发展得这么好,离不开从1.x到2.x、从2.x到3.x的蜕变,也离不开每一次IT发展的风口。Python至少占对了几次风口:快速网站开发(Web框架),爬虫、大数据和AI等等。

如果某种语言在广泛比较中优势不大,还可以退一步,进入某个特殊领域立足。例如立足数据分析的R语言,立足寄生于其它系统的Lua等等。不管它们广义上是不是好语言,至少在特定领域它们非常能打。

大体来看,很多语言都是靠自身优势吸引大量用户,然后再靠用户积累出成熟的类库/技术栈,从而逐步立足的。

3、C语言立足的基础

相比其他语言,C语言并不是靠易学易用、或者在特定领域的独特性立足的。

C语言当下的地位不是在竞争中胜利而获得的,而是根本就没遇到过什么挑战。它和C++还不一样,C++还经常遇到争议,但是C语言很少有争论,或者说很难争论起来。

回归C语言的具体语法。如果不考虑虚拟机,直接用底层功能编程,我们实在想不出整数类型除了用按字节数归类为char、short、int、long,还能怎么分类。

人们也想不出一种比指针更好的,表示引用的方案;人们想不出数组还能怎么写;人们也想不出结构体struct里除了变量,还要加点什么才能锦上添花而不是画蛇添足。

人们想出了无数种内存管理方法,但是基本的malloc和free依然没被代替;函数调用和递归还是用调用栈实现,连C#也是一样。

总之,我觉得确实如其它答主所说,C语言与现代计算机架构密切结合,代表着人们对于计算机系统的认识水平。

从某个角度看,“C语言长盛不衰”是一件坏事。代表着人类的智慧因为各种原因暂时被锁定在这个圈子里。虽然更高层的技术有快速发展,但在C语言活跃的底层,暂时没有突破。

不排除未来遇到某种契机,C语言被另一种技术取代,那可能代表着人们对习以为常的计算机系统有了突破性的认知进步。

为什么C语言能长盛不衰?相关推荐

  1. 【C语言教程】1、C 语言简介

    C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的. 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 ...

  2. 1.1计算机和编成语言

    一.C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的. 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发 ...

  3. 读《借助开源项目,学习软件开发》总结

    读<借助开源项目,学习软件开发>总结 GitBook文章源地址:文章源地址 一.前言 准备条件:(1)一台能上网的电脑(2)首选系统Ubuntu,其次Windows 二.开始 (1)软件开 ...

  4. learn-with-open-source 如何进行开源社区的学习系列经典文章

    :http://www.teamhost.org/projects/learn-with-open-source/wiki/Select-an-open-source-project 2. 开始¶ 2 ...

  5. 借助开源项目,学习软件开发 .

    转载自:http://blog.csdn.net/bruce0532/article/details/7382673 由于不明原因,本文不是完整的... 其他某些部分:http://sbbs.me/v ...

  6. 借助开源项目,学习软件开发

    1. 开始之前¶ 1.1. 这份文档的目标读者¶ 软件开发初学者¶ 这是一份面向软件开发初学者的文档,所谓初学者,可以定义为:学过的语言不超过2种,在已经学过的语言技能方面,能够完成课程上的大部分习题 ...

  7. 借助开源项目,学习软件开发——开始

    借助开源项目,学习软件开发--开始 原文地址:点击打开链接  http://sbbs.me/view_article/506070b108158e166400001b 2. 开始 2.1. 学习软件开 ...

  8. 成长为软件教练的三千大道之一

    本文主要介绍的是沿Java,分布式微服务架构,大数据与流计算,Linux OS与中间件,AI,这样一套功法,来讨论从一个刚毕业的理科生,如何修炼到软件教练这个层次.以及对更高层境界的畅想. 师傅领进门 ...

  9. 为什么C语言长盛不衰,永不会过时?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 来源:整理自网络 推荐:https://www.xttblog.com/?p=5 ...

最新文章

  1. Bmu计算机,高性能定点DSP位处理单元BMU的 - 处理器/DSP - 电子发烧友网
  2. lua 循环语句 实例
  3. liunx 上get 不到url参数 java_URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致...
  4. oralce 笔记
  5. 2017美国专利榜:IBM称霸全球!华为、京东方榜上有名!
  6. LintCode 4.丑数
  7. 基于FPGA的GV7600驱动控制器设计,按照BT1120协议传输YCbCr数据
  8. [玩转UE4动画系统>基础篇] 之 什么是射线检测
  9. 服务器被ddos攻击?分析如何防止DDOS攻击?
  10. Qt Android 调用系统文件管理
  11. HM-SpringCloud微服务系列11.1【多级缓存的意义JVM进程缓存】
  12. 物联网趣谈-我接触的第一个设备
  13. The installation cannot continue as the installer file may be damaged. Download the installer file a
  14. 基于超星网页阅读的在线阅读的书籍下载软件,java实现。
  15. libyuv windows x64编译方法
  16. OSSIM安装使用教程(OSSIM-5.6.5)
  17. GitHub集成Circle CI(附 Circle CI 配置示例文件)
  18. [C++]完美立方(枚举)
  19. leetcode题目
  20. Ubuntu更新内核

热门文章

  1. win7桌面不能自动刷新
  2. Arcpy获取道路交叉口
  3. React中标签字符串强制转html解析的方法
  4. 《大众科学》杂志评出世界十大科学才子
  5. 深圳入户计算机一级证加分吗,2021年深圳积分入户,哪些职称证书可以加分?...
  6. Python《植物大战僵尸》代码实现:植物卡片选择和种植
  7. ffmpeg——在Windows平台上面使用的一个坑
  8. labview学习-for循环、while循环、循环自动索引、移位寄存器
  9. cocos2d-x位图字体生成工具Bitmap Font Generator的使用(内含命令行)
  10. linux中单引号、双引号、反引号的作用