为什么C语言能长盛不衰?
这个问题不好正向回答。
正向逻辑是“因为C语言好,所以长盛不衰”。但是大家都知道好东西未必就不可替代,甚至还有“劣币驱逐良币”的情况。C语言本身的好或坏,并不是长盛不衰的充分条件。
所以我想试着反向分析一下:当我们去试着替换C语言的时候,会发现什么。
1、Perl、Python、Lua等语言发明的动机
我们先看看其它容易被替代的语言,比如Perl、Python等。
Perl于1988年首次推出,目标是代替功能较弱的命令行工具。它的设计思路借鉴了Unix命令行工具如awk、sed。Perl作为完善的语言显然功能强大的多,可以胜任通用的编程任务。
Python于1991年推出,差不多是同时期的语言,目标也是做一种易学易用的、能够代替命令行编程的通用语言。它受早期ABC语言启发较多,同样也是受到Unix shell的影响。(显然那个年代的解释型语言都受shell影响很大,毕竟那时候写正经程序用C语言,写日常脚本用shell是默认选择。)
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语言能长盛不衰?相关推荐
- 【C语言教程】1、C 语言简介
C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的. 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 ...
- 1.1计算机和编成语言
一.C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的. 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发 ...
- 读《借助开源项目,学习软件开发》总结
读<借助开源项目,学习软件开发>总结 GitBook文章源地址:文章源地址 一.前言 准备条件:(1)一台能上网的电脑(2)首选系统Ubuntu,其次Windows 二.开始 (1)软件开 ...
- learn-with-open-source 如何进行开源社区的学习系列经典文章
:http://www.teamhost.org/projects/learn-with-open-source/wiki/Select-an-open-source-project 2. 开始¶ 2 ...
- 借助开源项目,学习软件开发 .
转载自:http://blog.csdn.net/bruce0532/article/details/7382673 由于不明原因,本文不是完整的... 其他某些部分:http://sbbs.me/v ...
- 借助开源项目,学习软件开发
1. 开始之前¶ 1.1. 这份文档的目标读者¶ 软件开发初学者¶ 这是一份面向软件开发初学者的文档,所谓初学者,可以定义为:学过的语言不超过2种,在已经学过的语言技能方面,能够完成课程上的大部分习题 ...
- 借助开源项目,学习软件开发——开始
借助开源项目,学习软件开发--开始 原文地址:点击打开链接 http://sbbs.me/view_article/506070b108158e166400001b 2. 开始 2.1. 学习软件开 ...
- 成长为软件教练的三千大道之一
本文主要介绍的是沿Java,分布式微服务架构,大数据与流计算,Linux OS与中间件,AI,这样一套功法,来讨论从一个刚毕业的理科生,如何修炼到软件教练这个层次.以及对更高层境界的畅想. 师傅领进门 ...
- 为什么C语言长盛不衰,永不会过时?
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 来源:整理自网络 推荐:https://www.xttblog.com/?p=5 ...
最新文章
- Bmu计算机,高性能定点DSP位处理单元BMU的 - 处理器/DSP - 电子发烧友网
- lua 循环语句 实例
- liunx 上get 不到url参数 java_URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致...
- oralce 笔记
- 2017美国专利榜:IBM称霸全球!华为、京东方榜上有名!
- LintCode 4.丑数
- 基于FPGA的GV7600驱动控制器设计,按照BT1120协议传输YCbCr数据
- [玩转UE4动画系统>基础篇] 之 什么是射线检测
- 服务器被ddos攻击?分析如何防止DDOS攻击?
- Qt Android 调用系统文件管理
- HM-SpringCloud微服务系列11.1【多级缓存的意义JVM进程缓存】
- 物联网趣谈-我接触的第一个设备
- The installation cannot continue as the installer file may be damaged. Download the installer file a
- 基于超星网页阅读的在线阅读的书籍下载软件,java实现。
- libyuv windows x64编译方法
- OSSIM安装使用教程(OSSIM-5.6.5)
- GitHub集成Circle CI(附 Circle CI 配置示例文件)
- [C++]完美立方(枚举)
- leetcode题目
- Ubuntu更新内核