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

296 天前
 MasutaaDAO

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

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

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

3606 次点击
所在节点    程序员
41 条回复
assiadamo
296 天前
我做梦也想精通 cpp
eibici
296 天前
喷 c++的,基本上是因为,他们只会那些简单的脚本语言,整不明白 c++咋用 (此处需要个表情)
zsxzy
296 天前
目前做音视频相关, c++无法被替代, 现代 c++ 语法也好用, auto lambda .. 该有的都有了
gaifanking
296 天前
c++很好啊!就是有点难,牛鬼蛇神也比较多。很喜欢 cpp 能定义栈变量(对象),Java 非得扔堆里再回收太难受(不算编译器优化栈上分配)。
甚至感觉 c 的一些有点 Java 都没有,比如函数指针这种基础功能:函数是一等公民。
AlohaV2
296 天前
目前的状态是底层用 C++,上层用 Python ,性能与便捷性兼顾。
adoal
296 天前
拿来写 CRUD 学习成本太高,不合算,而大量的 CRUD 岗位才是 IT 就业容量的根本,是阿狗阿猫都能进这个行业当程序员的前提。只靠写 infra 的精英是撑不起一个行业的繁荣的。
chendl111
296 天前
基建地位,虽然新秀各起,但在某些领域不可替代
antonius
296 天前
《戏为六绝句·其二》
唐·杜甫

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

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

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

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

地位怎麼樣不知道 錢多半是給夠的
gaifanking
296 天前
@enchilada2020 @FunctionalInterface 还是基于 class 或 interface 的啊,不可以加在方法上。c 里的一个函数指针 Java 里要写一个 Interface 多别扭
leonshaw
296 天前
@antonius 你说的这个东西啊,exciting
zzzkkk
296 天前
@roundgis
一万多也很多
gaifanking
296 天前
@antonius 可惜 c 的内置库太少,没有 http ,没有集合、算法啥的。手撸浪费时间又怕有 bug ,只能找找开源的,或者干脆演变成了 c with stl 。
chesha1
296 天前
中国的环境是互联网公司厉害,其他的产业升级没跟上
所以互联网公司代表的技术栈,就很流行,C++所以看上去就声音不大了
你要是把 nvidia ,微软,epic ,adobe 这些公司变成中国土生土长的公司,那吹 C++的人就会很多
agagega
296 天前
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
296 天前
地位还是很高的,,要不然 Java 、D 、Go 、Rust 一堆语言吵吵着要取而代之。。可惜至今一个都没成功。。
vincent7245
296 天前
你猜他们为什么都去踩 C++
jqknono
296 天前
@iMiata 有啊, 我一直用 C++, 它的特性太多了, 很多设计没那么好, 有很多的历史债. Go 和 C#的特性实现好很多.
易读, 易写, 一个目的只用一种写法.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/963698

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX