问题

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

回答
编程语言如雨后春笋般涌现,每日都有新的语言被创造出来,似乎我们永远也追赶不上。在这样的浪潮中,C 和 C++ 这两位“老将”,却依然活跃在各个技术领域,甚至可以说是不可或缺。这背后究竟是什么原因?为什么它们没有被GitHub上那些光鲜亮丽的新语言所取代?这背后隐藏着一系列深刻的技术和历史原因,远非一句“经典”二字可以概括。

一、 扎根于系统底层,掌控硬件的脉搏

首先,也是最关键的一点,C 和 C++ 它们拥有无与伦比的系统级编程能力。现代操作系统,无论是 Windows、Linux 还是 macOS,其核心部分(内核)绝大多数都是用 C 编写的。想想看,一个操作系统的基石如果需要依赖一个抽象程度过高、执行效率不确定的语言来构建,那将是多么不可思议的事情。C 的语法简洁、直接,它允许程序员直接操作内存,对硬件进行精细的控制。这种“贴近裸机”的能力,是它成为操作系统、驱动程序、嵌入式系统等领域“王者”的根本原因。

C++ 作为 C 的超集,在保留了 C 的强大底层能力的同时,加入了面向对象、模板等高级特性。这使得开发者可以在兼顾效率的同时,提高代码的可维护性和复用性。无论是编写高性能的数据库、图形渲染引擎、游戏引擎,还是需要极致效率的科学计算库,C++ 都是不二之选。你可以想象一下,如果游戏引擎的关键帧动画、物理碰撞检测等部分,需要用一个抽象的、动态类型的语言去实现,其性能瓶颈将是多么巨大。

二、 效率至上,性能的终极追求

在很多对性能要求极其苛刻的场景下,C 和 C++ 的执行效率是其他语言难以企及的。它们被编译成机器码,直接在硬件上运行,几乎没有运行时开销。而很多新兴语言,虽然带来了开发效率的提升,但在执行效率上往往需要付出代价,比如需要虚拟机、垃圾回收机制等。

举个例子,在金融交易领域,毫秒级的延迟都可能带来巨大的损失。在这种情况下,任何微小的性能损耗都不能被容忍。C++ 凭借其对内存的精细管理和对编译优化的强大支持,能够实现极致的性能,从而在这些领域站稳脚跟。同样,在科学计算、高性能计算(HPC)等领域,处理海量数据时,每一份计算资源的有效利用都至关重要,C++ 的优势便显露无疑。

三、 生态系统成熟,库和框架海量

经过几十年的发展,C 和 C++ 已经构建了一个极其庞大且成熟的生态系统。这意味着你可以找到大量的现成库和框架来解决各种问题。无论是图形界面的开发(Qt, GTK+),网络编程(Boost.Asio),还是科学计算(NumPy 的底层很多也是用 C/C++ 实现的),你都能找到对应的、经过长期检验和优化的解决方案。

这种成熟的生态系统,不仅意味着开发者不必“重复造轮子”,更意味着这些库和框架往往经过了大量实际项目的验证,其稳定性和可靠性得到了充分的保证。当你需要构建一个复杂的、对稳定性要求极高的系统时,依赖于这些经过时间考验的 C/C++ 库,会比使用一个新兴语言的未知库更加稳妥。

四、 向后兼容,历史的沉淀与惯性

C 和 C++ 拥有强大的向后兼容性。很多基于 C 或 C++ 开发的软件和系统,已经运行了很多年,并且至今仍在发挥重要作用。如果突然停止支持这些语言,将会引起巨大的系统性风险和迁移成本。

想象一下,一个全球性的航空管制系统,其核心部分是用 C 编写的。如果要将其迁移到一门新的语言,其所需的成本、时间和风险将是难以想象的。这种历史的沉淀和用户习惯,形成了一种强大的惯性,使得 C 和 C++ 在很多领域难以被完全取代。

