只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  现在的编程语言越来越多,为什么C和C++还没有被现在的时代淘汰呢?


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

发布时间:2019-09-02 15:23:58  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
因为其他语言都是渣渣.
现在的编程语言越来越多,为什么C和C++还没有被现在的时代淘汰呢?

因为其他语言都是渣渣.

“杀鸡焉用牛刀“,在编程领域有同样的道理。

对于一些小打小闹、需要灵活多变的应用,用“牛刀”式的C/C++编程语言可能会显得有些笨拙,不灵活,于是出现各种各样的“杀鸡“式的编程语言。"杀鸡"式的编程语言只在"杀鸡"领域占据优势,是无法取代"牛刀"式的编程语言C/C++,如果把"杀鸡"式的程序语言发展成可以"宰牛"的程度,其笨拙程度可能不会亚于C/C++。

在编程领域,很多编程语言只是过客,只有C/C++是极少数的属于“主人”式的程序语言。

编程需要耐心,有人把软件设计过程 形象地比喻成 ”孕妇的十月怀胎“,急不得,否则,就是"早产儿",后天问题多多。早期的软件设计,应该没有现在普遍存在的浮操、急功近利行为。C/C++编程语言是早期、少有、天才的杰作,后来出来的大量编程语言,根本无法与其相提并论,更别说替代了。

不同语言占据不同的生态位,有些语言还占据多个生态位。

这么多年来,在系统语言这个生态位上向c++发起挑战的也就只有rust吧。

但桌面应用、企业应用这俩生态位,c++就失去了很多地盘。

web生态位c++很早就败北了。

智能手机,c++也早早完蛋了。


这个很简单,用你喜欢的语言把linux重写一遍,然后内核不支持C语言的ABI导致这个系统无法用C语言来开发软件,你就迈出了淘汰C/C++的第一步。

C语言流行起来也是因为操作系统选了C语言,不然当年为什么不用Pascal呢,不就是换了个语法的同一个语言吗。C跟Pascal之间互相转换的程序,在只使用Windows API的前提下(用到的库开源也算,一起转),甚至一天就能写出来。别的语言都还没这么容易呢。

c++写的还挺爽的,语法我喜欢,性能也很好,除了要啥没啥之外

真的把C和C++淘汰掉了,其它编程语言瞬间回到开局一个碗,主线任务当皇帝的剧情里……

大家对c艹反响剧烈,看来都是有故事的哈哈哈


不能只看表象,不看本质。c艹份额下滑并不是用的人变少了,只不过是其他语言相对于c艹入门门槛更低,在这一波市场繁荣期,新用户变得更多了而已。等到开始退潮的时候,最先倒下也也是这些新用户,c艹的基本盘不会收太大影响,写的了c艹没道理写不了其他的,为了节约人力,向下兼容(难度)也是没问题的。所以说不定可以搞一个c艹指数,看c艹的市场份额来预测经济状况。等到大潮退去了,谁在裸泳就看得出来了

那么多编译器,高性能网络库,游戏库等都是用c++写的,所以c++淘汰的前提是,找到了重新实现这些东西的替代品,并且性能更好,我想短期内应该是不会实现的;

至于c语言,只要操作系统还在,内核还在,是不会淘汰的;

所以综合看来c和c++其实是很多其他语言的前置条件,如果哪天c和c++被淘汰了,那么编程界一定是出现了划时代的变革。

很多人都在从语言特性上说,都没有说在根本问题上。

没有什么是不能替代的,c,cpp,乃至汇编都能替代,可以分分钟钟重新设计GNU汇编,重新对应机器指令(甚至哪种机器指令都不敢说自己是万古长存的老大,RISC、CISC就可以一定程度上说明问题,再甚至,计算机架构都不敢吹这个牛,冯诺依曼结构,哈佛结构,到猴年马月将会到来的量子计算机也能说明一定问题)。PL发展至今,c语言在特性上真没有什么优势,毛病倒是不少。

什么c可以操作底层,这也根本不是问题,能不能操作底层是编译器作者赋予的,不是c语言自己长出来的,且不说拥有这种能力的语言,C既不是第一个也不是最后一个,就是给人感觉最”高层“的动态类型语言你就真觉得做不成可以操作底层硬件(先别管解释器咋来的,只说操作硬件)?

