找回密码
 立即注册
查看: 1165|回复: 20

现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?

[复制链接]
发表于 2021-3-23 10:32 | 显示全部楼层 |阅读模式
现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?
发表于 2021-3-23 10:33 | 显示全部楼层
只要操作系统还是用C来写,C就永远不会被淘汰,这个问题想都不要想。国内的C岗位主要是做内核相关的开发,以及一些嵌入式的需求,当然嵌入式的也有用C++的。
C++不会被淘汰的原因之一是C不会被淘汰,因为C++抱紧了C的大腿,C++最基础的定位就是better C。也有一些领域是C++专属的,比如说游戏引擎、高频交易。
国内C++的招聘需求其实很大的,看这里:
现在的市场对 C++ 的需求大吗?C++会不会招不到人?作为面试官我没这种感觉,每年都参加校招社招,单从校招来说,只要大学里面有5%的人学C++,我们就能招到。
会不会学C++的人连5%都不到呢?不会,C++有它独特的魅力,喜欢的人很喜欢。可以参看:
学C++是怎样一种体验?再说,如果你真的会C++,就算你不找C++的工作,也会有buff加成,因为会C++再学其它语言很容易。
发表于 2021-3-23 10:34 | 显示全部楼层
刚刚看了一 Uncle Bob Martin 的视频 The Future of Programming,谈谈编程语言。
目前的状况是,语言越来越多(各种框架、库也是),但我们似乎并不满足我们自己的语言。而事实上,1960年代三大范式(函数、对象、结构化)出现以后,语言本身并没有本质的变化,把1968年的Cobol程序员抓到今天,等他(她)从惊恐中缓过来以后,给个intelligent J他们还是能开始编程。
变化的是程序员。1970年以后,程序员(cs专业毕业生)每5年增长一倍,也就是说,市场上永远有一半的程序员经验不足5年。好的教师数量根本跟不上培训他们。
为了“管住”这些人,各种语言特性开始出现,更不用提“项目经理”的引入产生的干扰。但无论语言特性如何绚丽,最终还是 assign、if、while,这些在1960年代的语言都可以处理。
每当20几岁的程序员工作20年以后,他们也将终于能够理解1960年代前辈的智慧,然而他们终究是少数。所以 c、lisp还在,但新语言仍然不断出现。程序员构成成分和比例的原因。


