华人澳洲中文论坛

热图推荐

    为何C言语不会过期?

    [复制链接]

    2023-3-15 18:29:37 71 0

    前言: 这篇文章的作者是赵岩教师,集体网站: http://zhaoyan.website/blog/index.php/2017/07/15/future/ 赵教师的网站上还有得多乏味的文章,倡议去走走。评估任何一门编程言语,都是招人骂的。永久是这样。就像是春寒料峭的时节, 街上穿棉袄和穿单衣的擦肩而过,单方一定是同时在心里泛起了两个字:“傻逼!”这个在心思学上有个专业的名字:叫做“二逼”景象!


    那我为啥还要做这个挨骂的事呢?作为《C言语点滴》《drop of knowledge of C++》书籍的作者,《C言语新思惟,第二版》的译者。
    我感觉我有责任零碎的引见一下这本言语,他的特征,还有他的将来。这个问题对得多刚刚踏入顺序猿这个行业的老手相当首要。
    由于他们有深深的耽忧,万一C言语就像Fortran,perl言语那样过期了怎么办?


    先上一个表,这个就是著名的TIOBE言语排行榜。
    目前它是一个最权威的一个言语盛行度的排行榜,从这个排行榜上看,你会失掉一个最直观的论断。
    Java和C都在降落,而降落的部份被第三名当前的言语所瓜分。


    (最新的TIOBE数据显示Java和C分别以17.8%和15.37%排在前两名)
    每次C言语的排名回升,都会让做硬件的敌人感觉是硬件的春季来了。。。
    对一切的编程言语,他们的最初的目的其实就是两种:进步硬件的运转效力和进步顺序员的开发效力。
    遗憾的是,这两点是不成能并存的!你只能选同样。在进步硬件的运转效力这一方面,C言语没有竞争者!举个简略的例子,完成一个列表,C言语用数组int a[3],通过编译当前变为了(基地址+偏移量)的形式。关于计算机来讲,没有运算比加法更快,没有任何一种办法比(基地址+偏移量)的存取办法更快。
    C言语曾经把硬件的运转效力紧缩到了极致。这类设计思想带来的问题就是易用性和平安性的缺失。例如,你不克不及在数组中混合保留不同的类型,不然编译器没有方法计算正确的偏移量。同时C言语关于过错的偏移量也充耳不闻,这就是C言语中臭名远扬的越界问题。
    C言语自夸的“置信顺序员”都是丑陋的说辞,它的独一目的就是快,要末飞速的运转,要末飞速的解体。C言语只关怀顺序飞的高不高,不关怀顺序猿飞的累不累。就是这样!
    这时候,会有敌人提出不同的意见了:你这么说C言语,让汇编言语情何以堪?
    然而汇编言语的编程效力,是开发周期不克不及忍耐的。
    汇编言语,你不会编啊!


    当初来看看那些非C的言语,他们的短处都在于进步顺序员的开发效力上。或者反对静态的列表,或者反对平安的列表。然而参加任何的两头层,参加任何的平安检修,它不成能比(基地址+偏移量+无检修)的形式更快。这个世界上不存在“开发容易,运转快”的言语,开发容易毕竟来源于对底层的一层一层又一层的包装。
    当初回答两个最广泛的问题:硬件这么廉价了,有须要让软件更快吗?有这类疑难的人大部份都是网吧的固定客户,他们了解的计算机只在电脑城,他们了解的计算只是游戏和播放硬盘中的小电影。不要玩个游戏开个挂就乐得不行不行的,别忘了还有全实景仿真,还有3D渲染,还有自动驾驶。
    人在开车的时分,每秒要采集60个不同的物体,而后按照这60个物体的不同组合和反应来做20个最首要的抉择。而后从这20多个抉择中选一个履行。所以就算用上最快的硬件,自动驾驶当初还不敢说能像人那样开车。就算是自动驾驶胜利了,下一步还要自动航行呢?由于咱们老早就预言了:你咋不入地呢!
    所以说:计算速度永久是不敷的!由于新的运用会愈来愈繁杂,越来也实时。对了!我还忘了一个更首要的限度:计算的能耗!NASA航行器上的CPU至多就是32位的,说出来你可能不信,国内空间站上没有一个CPU是64位的,我猜一个最次要的缘故是航天员不爱看硬盘小电影吧。
    此外一个盛行的疑难是:我能够创造一种一样快的言语,然而没有C言语那末多的坑。设法是能够的,并且还真巧有这个言语,真巧它的名字叫D言语,真巧没有太多的人用!这是由于一个根本的事实。当初有太多,太多太多的C代码,他们大部份都在正常任务,就像Linux, Window, MacOS,Unix,Vxworks。你没有看错,这些操作零碎的内核都是C,我虽然不肯定C在Window中所占的比例,然而我置信微软的人不会傻到用C#去整个改写一个操作零碎的内核。你想让这些人去用你的全新的言语,这就不是“有点”很傻,很无邪了!
    并且有些代码,咱们基本就不克不及改!NASA一个简略的5个CPU飞控软件编写终了后,要进行一种“全掩盖”测试。假如CPU A坏了会产生甚么?假如CPU A,B坏了呢?假如CPU A,C坏了呢。。。。?假如你违心,你能够做个简略的数学组合。测试终了后,别说重写,就算加个正文都不行。由于主管payload的大妈会十分庄重的质问你,为何你上报的货色数量减少了,然而品质没有减少?你需求和她具体的解释:硬件和软件是不同的,硬件是那种摸起来硬硬的货色,然而软件不是那种摸起来软软的货色。看着大妈鄙夷的眼神,这个时分你会十分后悔本人手欠参加的哪一行正文。你还别不妥真,这个是NASA的实在故事。
    哪为何C言语还降落这么多呢?很简略,有些工作自身就不是C言语的。我上学的时分还用C言语编过窗口界面呢?而后很快微软的人就推出了MFC,就是一大堆宏把底层的C windowAPI包装了起来。
    再起初这个技术也过期了。由于微软的人意识到,带有窗口的运用顺序说究竟不是C言语的本职任务,再这么一层一层包上来就有露馅的风险,因而他们创造了一个全新的言语C#来担任这个工作。
    Java也是这样,凸起网络,易用,平安,跨平台。无论是Java, c#仍是python, 他们都无意避开进步硬件的运转效力这个问题,由于这个问题上没方法和C竞争,也无奈撼动Linux, Unix,GNU tool这些已有C代码的地位。剩下的就只是进步顺序员的开发效力上大作文章。这对C言语是坏事,把本人不善长的货色去掉,让本人跑的更快!
    伴有着嵌入和实时零碎的衰亡,AI,机器人,自动驾驶等。这些都是C言语的中心运用,并且在这类运用下面,C言语没有竞争者。所以我觉得C言语会不乱在本人中心的运用中,并开始逐渐上升。
    然而Java言语我集体不乐观。小型和灵敏性上,Python更胜一筹。一行python代码后,你基本不知道本人仍是不是duck类型?平台畛域,每个平台都推出本人专属的言语。Windows会持续反对C#,苹果偏爱Swift, Android推出Kotlin,Google用go。Java声称本人能够自在到每家做客,然而无论是到谁家,都会发现客厅外面坐着一个亲儿子,这个时分本人这个干儿子多多少少有点为难。所以我猜测,最初Java会不乱在对跨平台有严格要求的,大型非实时运用上。
    最初说点闲话,C++不会淘汰C言语。有了对象后你会发现再俭朴的对象也耗损资源,并且有了对象当前,老是情不自禁的去想承继这个事,一但承继完成了,你会发现承继带来的费事远超过你的想象。Java的创造人James被问到假如能够重新设计Java言语的话,第一个要做甚么事?他说:“去掉对象”!作为一个已婚,有两个孩子的顺序猿,我感同身受。假如大家感兴致,我能够再写一个博客,聊聊C++和C的实在区分所在。
    全世界只需求五台电脑 -IBM开创人
    640K内存足够了 -微软开创人
    没须要在家里用电脑-DEC开创人
    假如再有人对你说C言语曾经过期了,最佳本人思考一下,能求真最佳,假如不克不及,最少要做到存疑。

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    注册会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题28

    帖子36

    积分168

    图文推荐