根本原因有一位大猪说得好,是根深蒂固,或者说是树大根深。

所有嵌入式IC,硬件厂商都在芯片出厂的时候提供rust编译器,Linux底层用rust重写(Linux真的太树大根深了,它是c世界最粗,最硬,最臭的一棵树),各种rtos都有rust版本,那么c就被替代了,我第一个和c say goodbye。但是这种代价谁能接受?

之前做业务有一个单点,东西不多,但是需要高性能和跨语言的强一致性,怎么办,上cpp吧

刚刚看了一 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还在,但新语言仍然不断出现。程序员构成成分和比例的原因。


而我个人认为精力应该放在用语言实现的软件、应用、功能上,而非隔几年就重置一次用新语言的新特性来重写一样的功能。

我一个C++的铁粉都快弃坑了。发张图片以表忠心。以前爱用这图片,现在经常在想要不要弃疗了。

标准委员会都在鼓捣些什么鬼东西?98到13年,标准15年之间原地踏步,然后到了最近几年,又突然飞快地出标准,甚至上一个标准出的东西根本还没有得到市场反馈、工程应用,下一个标准竟然又给废除了。况且新增的全是些语法细节,对工程应用上的帮助微乎其微,已经2019年了,C++ 标准库里面连个 socket 都没有,你能相信吗。C++的语法细节还不够多,隐晦的东西还不够多吗?我看了 Effective Modern C++里面,光是 auto + decltype 就说了 47 页,我只能说那些说用 auto 用得爽的人,恐怕没几个能完全明白自己写的 auto 到底推导出来是个啥类型。其实可怕的还不是能不能明白,而是 auto 这种东西其实就是在鼓励程序员根本不用去搞明白。

C++11要出来的时候,大家喊的是王者归来。从语言角度看确实王者无疑,但是标准库是彻底的青铜。Java、C#在语言层面未必比C++优秀到哪里去,但是人家的标准库是军火级别的,可以直接拉出来打仗。2019了C++标准库还只能写控制台黑窗口的学生成绩管理系统。确实C++的第三方库很多,但是各个库的框架、风格大相径庭,冗余严重,从工程集成和心理接受的角度都有负担。举个string的例子,标准库有个string、stingview,mfc有cstring,qt有qstring、qconststring,webkit有4-5种string,分别来自cf、wtf、webcore、webkit,wxwidgets有string,folly有string,com有bstr、ccombstr、_bstr_t,一个复杂的工程光是处理这些string就要多处不少事,问题就出在:标准库库太弱。Java、C#应该不需要操心这么多string的事吧。

总结一下:

1. C++语法太复杂,语言机制已经够牛B,门槛已经非常高,要熟练掌握的成本已经非常高了,然而新标准还在飞速地往更复杂的方向推进。

2. 标准库太弱,要在现实当中做项目,得依赖很多的第三方库,或者得自己撸,要自己做这些库的构建集成、兼容,多出来很多业务之外的成本。然而标准库的补充差不多10年踏一步。

一个项目,几个Java、C#初级程序员不服就是干,代码一把梭,分分钟项目上线了,C++这边的精英老手可能还在编译第三方库的1000行的模板错误提示里焦头烂额。

我曾经沉浸在C++语言的强大中,痴迷于模板元编程、预处理元编程的神奇,谁说C++不好就去杠谁。但是工作多年后,等那些奇巧淫技的新鲜感殆尽,如今只剩下稳扎稳打做项目的云淡风轻,可以说现在对它的看法是更现实、更客观的。

现在我只觉得标准委员在把 C++搞废的路上越走越远,无论是语言设计、工程实践上都比 C++优秀的语言在出现,rust/go 在PC、Server领域快速崛起,oc、swift、java、kotin这些在移动端几乎占有了全部市场,甚至连浏览器内核这种铁打的地盘都快被人抢走了。C++在落后,无论是语言本身的进化还是市场占有率,已经在淘汰的过程中。

其实C和C++要分开说。

C在自己的领域里是独一份,连竞争者都没有,完全的垄断市场。只要涉及底层的东西,C就是唯一选择,只要涉及算法,C还是独一份,到了编译器,还是C,还有什么单片机等等,简单的说,除了企业级的编程,其他都是C。