而我个人认为精力应该放在用语言实现的软件、应用、功能上,而非隔几年就重置一次用新语言的新特性来重写一样的功能。
发表于 2021-3-23 10:36 | 显示全部楼层
因为现在这个时代,天天唱衰C/C++的人,熟练地使用现代语言,高效地调用着那些食古不化的C/C++开发者所提供的基础设施和功能,做出各种漂亮的软件,然后鄙夷地看了一眼下面的那群老顽固:何不食肉糜?
————————
以上半玩笑半认真吧。下面说点儿有营养的。
一些同学可能出于自己学习的感受,另外一些可能是根据别人(包括一些业界大佬)所说的话,认定C++是一个混乱不堪的语言。
的确,这话在某个角度上没错。Rust等在这个意义上进步很大也没错。
但是我想说一个事情。日本前首相鸠山有一句名言,那就是当记者问他为啥上台之后很多竞选时作出的承诺都没有兑现的时候,他回答说因为那时作为在野党站着说话不腰疼。(其实原文更加接近“不当家不知柴米油盐贵”)
这是个笑话,也是实话。
C++变成现在这个样子,固然有语言本身设计的问题,但是更多的是因为其肩负了太多,跨度太大,要满足各种各样的需求。
其实,成熟的开发商,没有人会去试图在一个应用当中去使用C++的所有特性。你所看到的混乱,只是因为你把它作为一个整体去看,以为任何特性在任何时候都是必要的。(更不要说那些其实只是听别人这么说的)
Rust等之所以现在能够那么美丽,也是因为其是个在野党,给你看了它最擅长的一面。等到它真的挑了大梁,会发展成啥样,真不好说。
复杂的是这个世界本身。混乱的也是这个世界本身,以及人心无穷无尽的欲望。
其实问题当中的“越来越多”,恰恰是反映了这个世界的复杂。要么用一个自身复杂度足够高的语言,如C++;要么就要细分应用,各自使用专用语言才能起到简化作用。
没有任何偏向的意思。期待能有更好的解决方案。作为C++坑里爬出来的,表示学习Rust易如反掌。
发表于 2021-3-23 10:43 | 显示全部楼层
不知道题主是做什么的呀?对c和c++如此深恶痛绝。
每个语言都有人吐槽,但是吐槽到要淘汰,这是多大仇?
C 系统层有依赖,我记得在学校搞51单片机的时候,连系统都没有,其他语言都没有上场的机会。
C++ 在抽象复杂的同时支持很强的性能。支持类继承,模板,还能兼容c本来也是强大的代名词了。
还有最重要的因素,并不是所有的开发者都讨厌到放弃的程度。至少我还是很喜欢c++,愿意看着他进步,或者忍受一些不足。不抛弃,不放弃,不抱怨。。。
如果一个公司把c++玩转,那么它开发的产品,理论上可以在功能复杂性,和性能上,吊打所谓的新语言。
只是很多场景不在意极致的性能了。
发表于 2021-3-23 10:43 | 显示全部楼层
大家对c艹反响剧烈,看来都是有故事的哈哈哈
不能只看表象,不看本质。c艹份额下滑并不是用的人变少了,只不过是其他语言相对于c艹入门门槛更低,在这一波市场繁荣期,新用户变得更多了而已。等到开始退潮的时候,最先倒下也也是这些新用户,c艹的基本盘不会收太大影响,写的了c艹没道理写不了其他的,为了节约人力,向下兼容(难度)也是没问题的。所以说不定可以搞一个c艹指数,看c艹的市场份额来预测经济状况。等到大潮退去了,谁在裸泳就看得出来了
发表于 2021-3-23 10:52 | 显示全部楼层
很多人都在从语言特性上说,都没有说在根本问题上。
没有什么是不能替代的,c,cpp,乃至汇编都能替代,可以分分钟钟重新设计GNU汇编,重新对应机器指令(甚至哪种机器指令都不敢说自己是万古长存的老大,RISC、CISC就可以一定程度上说明问题,再甚至,计算机架构都不敢吹这个牛,冯诺依曼结构,哈佛结构,到猴年马月将会到来的量子计算机也能说明一定问题)。PL发展至今,c语言在特性上真没有什么优势,毛病倒是不少。
什么c可以操作底层,这也根本不是问题,能不能操作底层是编译器作者赋予的,不是c语言自己长出来的,且不说拥有这种能力的语言,C既不是第一个也不是最后一个,就是给人感觉最”高层“的动态类型语言你就真觉得做不成可以操作底层硬件(先别管解释器咋来的,只说操作硬件)?
根本原因有一位大猪说得好,是根深蒂固,或者说是树大根深。
所有嵌入式IC,硬件厂商都在芯片出厂的时候提供rust编译器,Linux底层用rust重写(Linux真的太树大根深了,它是c世界最粗,最硬,最臭的一棵树),各种rtos都有rust版本,那么c就被替代了,我第一个和c say goodbye。但是这种代价谁能接受?
发表于 2021-3-23 11:02 | 显示全部楼层
其实C和C++要分开说。
C在自己的领域里是独一份,连竞争者都没有,完全的垄断市场。只要涉及底层的东西,C就是唯一选择,只要涉及算法,C还是独一份,到了编译器,还是C,还有什么单片机等等,简单的说,除了企业级的编程,其他都是C。
在编程语言里面,C是Alpha,C是Omega,自从C诞生以来,其他语言都是围绕着怎么让C更适合某个方面而努力的,从来没有一个语言敢幻想自己能取代C。
而C++,主要是因为大腿抱得好,自第一天就定位成C的小跟班,所以还有饭吃。
发表于 2021-3-23 11:05 | 显示全部楼层
C/C++会不会被时代淘汰?这个问题跳过了一步,关键是这个问题:
C/C++有哪些其它语言难以代替的特殊之处?
1、对实现细节的控制粒度

