V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MasutaaDAO
V2EX  ›  程序员

c++在编程语言中的地位到底如何?

  •  
  •   MasutaaDAO · 262 天前 · 3552 次点击
    这是一个创建于 262 天前的主题,其中的信息可能已经有所发展或是发生改变。

    总听见有人说这是个死气沉沉的对象模型。

    前天看见一个帖子说“是个语言,只要还活着的,甚至是有一口气的,都能找个理由踩 C++ 一脚,而且不同语言踩 C++ 的理由还各不相同。”

    个人使用感觉挺强大的,就是语法语义有点恶心,比如 new T 和 new T()居然是两种语义。

    41 条回复    2023-08-10 20:53:23 +08:00
    coderluan
        1
    coderluan  
       262 天前   ❤️ 9
    地位也是随着时间变化的,有些东西历史地位很高,但是现在地位很低,比如 C++,比如我,秦始皇。
    qq565425677
        2
    qq565425677  
       262 天前
    其他语言踩主要是 C/C++编程效率低吧,但在某些方面 C/C++是具有绝对不可替代性的,比如显卡驱动,某些嵌入式等
    penguinWWY
        3
    penguinWWY  
       262 天前   ❤️ 1
    无敌的存在,各方面意义上的
    php 带节奏也就图一乐

    语言宗教战争还得看 c++,撕逼的档次和覆盖范围比别的语言高多了
    Xyg12133617
        4
    Xyg12133617  
       262 天前
    @coderluan 我差点要被兄弟你笑死
    janus77
        5
    janus77  
       262 天前
    踩的挺多,但是没看谁代替过。这种行为就不要理解了,人家说你也跟着说,那吃饭的家伙是能随便换的吗
    ch2
        6
    ch2  
       262 天前
    哈姆雷特
    westoy
        7
    westoy  
       262 天前   ❤️ 1
    敬鬼神而远之
    misdake
        8
    misdake  
       262 天前 via Android
    C++给我一种叶问里洪金宝那个角色的感觉。

    耕耘多年,家业大有积累底子厚,有能力有核心竞争力。但逐渐衰老,在新兴的领域竞争不过别人,在整个行业里逐渐边缘化。
    iMiata
        9
    iMiata  
       262 天前
    真的有人会踩 c++么,还从来没见到过的
    本人前端,最近倒是正在自学中
    yuruizhe
        10
    yuruizhe  
       262 天前   ❤️ 1
    如果有开箱即用的包管理器,那便是极好的
    NessajCN
        11
    NessajCN  
       262 天前   ❤️ 2
    c++你得会,毕竟不少老项目启动时候 go rust 这些还没出生,还有 qt 这些用 c++的框架必须要会它
    但是新写一个项目,那我肯定不会首选 c++了,除非某个非用不可的库只有 c++版的还不方便移植
    现代语言的包管理和工具链太重要了,你让我哼哧哼哧去找依赖手动一个一个下载在手写 CMakeLists ,跟一句 go mod tidy && go run ./ cargo update && cargo run 再相比我肯定选后者了
    tyrantZhao
        12
    tyrantZhao  
       262 天前   ❤️ 1
    cpp 改的越来越难用了
    x77
        13
    x77  
       262 天前
    底层基础设施东西少不了 C++,那地位不可撼动,未来 Go ,Rust 可能有机会动摇 C++
    blinue
        14
    blinue  
       262 天前   ❤️ 4
    C++ 有一个好处是圈子比较干净,牛鬼蛇神一般不会 C++
    horizon
        15
    horizon  
       262 天前
    语法太难受了,比 rust 还难受
    所以我在学 rust
    jmc891205
        16
    jmc891205  
       262 天前
    看不惯他又干不掉他
    encro
        17
    encro  
       262 天前   ❤️ 1
    据我所知,
    是所有语言中,
    平均工资相对比较高的,
    长沙这地方都是 15K 起,
    因为 15K 以下的你不敢用。。。
    encro
        18
    encro  
       262 天前
    概括就是 --- 大数据,高性能的基石
    mainjzb
        19
    mainjzb  
       262 天前   ❤️ 1
    java/C#/PHP 流行后,C++应用开发就被革命了。
    go 出来后,C++网络开发就被颠覆了。
    rust 出来正面杠,离成功还有很远很远。
    zig 出来后,被 C/C++当作包管理器(囧

    游戏引擎,图形图像处理,机器学习底层&gpu&汇编,操作系统,驱动,嵌入式,音视频编解码
    这些领域 C++还是大哥大,目前也就只有 Rust 能小试水花。
    比如 Chrom 就是 C++写的,怎么用别的语言重写?这都是被人验证了几十年累计下来的经验。

    但是我个人还是偏向于 Linus 的说法,C++是一门垃圾语言。
    可能就像我看多了梵高的画,觉得也就那样,不如手机随手拍的一张,但是我们生活在不同的年代,不同的环境,永远不能体会到一无所有的年代里创造的神奇。
    hhjuteman
        20
    hhjuteman  
       262 天前
    不火-指 TIOBE 2022 年度语言,TIOBE 2023 8 月也就是现在,排名比 Java 高。
    我在上家公司做 c++流媒体的时候,hr 跟我说 C++程序员大概在市场简历里面只有 20 分之一到 30 分之一。
    所以一个正儿八经的 C++程序员,一直都很好找工作,我偷着乐很多年了。
    还有,我刚毕业在深圳做通信的时候,老板说很少找我这么年轻的小伙子,一般都找 10 年起步的 c++程序员,所以公司里很多 30 几奔 4 的。说通信行业要多积累,c++也要多积累,一般没有 10 年他都觉得不靠谱。所以做 c++的,一般意义上的"毕业"年龄要晚很多。
    assiadamo
        21
    assiadamo  
       262 天前
    我做梦也想精通 cpp
    eibici
        22
    eibici  
       262 天前
    喷 c++的,基本上是因为,他们只会那些简单的脚本语言,整不明白 c++咋用 (此处需要个表情)
    zsxzy
        23
    zsxzy  
       262 天前
    目前做音视频相关, c++无法被替代, 现代 c++ 语法也好用, auto lambda .. 该有的都有了
    gaifanking
        24
    gaifanking  
       262 天前
    c++很好啊!就是有点难,牛鬼蛇神也比较多。很喜欢 cpp 能定义栈变量(对象),Java 非得扔堆里再回收太难受(不算编译器优化栈上分配)。
    甚至感觉 c 的一些有点 Java 都没有,比如函数指针这种基础功能:函数是一等公民。
    AlohaV2
        25
    AlohaV2  
       262 天前
    目前的状态是底层用 C++,上层用 Python ,性能与便捷性兼顾。
    adoal
        26
    adoal  
       262 天前
    拿来写 CRUD 学习成本太高,不合算,而大量的 CRUD 岗位才是 IT 就业容量的根本,是阿狗阿猫都能进这个行业当程序员的前提。只靠写 infra 的精英是撑不起一个行业的繁荣的。
    chendl111
        27
    chendl111  
       262 天前
    基建地位,虽然新秀各起,但在某些领域不可替代
    antonius
        28
    antonius  
       262 天前   ❤️ 1
    《戏为六绝句·其二》
    唐·杜甫

    王杨卢骆当时体,
    轻薄为文哂未休。
    尔曹身与名俱灭,
    不废江河万古流。

    一首杜甫的绝句送给那些语言。
    ------------------------------------------------
    个人感受:相比 C ,汇编等语言,C++在注重性能的同时,提高了开发效率。但是标准更新频繁,特性越加越多,越来越不像"C"++了(不再是 C 的增强版),本来就够复杂了,随着新特性的增加,更加复杂。用久了 C++,越能体会到 C 的简洁优雅,编译时间更短,生成的程序也更小。

    广泛使用的语言不一定是设计最优秀的语言,“一门编程语言的命运啊,当然要靠优秀的设计,但是也要考虑到历史的行程”。
    flyqie
        29
    flyqie  
       262 天前 via Android
    @antonius #28

    最后一句话,有点暴力。
    enchilada2020
        30
    enchilada2020  
       262 天前 via Android
    @gaifanking 我没理解错的话 函数指针 Java 也有的 Functional Interface 就是
    roundgis
        31
    roundgis  
       262 天前 via Android
    面過 cpp 的職位都是百萬起跳

    地位怎麼樣不知道 錢多半是給夠的
    gaifanking
        32
    gaifanking  
       262 天前
    @enchilada2020 @FunctionalInterface 还是基于 class 或 interface 的啊,不可以加在方法上。c 里的一个函数指针 Java 里要写一个 Interface 多别扭
    leonshaw
        33
    leonshaw  
       262 天前
    @antonius 你说的这个东西啊,exciting
    zzzkkk
        34
    zzzkkk  
       262 天前 via Android
    @roundgis
    一万多也很多
    gaifanking
        35
    gaifanking  
       262 天前
    @antonius 可惜 c 的内置库太少,没有 http ,没有集合、算法啥的。手撸浪费时间又怕有 bug ,只能找找开源的,或者干脆演变成了 c with stl 。
    chesha1
        36
    chesha1  
       262 天前   ❤️ 1
    中国的环境是互联网公司厉害,其他的产业升级没跟上
    所以互联网公司代表的技术栈,就很流行,C++所以看上去就声音不大了
    你要是把 nvidia ,微软,epic ,adobe 这些公司变成中国土生土长的公司,那吹 C++的人就会很多
    agagega
        37
    agagega  
       262 天前   ❤️ 6
    C++的成功来自于它在 C 的基础上提供了抽象能力,而抽象能力是开发大型软件所必需的。C 的成功自不必说。C++走了一条和 C 源码级兼容(除开某些语言细节上的差别)的道路(很多早期设计理念可以参考《 C++语言的设计与演化》这本书,讲得很好)。兼容性对 C++的成功至关重要。一开始我还不太能理解,直到后来遇见了 Objective-C 这个语言,它也可以和 C 源码级对接,苹果选择它作为平台开发语言和 macOS (前身是 NeXTSTEP )基于 UNIX 一样,可以充分利用已有的技术,是相当正确的决策。

    这种兼容性到现在带来了很多弊端,比如很多默认设定你就不能改,想要更 modern 就得自己额外写一点东西。但总的来说直到现在 C++和 C 的兼容都是利大于弊的,没有这层兼容最起码要和其他语言互操作就很麻烦(即使在同一个平台上 C++也没有统一的 ABI )。所以现代 C++的理念发展到现在,很多是在保留 C 遗产的同时整一套新语法,比如 C++14 的统一初始化、C++17 的结构化绑定和 C++20 的模块。C++标准委员会主席 Herb Sutter 搞了个叫 Cpp2 的东西,即推一套彻底新但是概念上和 C++相似的语法,然后通过一个预处理器编译到 C++,和当年最早的 C++到 C 转译器一样。这玩意本身当然不可能成为一个真正流行的新语言,但它更像一个 C++发展的试验场,由此也能看出所谓现代 C++的终极目标是在不放弃旧代码库的同时打造出一个先进的新语言。

    很多人可能瞧不起旧有的 C++代码库,觉得那都是迟早要进历史垃圾堆的玩意。然而连 Fortran 到今天都活得好好的,更别说更流行、吃到更多版本红利的 C++了。商业 C++代码我们不清楚,就看 LLVM 、GCC 、Chromium 这些巨无霸,它们可不是什么老旧代码,时刻都在演进。Google 想恶心 C++也没法全抛弃,只能搞了个类似前面说的 Cpp2 一样的 Carbon ,然后曰你们新项目都用 Rust 来写吧。Mozilla 算是这个星球上最纯正的 Rust 粉了吧?他们自己都没有太多用 Rust 重写 Firefox 里已有 C++代码的打算。所以 Clang 要往 C++塞生命周期标记,不是脱裤子放屁强行和 Rust 对标,而是非常有意义的现实需求。

    如果单纯把 C++当作一个既有代码库里才会用的语言,那 C++现在的状态其实还算健康。反正这些项目都已经定型,也不需要什么包管理器,CMake 本身就能当脚本写,实在不行拿 Python 出来承担构建工具的活也可以。但问题是:有多少新项目会使用 C++?

    这个问题可以分为两个子问题:第一,有哪些和 C++定位不同的语言取代了以前该用 C++写的项目;第二,有多少和 C++定位相似的语言取代了 C++的位置。第一个问题,在 Web 领域那显然是 Java 和若干脚本语言,在 GUI 领域则是 Java 、C#和 HTML5 ,中间件是 Java 和 Go. 第二个问题,先简单定义一下什么叫和 C++对标,就是有不错的抽象能力,有强类型系统,没有引用计数之外的垃圾回收,那 Rust 和 Swift 都算比较出名的竞争者,Swift 由于各种和 ObjC 兼容的负担以及苹果在自身生态之外确实没有什么想法,那就只有 Rust 了。

    目前看来 Rust 的进展很快,也搞出了一批「用 Rust 重写性能提升 xx 倍」的大新闻。我个人对这种营销不太感冒,但不得不承认它确实很有效,连本站都有很多人一看用 Rust 写的项目/学 Rust 就牛 X ,看到 C++写/学 C++就啊真老土。Rust 的地位在我看来离真正稳固还有距离(我 2015 年发 1.0 的时候第一次了解到这个语言,发展到今天算是超出预期,但比不了 Go 那种爆炸式流行),不过它确实做对了一些事:(1) 很早就提供了统一的包管理器和分发平台,还有 rustup 这种工具链管理器;(2) 把最佳实践落实到工具链层面;(3) 在保持基本兼容性的前提下,语言演进速度很快,RFC 通过后可以立刻实现,过几个版本就稳定下来。我和一些工作上用 Rust 的朋友聊过,惊奇地发现他们居然每天拉 nightly 的编译器来干活,这在 C++世界简直不敢想象。

    个人觉得,C++的优势:大量已有代码库,各种平台兼容性,社区体量,IDE 支持,基于模板元编程的表达能力;
    劣势:语言演进相对慢(求稳是好的,但可以编译器先实现再慢慢改,之前 module 和 concept 就是这样,可能还是因为编译器太复杂,而且用户对新特性也不热情,恶性循环),编译期反射能力欠缺,工具链不够便利( CMake 只能说能用,新世纪 20 年代了你给我说一个命令式构建工具有资格叫 modern ? xmake 也比它强。还没有被广泛使用的包管理器,交叉编译也不方便),很多语言之外的东西比较碎片化没有统一
    XIVN1987
        38
    XIVN1987  
       261 天前
    地位还是很高的,,要不然 Java 、D 、Go 、Rust 一堆语言吵吵着要取而代之。。可惜至今一个都没成功。。
    vincent7245
        39
    vincent7245  
       261 天前
    你猜他们为什么都去踩 C++
    jqknono
        40
    jqknono  
       261 天前
    @iMiata 有啊, 我一直用 C++, 它的特性太多了, 很多设计没那么好, 有很多的历史债. Go 和 C#的特性实现好很多.
    易读, 易写, 一个目的只用一种写法.
    daokedao
        41
    daokedao  
       261 天前
    也就 Rust 能和 C++ 一战,但 C++也在不断进步,谁笑到最后还不一定
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1031 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 18:39 · PVG 02:39 · LAX 11:39 · JFK 14:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.