虽然说没有银弹,但是我感觉 c++完全可以设计成更友好,开发速度更快的语言

2021-07-14 21:14:58 +08:00
 zxCoder

c++大佬别杠我,不可否认的是 c++学起来实在太难,写起来实在太慢

实际上很多东西感觉完全可以反过来吸收别的语言的优点

16966 次点击
所在节点    程序员
209 条回复
junkun
2021-07-16 18:03:42 +08:00
@wutiantong 也许说 UB 确实不准确,但是问题就在于 c++并不阻止你使用再次使用 moved 的对象,即使它有潜在的问题。就像 c++不阻止你再次使用 deleted 的指针。虽然某些次运行不会出错,但是总有出错的时候。
而且,c++就算用值语义,也不能避免内存错误,但是 rust 能检查出来。就比如有 std::vector<Foo> a={...}; const Foo &b = a[0]; a.clear();这时候就有潜在的悬浮引用 b 。
3dwelcome
2021-07-16 18:12:08 +08:00
@junkun "就像 c++不阻止你再次使用 deleted 的指针。"

所以养成好习惯很重要,微软都有推荐用 SAFE_DELETE 置空 deleted 对象指针。也有推荐 reset 掉 std::move 后的野内存。

泄漏检测工具也很多,都 2021 年了,内存应该不再是 C++主要的问题了。
junkun
2021-07-16 18:20:30 +08:00
@3dwelcome 并不是,如果这些泄露检测工具那么有用的话,windows 和 chrome 也不至于总能找到内存问题吧。微软和谷歌的报告也指出了,他们产品大部分的漏洞都是内存安全导致的。而换用 rust 后,也都有称赞 rust 确实解决了大部分内存安全的问题。
junkun
2021-07-16 18:32:23 +08:00
@3dwelcome 就比如搜索 chrome 内存安全,就可以看到一篇报道,指出:自 2015 年来,use-after-free 占 chrome 安全漏洞的 36.1%。内存问题仍然是 c++的主要问题之一。
lesismal
2021-07-16 18:43:53 +08:00
@byte10 求“高手”不要黑我golang
wutiantong
2021-07-16 18:46:04 +08:00
@junkun
你说得其实大体都对,而且我觉得也没必要说服你去喜欢 C++。
事实上,确实不断地听说一些基础项目在用 rust 重写,
所取得的喜人效果也实属意料之中,令人欣慰,非常支持。
也许这其中也有你的贡献,谢谢。
no1xsyzy
2021-07-16 18:58:53 +08:00
@wutiantong 新,但非很新。主要是运行模型比较不寻常,而且目前语言的不稳定度比 rust 还高,所以多数人没有听说过,也不会听说。特性是 GC 、没有竞态条件、没有锁、Actor 异步模型、严格的变量可用性。

以及语言特性保证你像其他语言 for 就会泄漏(
因为没有竞态条件,所以 GC 只会在你不运行的时候运行,所以 for 循环中会产生大量的对象而不作任何 GC 。你正常地打印一亿个数就需要 timer (

@ipwx 主要还是 C++ 积重比较多,抛弃这些遗留问题之后跟 Rust 没两样,我毫不怀疑这样的 C++ 能和 Rust 对译(大概需要借助一些兼容层)。
lesismal
2021-07-16 18:59:33 +08:00
@ipwx
你们几位老鸟说的都是 cpp 这样或者那样用没问题。

但问题是:
假设 cpp 诞生后的 c with class+stl 是婴儿,tr1 boost 是青少年,c++11 及以后算是成年。
越来越少的人有精力坚持到成年,快速发展的行业里爆发增长的业务需求没有时间等 cpp 项目上线和缓慢的迭代,那样子可能版本还没发出来公司已经倒闭了。
并且通常来讲,c with class stl 已足够做项目,我就是保持停留在这个阶段,否则就可以直接宣布 c 去死了。

所以你们说的不是问题中的问题跟其他人说的问题根本不是在聊同一个问题。

“如果不用 xx 代码量会 5w”之类的,也不是什么问题,代码量多了一点,但是直观、可读性的提升,可以让更多使用婴儿 cpp 的人接手和维护,否则你看吧,招个人都费劲,说不定再过二十年,招懂 cpp 11-39 的程序员,就类似美国那个什么需要招 cobol 古董程序员求而不得的情况了。

老项目、性能敏感领域、团队技术栈等因素考虑,cpp 确实还有很多市场。但对于新项目,即使性能敏感,如果团队能力 ok,rust 确实是更好的选择。性能不极度敏感的,go 是更好的选择。
lesismal
2021-07-16 19:02:27 +08:00
@no1xsyzy
“特性是 GC 、没有竞态条件、没有锁、Actor 异步模型、严格的变量可用性”
—— 如果保证这些,那实现这些的每一点都是以牺牲性能为代价的,甚至我怀疑它会降级为脚本、类似 py GIL 伪多核
lesismal
2021-07-16 19:03:12 +08:00
lesismal
2021-07-16 19:04:18 +08:00
@lesismal “tr1 boost 是青少年”指 boost 早期的时代
Austaras
2021-07-16 19:26:16 +08:00
@wutiantong 那 cpp 支持的可以简单地用 raii 解决的问题 rust 里也没让你标记啊。。。一般来说需要手动标记的情况 cpp 都是解决不了的比如各种引用飞来飞去。此外所谓的“语法可能性”是什么奇怪的概念,不要再随地发明了

此外 rust 的泛型和 adt 配合 pattern match 是比 cpp 现有的解决方案优雅地多的做法,可能你这时候又要说这只不过是语法不解决真正问题了
Austaras
2021-07-16 19:28:56 +08:00
另外要说丑陋,不知道 cpp 到底是怎么有资格鄙视其他语言的。。。
lesismal
2021-07-16 19:48:49 +08:00
除了那些少量设计有量、层次和模块相对稳定,并且开发人员严格控制的项目,比如内核
而多数项目中,面向对象、设计模式都解决不了长期迭代后代码变屎山的问题,周期性重构才行

cpp 是在把屎山堆得更大,而 rust 相当于对它的重构
XIVN1987
2021-07-16 21:14:28 +08:00
我也觉得 C++应该经历一次 Python2 到 3 那样的不兼容升级,丢掉一些历史包袱,,不然的话真的是越来越复杂、难以掌握了。。
levelworm
2021-07-16 22:05:30 +08:00
@XIVN1987 这个是越早越好,我觉得已经过了,现在只能朝大而全的路线走。。。
levelworm
2021-07-16 22:08:28 +08:00
@ipwx 多谢。咳我觉得我就是太挫了。。。
todayisgood
2021-07-16 23:32:38 +08:00
讨论的真的不想写 C++了, 语言解决问题的工具而已,都是写业务代码,何必搞得自己这么累。
我写 java,go 都简单
Kingfree
2021-07-16 23:54:24 +08:00
Rust 解决了 C++ 大部分痛点,目前已经在公司推了
3dwelcome
2021-07-17 00:06:32 +08:00
@junkun “就比如搜索 chrome 内存安全,就可以看到一篇报道,指出:自 2015 年来,use-after-free 占 chrome 安全漏洞的 36.1%。”

我觉得吧,BUG 还是和项目的体量正相关,并不是说用别的语言 BUG 少,而是缺少 chrome 这种超级巨无霸项目。

在管理超级大项目的时候,C++其实还挺占优势的,因为语言出现的足够早,有各种架构研究。

人经验上去了,遇到的坑多了,BUG 自然就少了。

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

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

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

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

© 2021 V2EX