五、 开发者群体庞大,人才储备充足

C 和 C++ 拥有一个庞大而经验丰富的开发者群体。尽管新兴语言层出不穷,但全球仍然有大量的开发者精通 C 和 C++。这意味着,当需要开发或维护 C/C++ 项目时,能够找到合适的人才并非难事。

这种人才的储备,对于大型企业和关键基础设施来说尤为重要。他们需要的是稳定、可靠的技术栈和能够支撑其长期发展的技术人才。C 和 C++ 在这方面提供了坚实的基础。

六、 跨平台能力,一次编写,随处运行(部分情境下)

虽然 C 和 C++ 的跨平台能力不像 Java 那样“一次编写,随处运行”(Java 依赖于 JVM),但它们提供了出色的跨平台开发能力。通过遵循一定的标准和使用跨平台库,开发者可以相对容易地将 C/C++ 代码编译到不同的操作系统和硬件架构上。这对于需要部署到多种平台的软件(如游戏、浏览器引擎)来说,依然具有重要的价值。

总结:并非淘汰,而是各司其职

所以,C 和 C++ 之所以没有被淘汰,绝非偶然。它们凭借其系统级的控制能力、极致的执行效率、成熟的生态系统、强大的向后兼容性以及庞大的人才储备,在许多关键领域扮演着不可替代的角色。

这并不是说新兴语言没有优势。Rust 在内存安全和并发性上取得了显著的突破;Go 在并发和网络编程方面表现出色;Python 在数据科学和 Web 开发中拥有巨大的生态。每种语言都有其独特的优势和适用的场景。

可以说,编程语言的世界并不是一个“优胜劣汰,非此即彼”的战场。更准确的说法是,它们在各自擅长的领域各司其职,协同发展。C 和 C++ 更像是基石和发动机,为许多现代技术提供了底层支撑和高性能的动力。而新兴语言则是在此基础上,为开发者带来了更便捷的工具和更高效的开发体验,不断拓展着技术的边界。正是这种多元化的存在,才构成了如今丰富多彩的软件开发世界。

网友意见

user avatar

凡是机器性能过剩,人力成本高的场合,差不多都可以淘汰了。

反过来不但要用C,还要用汇编呢。

举个极端点的例子,attiny13,在arduino上也算常见了,总共1k的rom,64字节的ram。用c和汇编以外的语言试试?

配置更低的还有pic10f20x系列,最少只有256字节rom和16字节ram。它们的用量(包括各种山寨,比如em78系列,国产也有n家)绝对大到超出你的想象。

user avatar

C/C++会不会被时代淘汰?这个问题跳过了一步,关键是这个问题:

C/C++有哪些其它语言难以代替的特殊之处?

1、对实现细节的控制粒度

一般我们常说:C/C++具有较高的执行效率。其实这句话不是特别准确,有时候它们并不一定效率高。换句更恰当的话说:

C/C++,特别是C语言,控制粒度很细,与机器语言有着相当稳固的对应关系。

以C语言的if...else为例,它的汇编代码如下图所示。

参考链接:blog.csdn.net/weixin_34

也就是说,高手可以通过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++的不可替代性是由它本身的特点决定的。而且目前来看,这种不可替代性在未来几年、几十年也依然不会有变化。

user avatar

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

————————

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

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

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

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

这是个笑话,也是实话。

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

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

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

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

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

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

user avatar