在编程语言里面,C是Alpha,C是Omega,自从C诞生以来,其他语言都是围绕着怎么让C更适合某个方面而努力的,从来没有一个语言敢幻想自己能取代C。

而C++,主要是因为大腿抱得好,自第一天就定位成C的小跟班,所以还有饭吃。

一个c++程序员 很平静地点了进来。很平静地回答了该问题,是不是很能说明问题了。


我是服务端程序员,以前大型服务端c++才能干好,很多老代码,只为节省内存各种绞尽脑汁。现在呢。200多g内存服务器都被大量使用了。

不是c++被淘汰了,是很多c++程序员被淘汰了。



老板已经不需要去节约内存,硬盘了。

老板只需要节约程序员。

因为现在这个时代,天天唱衰C/C++的人,熟练地使用现代语言,高效地调用着那些食古不化的C/C++开发者所提供的基础设施和功能,做出各种漂亮的软件,然后鄙夷地看了一眼下面的那群老顽固:何不食肉糜?

————————

以上半玩笑半认真吧。下面说点儿有营养的。

一些同学可能出于自己学习的感受,另外一些可能是根据别人(包括一些业界大佬)所说的话,认定C++是一个混乱不堪的语言。

的确,这话在某个角度上没错。Rust等在这个意义上进步很大也没错。

但是我想说一个事情。日本前首相鸠山有一句名言,那就是当记者问他为啥上台之后很多竞选时作出的承诺都没有兑现的时候,他回答说因为那时作为在野党站着说话不腰疼。(其实原文更加接近“不当家不知柴米油盐贵”)

这是个笑话,也是实话。

C++变成现在这个样子,固然有语言本身设计的问题,但是更多的是因为其肩负了太多,跨度太大,要满足各种各样的需求。

其实,成熟的开发商,没有人会去试图在一个应用当中去使用C++的所有特性。你所看到的混乱,只是因为你把它作为一个整体去看,以为任何特性在任何时候都是必要的。(更不要说那些其实只是听别人这么说的)

Rust等之所以现在能够那么美丽,也是因为其是个在野党,给你看了它最擅长的一面。等到它真的挑了大梁,会发展成啥样,真不好说。

复杂的是这个世界本身。混乱的也是这个世界本身,以及人心无穷无尽的欲望。

其实问题当中的“越来越多”,恰恰是反映了这个世界的复杂。要么用一个自身复杂度足够高的语言,如C++;要么就要细分应用,各自使用专用语言才能起到简化作用。

没有任何偏向的意思。期待能有更好的解决方案。作为C++坑里爬出来的,表示学习Rust易如反掌。

因为不管怎么说都好,或者现代语言有多高级易上手,这个世界上始终需要一种猿语直接操作机器模型,没有gc,没有运行时信息,精确控制机器的一举一动,不多做不少做恰到好处的做。有了这个牢固的基础,方可以在上面做各种文章。所以,C语言无论如何是不会过时的,可能其运用领域日渐缩小,但是会一直存在。作为机器模型的抽象,C语言做得刚好恰到好处,可能对机器能力的描述不太充分,比如并行运算,但是真的瑕不掩瑜。并且C的语法又灵活,对于敢直面内存搞底层的黑客来说,实在是再称心如意不过的猿语。

但是,C语言的最大问题也是抽象恰到好处,只满足于机器模型,在很多情况下就显得抽象能力不足,所以我们就希望在不放弃对机器的精确控制力的前提下,又有着更好的代码表达方式(语法糖),这些新形式的代码,虽然一行代码能实现之前要写好几行的效果,但是其对机器的控制细节依然还在猿猴的预料之中,不为不需要的功能付出任何代价,就是其最好的注脚。(比如GC,其表现就完全不是猿猴所能把控的,gc啥时候回收对象,回收那些内存,一切都不是猿猴所能预料的)。所以除了C语言,我们还需要C++,就这样。

这本来是很好的设想,而且,刚刚面试的C++面试是带类的C,也确实能提高生产效率。但是一直以来,大C++被两大麻烦所纠缠。以至于很多时候,某些人使用C++来开发的进度比不上另外某些人用C来做同样的业务。

