[月经贴] golang 能否完全替代 c++?

2020-05-25 02:01:13 +08:00
 wangyzj

不考虑 c,只考虑 c++

不考虑嵌入式

先说我的个人观点

我觉得能。虽然性能略逊,但研发协作效率更好

我也是 golang 萌新,大家再来各抒己见吧

17863 次点击
所在节点    Go 编程语言
142 条回复
Lightbright
2020-05-26 01:53:24 +08:00
Chromium 项目七成安全漏洞属于内存安全问题

Chromium 项目报告,它七成的严重安全 bug 属于内存安全问题,因此它的下一个项目将是在源头阻止此类 bug 。对 2015 年之后发现的 912 个高危级安全 bug 的分析发现,七成为内存不安全问题,如 C/C++ 指针错误,其中一半是使用后释放 bug 。这些 bug 遍及整个代码库,非安全性的 bug 很大一部分其根源也是内存安全问题。Chromium 项目称它的沙盒机制在设计时就考虑了此类 Bug 的存在,但现在沙盒和网站隔离机制已经达到其能力的极限。他们现在考虑的一个方案是使用现有的更安全的语言如 Rust 和 Swift 等。Media

www.solidot.org/story?sid=64457

楼上是谁说 Chrome 为什么不用 Rust 的?这不是来了?
tao147258
2020-05-26 08:21:40 +08:00
小心大道至简
fovecifer
2020-05-26 08:56:21 +08:00
为什么这么多人不提 GC 呢?很多场景下对 GC 的容忍性很低,所以 C/C++这种具有很大的优势

PS:同时也是很大的劣势。。。
suckli
2020-05-26 09:23:37 +08:00
看领域

Go 在大部分领域都能工作的很好
国内大部分 C/C++程序员,在内存管理方面掌握的都不是很好,我在项目中遇见过的大部分问题,都是由于内存管理引起,而且极难定位。

前两天看了一份报告,说是 Google Chrome 的大部分问题也是内存问题
Go 在这方面可以很好的 cover 住,能够避免大部分内存问题。

在这一点上,从管理层面来说,就是一个巨大的优势。

除非对时延,性能等要求极高的领域,Go 可能就不适合了。
learningman
2020-05-26 10:14:53 +08:00
别吵了别吵了,再吵大家一起用回汇编吧,实在不行还有穿孔纸带嘛
hikkikuma1991
2020-05-26 10:57:43 +08:00
不能
dbskcnc
2020-05-26 11:10:17 +08:00
gc 和 非 gc 显然就不是同一个赛道, 不过在 pc/后端网络和应用层面,go 确实可以处理大部分的事情
wangyzj
2020-05-26 11:47:59 +08:00
@suckli #124 其实你这个答案契合我的意思
但是我问题没问好
结果就成了喷
flikecn
2020-05-26 12:01:08 +08:00
存储领域还是需要 C++,GO 胜任不了
mutalisk
2020-05-26 12:27:03 +08:00
一个依赖于 runtime 的语言是无法开发第三方库供其他语言调用的
libook
2020-05-26 12:43:22 +08:00
Go 在三四年前开始推广的时候有这么一条信息:“Google 希望在内部的一些场景使用 Go 语言来代替 C++进行开发。”
然后这个信息就被各大媒体歪曲成了“Google 公司:Go 语言势必取代 C++。”

实际上当你深入了解这两门语言之后,你会发现,这两门语言区别非常大,就好比是“用高铁来取代跑车”一样荒谬,实际上 Google 的 C++开发者在这种舆论上也都很懵逼,纷纷发言说用 Go 在大多数应用场景上取代 C++是无稽之谈。

抛开应用场景谈语言好坏都是耍流氓。虽然 Go 语言一开始是以“系统开发语言”作为定位的,但当前除了 Docker 生态以外,Go 基本上都是活跃在网络服务的开发方面,在微服务领域基本上已经成了御用语言之一,比起早先用 C++开发的高性能网络服务,Go 语言确实能够在保障较高的性能的同时极大地提升开发效率。

选语言不是选归宿,一个优秀的技术人员应当是博爱的,在任何场景下都能做出最合适的技术选型,避免“黔驴技穷”。

P.S. 吐槽 V 站上的另一个说 Deno 取代 Node.js 的帖子,和 Go 与 C++的情况如出一辙。
17701762115
2020-05-26 12:47:20 +08:00
wangyzj
2020-05-26 13:04:00 +08:00
@libook #131 这是个好回答,我觉得就是一个运行效率和研发效率选型的问题,我之所以说替代 c++主要是因为我标题写的不好,其实底层高运行效率我会选择 c
至于 deno,没研究过,短期来看应该是不可能
timothyye
2020-05-26 13:28:34 +08:00
Go 不能,Rust 我看行
libook
2020-05-26 14:55:55 +08:00
@wangyzj
一般来说(不考虑特例),写一个具备一定功能的程序的话:C++要比 Rust 简单,但是 Rust 要比 C++可靠;未经过优化的 Rust 程序可能会比 C++程序性能好,但是 C++的优化天花板更高。
Rust 的可靠是建立在其语言上对于安全代码的约束的,自然不如 C++灵活,但同时 Rust 也给开发者提供了选择的余地,如果偶尔要求灵活度也可以使用 unsafe 来牺牲可靠性。

但是很多高度复杂的项目团队都希望把难点留在开发阶段,而不是运营阶段的 Debug,这块就是 Rust 的市场。
数据库、中间件、区块链、容器(或沙盒、虚拟机)、WebAssembly 等已经开始出现基于 Rust 开发的产品(包括我#131 提到的 Deno ),随着 Rust 的不断完善和发展,势必会从 C++的应用场景中接管不小的一部分。

所以同样的,看你项目上的首要痛点究竟是啥,在都能实现的条件下,如果痛点是可靠性那就选 Rust,如果痛点是性能就用 C/C++;同时也可以模块化处理,Assembly 、C/C++、Rust 、Python 、JS 一起,物尽其用。
wzw
2020-05-26 16:15:48 +08:00
我写 有些用 Python, 有些用 Go, 目前觉得 Go 挺好
hankai17
2020-05-26 19:25:07 +08:00
@TransAM 我讲的是 c 的回调效率很高 而 go 要做到回调的效果是通过 schedule 恢复上下文
zhixi
2020-05-26 19:35:32 +08:00
golang 成也 gc,败也 gc
ww2000e
2020-05-26 19:37:20 +08:00
感觉会有越来越多的 c++项目换 rust
byaiu
2020-05-26 23:49:58 +08:00
@suckli 想请教一下您遇到的 C++的代码规模是怎样的?

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

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

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

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

© 2021 V2EX