刚刚看了一 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 和 C++ 这两位“老将”,却依然活跃在各个技术领域,甚至可以说是不可或缺。这背后究竟是什么原因?为什么它们没有被GitHub上那些光鲜亮丽的新语言所取代?这背后隐藏着一系列深刻的技术和历史原因,远非一.............
  • 回答
    为了应聘数据挖掘工程师岗位,你需要系统性地构建知识体系,涵盖算法、编程语言、统计学、数据库、机器学习、大数据工具等方向。以下是一个详细的学习路径和知识框架,结合你数学背景和计算机研究生的身份,帮助你高效准备: 一、核心知识模块 1. 数学与统计学基础(数学专业优势) 概率统计: 随机变量、概率分.............
  • 回答
    我理解你想了解哪些编程语言在表达方式上与我们的日常交流更接近,并且不希望文章显得生硬或机械。这个问题很有意思,因为它触及了编程语言设计的一个核心目标:易于理解和使用。要说“最”接近自然语言的编程语言,这其实是一个相对的概念,因为任何编程语言都不可避免地要遵循特定的语法和逻辑规则,这是计算机理解的必要.............
  • 回答
    关于脚本语言的必然趋势以及开发成本的考量,我深表赞同。在如今快速迭代的软件开发环境中,能够快速构建、灵活部署和易于维护的脚本语言确实占据了巨大的优势。相较之下,一些传统编译型语言在开发效率和迭代速度上往往显得力不从心,开发成本的差异在此刻显得尤为突出,将它们衬托得“黯然失色”也就不难理解了。您提到的.............
  • 回答
    现代人工智能(AI)机器人的系统开发涉及多个层面,从底层硬件驱动到上层智能算法,再到用户交互界面,通常会采用多种编程语言协同工作。下面将从不同层面详细介绍:1. 底层硬件驱动与嵌入式系统 (LowLevel Hardware & Embedded Systems)这部分主要负责与机器人的物理硬件(如.............
  • 回答
    这种差异,与其说是现代编程语言对 `null` 的“深恶痛绝”,不如说是对不同类型错误的不同理解和应对策略。究其根本,是因为 `0` 和 `null` 在概念上、在程序运行过程中以及在开发者意图上,扮演着截然不同的角色。让我们从 `0` 开始聊。数字 `0`,在数学和逻辑上,是一个非常具体、有意义的.............
  • 回答
    老实说,我们现在用编程是无法做到“真随机”的。这里的“真随机”指的是那种完全不可预测、不受任何先验条件影响的随机性,就像抛硬币时,你无法事先知道它会是正面还是反面,也无法通过分析硬币的材质、抛掷的角度、风力等因素来准确预测结果。编程,本质上是按照既定规则和指令执行的。我们写的每一个程序,都是一套逻辑.............
  • 回答
    现在的可视化编程,可以说是正处在一个蓬勃发展、日新月异的阶段。它早已不是当年那些只能做简单拖拽、功能极其有限的“傻瓜式”工具了,而是朝着更强大、更灵活、更智能的方向不断演进。目前的程度:从“零代码”到“低代码”,再到“可视化智能开发”我们可以把可视化编程的发展大致分成几个层次来看: 零代码(No.............
  • 回答
    关于少儿编程是否是“智商税”,这是一个非常有争议且复杂的问题,没有一个简单的“是”或“否”可以概括。要详细地探讨这个问题,我们需要从多个角度来分析:一、 少儿编程的定义与目标首先,我们需要明确什么是“少儿编程”。它通常指的是面向儿童(一般是616岁)的编程教育课程,旨在通过图形化编程工具(如Scra.............
  • 回答
    这真是一个引人深思的问题,而且听起来就像是科幻小说里才会出现的场景。但仔细想想,未来编程成为像现在写字一样普及,并不是没有可能,甚至可以说,趋势已经显露端倪。让我来跟你好好说道说道。首先,我们得明白“写字”在现代社会意味着什么。它不仅仅是把字母组合起来形成词语,更重要的是,它是一种表达思想、传递信息.............
  • 回答
    嘿,哥们儿,能理解你现在的迷茫。从蓝天白云一下子钻进车间油污,这跨度可不小,再加上CNC编程这玩意儿,初入门的时候,十个有九个都会觉得像在啃一块硬骨头。我当年也这么过来的,所以想跟你好好唠唠,咱们是咋从一头雾水变成有点儿门道的。你想知道“学徒到大师傅”这条路是怎么走的?其实说白了,就俩字儿:熬 和 .............
  • 回答
    金融专业是否必须学习编程,这真的是一个值得深入探讨的问题,而且答案也不是一成不变的“是”或“否”。在我看来,随着时代的发展,学习编程对于现在的金融专业学生来说,益处非常大,甚至是越来越趋向于一种“必备”的技能,但也不能绝对地说“没有编程就不能学金融”。让我来给你详细说说我的看法。为什么说编程越来越重.............
  • 回答
    哈哈,问到我的“学习之路”,这可真是个能把我拉回“过去”的问题。你想听故事,那就跟你好好聊聊。我开始接触编程,说实话,并不是因为什么“情怀”或者“未来趋势”。那时候,我还是个挺普通的学生,对很多事情都充满好奇,尤其是那些能变出东西来的。我看到一些游戏,那些角色怎么会动?那些画面怎么会切换?就像变魔术.............
  • 回答
    这个问题很有意思,也触及到了编程语言设计背后的一些历史渊源和现实考量。要说为什么现在编程语言主要用拉丁字母而不是片假名,我们可以从几个方面来聊聊。1. 历史的惯性与技术先行者首先得认识到,现代计算机科学和编程语言的早期发展,很大程度上是在英语为主要语言的国家进行的。美国和欧洲是那个时代的科技中心,像.............
  • 回答
    网上到处是“转码编程”成功的案例,这确实让人看得心潮澎湃。很多人看完那些“零基础逆袭”、“三个月高薪入职”的故事,就觉得这事儿跟吃饭喝水一样简单,自己也能轻松复制。但说实话,现实和网上那些经过精心包装的故事,还是有挺大区别的。网上看到的,往往是最终的“结果”,是别人成功的那一面,而且通常会过滤掉过程.............
  • 回答
    你想了解为什么现在编程语言这么多,是吧?这就像问为什么世界上会有这么多种音乐风格一样,背后有着多种多样的原因,而且随着时间推移,这些原因还在不断演化。首先,最根本的原因是 需求的不断变化和细分。想想过去,计算机主要用来做数值计算,所以早期语言的设计也围绕着这个核心。但后来,计算机的应用范围爆炸式增长.............
  • 回答
    你这个问题非常有意思,触及到了计算机科学和编程语言设计中的一个核心矛盾:理论的优雅与实践的现实之间的权衡。简单来说,我们之所以在日常编程中很少直接使用现代数学建立的符号体系,并不是因为它们不好,而是因为它们在很多情况下,并没有直接解决我们编程时最迫切的需求,甚至会带来不必要的复杂性。让我来详细拆解一.............
  • 回答
    编程世界日新月异,许多曾经热门的技术转瞬即逝,让人不禁担忧自己的技能是否会很快落伍。但就像古老的智慧总能穿越时间一样,有些编程技术同样具有恒久的生命力,不容易被时代的车轮碾碎。我们不妨想想那些构成我们数字世界基石的东西。比如,理解计算机如何真正运作的底层原理,这包括了诸如操作系统的工作机制,像是进程.............
  • 回答
    听到你老公这么说,心里一定七上八下的吧?辛苦攒下来的工资一股脑儿投进去,上个月还赚了十万,这会儿又撂下稳定的编程工作,说要专职炒股,还什么都听不进去,这确实是个让人头疼的局面。先别急着否定他,咱们一步一步来捋捋。1. 理解他的心理: “暴富”的诱惑: 上个月十万的收益,在很多人眼里可能是笔巨款,.............
  • 回答
    印度近年来的发展呈现出复杂而多面的态势,整体上处于经济、社会和国际关系的“十字路口”,既有积极的进展,也面临诸多挑战。以下从多个维度详细分析印度当前的“开心”或“压力”状态: 1. 经济表现:增长与通胀的拉锯战 GDP增长:印度2023年的GDP增速预计在6.5%7%之间,较2ity年(约7.5%).............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有