一是语言的难学难用,这个就不多说了,虽然C++11给其打了鸡血,又苟延残喘了一把,比之前好用很多,但也增加了太多新特性,对很多人来说,这就意味着要加大学习成本了,尽管有些人,新的语法一看就懂拿来就能用,但对多数人来说,这可能也漫长。不过这也没什么,也实在不能太过苛刻。因为一种语言,只要胆敢在机器模型上提供强大的抽象能力,那么它就一定不简单,所以只好把压力放在猿猴这边,成本始终是要付出的。更何况C++还要完全兼容C的丑陋语法,C++的语法,奋斗到现在没有崩盘实属难能可贵。试对比rust,有着和C++一样的伟大抱负(机器模型上的高抽象能力),却完全没有C++的包袱(从一开始就完全不准备兼容C),看看里面搞了多少概念,并且个人认为,rust的抽象能力就远远比不上大C++,rust不管是底层操作还是高级抽象,都对C++做了很大的阉割。

C++最大的问题还是库,一直以来,坊间流行的C++库,stl,boost,gtest,Loki,各种json xml库,……,没有一个是能让猿猴用以写业务代码写得开心的,就更别提垃圾mfc ace了。不说别的,就单单只是字符串操作就行了,没有一个库的字符串实现能让人满意,要求基本够用,接口干净,性能过得去,二进制复用,就只是这些简单理所当然的正当要求,遍观所有的字符串类,stl的string,cstring,qstring,fbstring等等,居然用起来都存在这样那样的心智包袱。迄今为止,C++圈子里面,就没有一个拿得出手的库可以满足平常的业务开发,其实,这也可以理解,因为破c++就连字符串的事情都做不好,还有何面目搞其他事情。这个事情让人痛心疾首,大C++的功能不可谓不丰富强大,人才也不可谓不济济,发展历史更不可谓不悠久,但是就没有及格的通用基础库。任何其他语言都不存在C++这样的尴尬,就不提java,C#这傲世双雄,哪个语言不是有配套的官方标准库,很有利于开发,新手学完语法没多久,就可以用库做点实际的事情。就连C也没有C++库的麻烦,反正语言抽象能力差,基础框架这事要做也做不好,马马虎虎,不用那么多纠结,这反而很有利于大力出结果,就C++猿猴背负着一堆的心智包袱在盘算用什么语法点来写代码,是template,还是虚函数,还是多继承,编译时间重要还是运行时重要……。就算是好几年的C++老手,也做不到其他猿语新手的开发效率,可耻悲哀。

是什么导致C++的通用库开发如此困难重重?归结起来,不外乎两大原因,统一的内存管理与统一的运行时信息。几乎现存C++库上的所有不良行为弱鸡功能包括template以及编译时间,都和这对拦路虎息息相关。而很多语言从一开始就从语言层面上集成了这两大功能,有了这两个坚实的基础,通用库自然搞起来得心应手。当然,C++要坚持零惩罚的抽象,要坚持不为不需要的功能付出任何代价,自然也就没办法在语言层面上提供完备的支持,但是并不表示就做不到统一的内存管理以及运行时信息,更不表示就能忽视它们。只可惜,所有的C++在这两点上,要么就回避要么就重视不足。

内存管理和运行时信息,这两个问题不解决,通用库的开发难度和工作量就会变得很巨大,而且劳民伤财出来的效果还很不好,比如stl,够惨淡经营了,够呕心沥血了,够集思广益了,但是没有直面内存管理和运行时信息这两大痛点,相反还采用头文件复用的方式,以及template的魔法,通过模板参数等旁门左道的邪术来回避,自然,就大力出垃圾,stl难以二进制复用,xml json 数据库读写等序列化操作,以及io,不管是易用性还是灵活性还是运行性能都是一团糟糕,而且还编译时间漫长更兼二进制代码膨胀。当然,用stl来搞搞算法以及数据结构的题目,还是可以的。而且stl还带起一股头文件复用的邪风。唯一对运行时稍微重视的库也就只有QT了,可惜这货的运行时信息并不完备还明藏私货,内存管理上也乏善可陈。

一个坚实的通用基础库对于C++来说,再怎么说重要都不为过,因为它可以指引代码的追求目标,摆脱C++复杂的语法,忘记内存管理细节,避免template关键字的出现,将C++当做是弱类型的动态语言同时又兼具静态强类型的好处,击退漫长的编译时间……。标准委员会在通用库上的保守不作为,迟早要让这门语言进入冷宫,现在市面上C++的学习者越来越少,再这么下去,猿语将不再猿语,C++要被淘汰的伟大日子的降临,指日可待,可是这并不是猿语的错,而是猿语官方组织的无能