一般我们常说:C/C++具有较高的执行效率。其实这句话不是特别准确,有时候它们并不一定效率高。换句更恰当的话说:
C/C++,特别是C语言,控制粒度很细,与机器语言有着相当稳固的对应关系。
以C语言的if...else为例,它的汇编代码如下图所示。
参考链接:https://blog.csdn.net/weixin_34239592/article/details/91892372
也就是说,高手可以通过C语言写出完全按照自己的想法运行的程序。从C代码可以直接对应到汇编语言,如果你对C语言有足够的了解,代码在运行时实际做了哪些事情,是相当明确的。
C/C++甚至能指导编译器哪些变量优先放在寄存器,哪些函数内联,哪些变量要避免多线程抢夺,均可以进行非常细致的控制。
与此相反,Java、Python等高级语言在执行时会跨越很多层次。高级语言源代码 ->中间语言 -> 虚拟机执行 -> 分解执行流程 -> 实际执行的一系列操作。这其中的每一步都不是那么简单,最普通的一句代码:
c  = a+b
会因为a或b的元方法,产生无数的执行可能性。除非仔细分析每一个细节,否则编程者对于最终代码的执行逻辑是缺乏控制力的,也不可能进行汇编级别的优化。
总结来说,C/C++,特别是C语言,有着极为精细的控制粒度,而更高级的现代语言一般无法进行如此细致的控制。
2、由于极高的控制力,在某些领域难以被代替

需要程序员压榨每一分硬件性能的地方并不多,特别是现在的服务器核心数很多,只要能充分利用多核心,每个核心没有完全挖掘也是可以接受的。
一般来说,需要压榨硬件潜力的领域有:
1、操作系统。因为每个人每天都要用操作系统,操作系统(特别是内核和驱动层),对优化要求非常高。例如如果对Windows磁盘读取优化1%,几乎全世界电脑用户都会受益1%。
2、游戏引擎。游戏是硬件进步的原动力,大型游戏开发商总是在尽力压榨每一分硬件性能,在60帧以上无止境优化视觉效果、动态效果。C++一直以来都是编写游戏引擎的首选语言,而且几乎是唯一语言。(游戏开发可以用各种技术,但引擎本身一般是用C++编写)
3、嵌入式程序。由于单片机的硬件性能较弱,存储空间极小,必须编写专用的程序代码,使用高级语言可能导致延迟过大,或容量超出限制。未来“万物互联”的潮流,可能会引发超微型嵌入式系统的再度复兴。
4、加密与安全方向。大部分加密/解密模块,与操作系统一样,每个人每天都会频繁使用,所以用C/C++来深入优化是必须的;另外,很多软件硬件漏洞,例如常见的内存溢出漏洞,也需要编写很精巧的C/C++代码才好利用漏洞,才能编写木马或者直接入侵系统。


总之,C/C++的不可替代性是由它本身的特点决定的。而且目前来看,这种不可替代性在未来几年、几十年也依然不会有变化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-3-23 11:10 | 显示全部楼层
那么多编译器,高性能网络库,游戏库等都是用c++写的,所以c++淘汰的前提是,找到了重新实现这些东西的替代品,并且性能更好,我想短期内应该是不会实现的;
至于c语言,只要操作系统还在,内核还在,是不会淘汰的;
所以综合看来c和c++其实是很多其他语言的前置条件,如果哪天c和c++被淘汰了,那么编程界一定是出现了划时代的变革。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 16:49 , Processed in 0.097727 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表