C语言学习必看 | C语言永远不过时,真的吗?

2019-05-30 16:54 浏览 2451人

对于C语言,我们理工科或从事开发的人,可谓有一种特殊的情结,被指针数组折磨的废寝忘食,还得靠计算机等级证书,学了这么多年之后,尤其对于从事JAVAPHP开发的小伙伴而言,C仿佛真的没用,已经跟不上时代技术的发展了,早就过时了,这是真的吗?

 

C语言把硬件的运行效率压缩到了极致

 

对所有的编程语言,目的其实就是两种:提高硬件的运行效率和提高程序员的开发效率。遗憾的是,这两点是不可能并存的!你只能选一样。在提高硬件的运行效率这一方面,C语言没有竞争者!举个简单的例子,实现一个列表,C语言用数组int a[3],经过编译以后变成了(基地址+偏移量)的方式。对于计算机来说,没有运算比加法更快,没有任何一种方法比(基地址+偏移量)的存取方法更快。

 

C语言易用性和安全性的缺失

 

C语言已经把硬件的运行效率压缩到了极致这种设计思想带来的问题就是易用性和安全性的缺失。例如,你不能在数组中混合保存不同的类型,否则编译器没有办法计算正确的偏移量。同时C语言对于错误的偏移量也不闻不问,这就是C语言中臭名昭著的越界问题。

 

现在来看看那些非C的语言,他们的长处都在于提高程序员的开发效率上。或者支持动态的列表,或者支持安全的列表。但是加入任何的中间层,加入任何的安全检验,它不可能比(基地址+偏移量+无检验)的方式更快。这个世界上不存在“开发容易,运行快”的语言,开发容易毕竟来源于对底层的一层一层又一层的包装。

 

C语言能被替代吗?

 

我可以发明一种同样快的语言,但是没有C语言那么多的坑。想法是可以的,而且还真巧有这个语言,真巧它的名字叫D语言,真巧没有太多的人用!这是因为一个基本的事实。现在有太多,太多太多的C代码,他们大部分都在正常工作,就像Linux, Window, MacOSUnixVxworks。你没有看错,这些操作系统的内核都是C,我虽然不确定CWindow中所占的比例,但是我相信微软的人不会傻到用C#去全部改写一个操作系统的内核。你想让这些人去用你的全新的语言,天真了!


 

而且有些代码,我们根本就不能改!NASA一个简单的5CPU飞控软件编写完毕后,要进行一种“全覆盖”测试。如果CPU A坏了会发生什么?如果CPU AB坏了呢?如果CPU AC坏了呢...?如果你愿意,你可以做个简单的数学组合。测试完毕后,别说重写,就算加个注释都不行。因为主管payload的大妈会非常严肃的质问你,为什么你上报的东西数量增加了,但是质量没有增加?你需要和她详细的解释:硬件和软件是不同的,硬件是那种摸起来硬硬的东西,但是软件不是那种摸起来软软的东西。看着大妈鄙夷的眼神,这个时候你会非常后悔自己手欠加入的哪一行注释。你还别不当真,这个是NASA的真实故事。

 

无论是Javac#还是python, 他们都有意避开提高硬件的运行效率这个问题,因为这个问题上没办法和C竞争,也无法撼动LinuxUnixGNU tool这些已有C代码的位置。剩下的就只是提高程序员的开发效率上大作文章。这对C语言是好事,把自己不善长的东西去掉,让自己跑的更快!

 

伴随着嵌入和实时系统的兴起,AI,机器人,自动驾驶等。这些都是C语言的核心应用,而且在这种应用上面,C语言没有竞争者。所以我感觉C语言会稳定在自己核心的应用中,并开始逐步回升。

 

如果你看到这里,还什么都没记住。那就只记住一点:没人能预测未来。

 

全世界只需要五台电脑 IBM创始人

 

640K内存足够了 -微软创始人

 

没必要在家里用电脑-DEC创始人

 

结语没有人可以预测未来,C语言过时与否,时间会给出最终的答案。但目前而言,随着Linux、人工智能的应用日渐广泛,C语言的作用仍不可小觑!