只要操作系统还是用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++再学其它语言很容易。

编程语言也是有地位的分级的。非严格地说,封装层级越低,地位越高;封装层级越高,地位越低。

你能问出这个问题我假设你有编程基础,并且我认为已经接触过封装层级比较高,比C“好用”的语言。因此心里有一些朴素的对比,并且你能看的懂我在说什么。

往最底层讲其实所有的程序都是在跟硬件打交道。不过我们今天不用谈得那么深,就把“操作系统”当作“最底层”来谈,所有的程序,都是在跟操作系统打交道,换句话说就是各种姿势花式调用操作系统 API 而已。

你在 linux shell 上跑一个命令,本质上是在跑一个已经写好编译好的程序,程序里面调用各种 linux API 执行操作并且把输出信息打印到屏幕上或者写入文件(注意打印到屏幕和写入文件本身也是在调用操作系统 API)。以我常用的 CentOS 为例,/usr/bin 存放系统命令程序、/usr/include 存放系统头文件、/usr/lib 存放系统库。同时自带 gcc 容许“性感码农,在线编程”的存在。而这些 API 全部是 C 语言实现。换句话说,大多数情况下,只有 C 可以直接跟操作系统打交道。C 的地位是最高的。

同时也正因为 C 的封装层级低,你接触不到,所以你才会有这样的疑问。拿 Linux 举例是因为简单直观,在 Win 和 Mac 上,道理仍然是相同的。

加深理解:打开你家 Python 的根目录,看看里面是不是也有两个文件夹分别叫 include 和 libs?打开看看,里面有什么?(笑

你所使用的“好用”的编程语言,其实都是对其下层语言的高一级封装。上面提到的 Python,其实就是对 C 的封装。Python 本身其实严格说并不是“编程语言”,而是“脚本”。一行一行的 Python 代码其实都是命令,每执行一个命令,Python 解释器会调用相应的下层 API。

其他语言也是如此。各自处于各自的封装层级,各司其职而已。很多情况下不用 C 直接开发应用软件的原因正是其封装级别太低,需要造很多中层轮子,开发难度过大,开发效率过低。Java 一行代码可能会代替小几十行 C,但并不意味着操作系统所做的工作减少了。只是你的开发工作减少了,开发效率提高了而已。编程语言替你做了很多你不需要关心的事情。

C++ 因为其拥有兼容 C 语法可以直接调用 C 库的优势,因此在编程语言中的地位也是无可替代的。

讲了那么多,现在回到你最初的问题,也就不言自明了。

不知道题主是做什么的呀?对c和c++如此深恶痛绝。

每个语言都有人吐槽,但是吐槽到要淘汰,这是多大仇?

C 系统层有依赖,我记得在学校搞51单片机的时候,连系统都没有,其他语言都没有上场的机会。

C++ 在抽象复杂的同时支持很强的性能。支持类继承,模板,还能兼容c本来也是强大的代名词了。

还有最重要的因素,并不是所有的开发者都讨厌到放弃的程度。至少我还是很喜欢c++,愿意看着他进步,或者忍受一些不足。不抛弃,不放弃,不抱怨。。。

如果一个公司把c++玩转,那么它开发的产品,理论上可以在功能复杂性,和性能上,吊打所谓的新语言。

只是很多场景不在意极致的性能了。

一个东西,整个市场份额从50%下跌到5%,你就可以认为这个东西正在被淘汰。

最早,整个computer science里的半壁江山都是C/C++的,操作系统,编译器,数据库,各种服务,高性能并行计算……你几乎很难找到一个完全用不到C和C++的科学或者工程领域。

今天这个年代,程序员数量已经是当年的几千上万倍了,虽然大一的时候都学过C/C++,但是大部分人工作以后再也不用他们创造价值了。大部分人工作用的编程语言已经用不上C和C++了。

哪怕今天的C和C++程序员是当年的100倍,但是在计算机程序无处不在的今天,整个市场份额也跟当年没办法相比了。

责任编辑:
热门阅读排行
© 16货源网 1064879863