golang性能比C和Cpp差好遠,尤其在非x86平台,跟本不是宣傳的那

m
magagop
楼主 (未名空间)
我上一個貼提到了golang兩大問題:GOGC和goroutine調度,今天開會同事又發現很多
其他性能問題。

1. encryption(對稱或非對稱):golang非常慢,比openssl慢10倍不止,因為openssl
寫了很多assembly,尤其在非x86上面特別明顯。

2. string vectorization:libc有很多手寫SSE/AVX優化,對應的golang根本全靠編譯器,在x86和非x86上表現都很差,也是10倍不止。

3. 沒有標準threadlocal,這個Cpp14也有很多優化,多核性能差距明顯。

4. golang周邊庫不如cpp穩健,尤其和folly、abseil比較

5. golang不支持硬件加速,因為目前很多硬件廠商都倒向LLVM,它彌補了部分GCC、
ICC的弊病,留給golang的市場空間變小了

結論:
a. 嚴肅項目(尤其跟性能相關的後台項目)還是cpp天下
b. 深度學習應該使用python和cpp
c. 刷題最好用cpp或java,未來cpp/java都會有fiber,比goroutine強

總之golang看起來很好,但是實際性能不怎麼樣,注定是小眾語言。
b
bingocat
2 楼
go的三巨头就不说了,连小马仔russ cox都是当年的奥赛金牌。
你确信他们都搞错了。
m
magagop
3 楼
就憑幾個牛人幾個公司幾年時間就想超越cpp、java或csharp,我看懸,golang最好的
結果就是scala,是小眾語言。
w
walkrandom
4 楼
go是区块链语言,不会是小众语言。

觉得go性能不好,可以去leetcode和java同时刷刷比较一下。
y
ycj
5 楼
个人认为GOLang作为系统语言来说过于高级,应该有一个稍微低级一点的语言GO--就好了。
w
wdong
6 楼
用cpp可破。

【在 magagop(magagop)的大作中提到:】

:我上一個貼提到了golang兩大問題:GOGC和goroutine調度,今天開會同事又發現很多
g
guvest
7 楼
Go的性能打的是java,python。
任何语言和c,Fortran, pascal比性能本身就是个错误。

从计算的角度来看。
能严肃多线程并行的语言除了c sharp,cpp, java就只有golang了。golang开发速度和
python差不多(如果你不用第三方库)。
g
guvest
8 楼
你说的这些都是很好的知识。但结论有些不靠谱。尤其是未来java的
Fiber赢goroutine.这个大部分其实是取决于资金,不是技术。
m
magagop
9 楼
leetcode的測試數據量太小,大部分是jvm啟動慢的問題,而且jit也不一定被啟動。
leetcode的測試結果偏向靜態連結非託管程序。

【 在 walkrandom (walkrandom) 的大作中提到: 】
: go是区块链语言,不会是小众语言。
: 觉得go性能不好,可以去leetcode和java同时刷刷比较一下。
m
magagop
10 楼
(如果你不用第三方库)-> 這個才是重點好嗎。

一個語言不是拼自己的標準庫,是拼社區,三方庫,這方面cpp和java完爆golang。

我結論的前提是:當FB和G、M開放他們自己的庫後,cpp競爭力明顯上升。再加上無縫
兼容LLVM,硬件加速未來也沒有問題。有機會去研究一下我提到的folly和abseil再說
吧,golang的三方庫就是開玩笑。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Go的性能打的是java,python。
: 任何语言和c,Fortran, pascal比性能本身就是个错误。
: 从计算的角度来看。
: 能严肃多线程并行的语言除了c sharp,cpp, java就只有golang了。golang开发速度和
: python差不多(如果你不用第三方库)。
m
magagop
11 楼
我同意資金第一重要,但你認為力挺java的amazon + oracle + ibm + google比google自己錢少麼?

golang連標準委員會都沒有(Cpp還是ISO呢),是google自己的玩具,其他大企業誰敢大規模用?FB?Amazon?M?IBM?

另外還要考慮的是沈澱資本,按代碼量計算,golang能超過cpp或者java麼?感覺連
python這種二流語言都趕不上

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你说的这些都是很好的知识。但结论有些不靠谱。尤其是未来java的
: Fiber赢goroutine.这个大部分其实是取决于资金,不是技术。
g
guvest
12 楼
我看的点不是web后台。我认为下面两个观察是很牢固的,当然,也欢迎批评。

1。能严肃多线程并行的语言除了c sharp,cpp, java就只有golang
2。不用第三方库,做数值计算要么多语言。单语言最好的选择现在我找到的就是golang。

我不用第三方库的理由是很明显的,你想想就明白了.
我不可能在指甲盖小的芯片里装pandas

【 在 magagop (magagop) 的大作中提到: 】
: 我同意資金第一重要,但你認為力挺java的amazon + oracle + ibm + google比
google
: 自己錢少麼?
: golang連標準委員會都沒有(Cpp還是ISO呢),是google自己的玩具,其他大企業誰敢
: 大規模用?FB?Amazon?M?IBM?
: 另外還要考慮的是沈澱資本,按代碼量計算,golang能超過cpp或者java麼?感覺連
: python這種二流語言都趕不上
g
guvest
13 楼
这取决于公司对单个项目的投入。对散户来说这些信息是不可知的。
所以我认为这条不需要列入讨论内容。
【 在 magagop (magagop) 的大作中提到: 】
: 我同意資金第一重要,但你認為力挺java的amazon + oracle + ibm + google比
google
: 自己錢少麼?
: golang連標準委員會都沒有(Cpp還是ISO呢),是google自己的玩具,其他大企業誰敢
: 大規模用?FB?Amazon?M?IBM?
: 另外還要考慮的是沈澱資本,按代碼量計算,golang能超過cpp或者java麼?感覺連
: python這種二流語言都趕不上
w
walkrandom
14 楼
做web都差不多的,没人care。
要看大腿。

java报了android的大腿。
python报了DL的大腿。
现在go要报区块链的大腿了。
一个语言的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。。
g
guvest
15 楼
假如不考虑第三方库等历史因素。我现在感觉Go开发速度和python差不多。
只要你自己补好emacs,vim等的tool。

写个区块链。python多半是比不上go。无论从开发速度还是运行和部署。
【 在 walkrandom (walkrandom) 的大作中提到: 】
: 做web都差不多的,没人care。
: 要看大腿。
: java报了android的大腿。
: python报了DL的大腿。
: 现在go要报区块链的大腿了。
: 一个语言的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。。
m
magagop
16 楼
我沒有說要用python這個二流語言啊,我的結論是:刷題練手、嚴肅項目最好用cpp或
java或csharp。
你說的那是嵌入式,那一定是c和cpp啦,golang編譯出來動輒xxxMB,不支持動態連結
,跟cpp沒法比。
如果做互聯網,那一定是java後台啦,框架多得很,為什麼不能用第三方庫?
如果做桌面應用,那一定是csharp啦,golang能很好的搞桌面麼?

這三種語言(cpp、java、csharp)語法越來越接近,而且java和csharp編譯器本身就
是cpp寫得,是一個非常好和成熟的路線,為什麼要搞另類的golang?

未來golang可以做的,他們(cpp20、java10、csharp8)都可以做,還有豐富的第三方庫,為啥不用?

我個人感覺把這三種語言的新特性弄清楚比新學golang更重要,而且他們之間感念相近,觸類旁通。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我看的点不是web后台。我认为下面两个观察是很牢固的,当然,也欢迎批评。
: 1。能严肃多线程并行的语言除了c sharp,cpp, java就只有golang
: 2。不用第三方库,做数值计算要么多语言。单语言最好的选择现在我找到的就是
golang。
: 我不用第三方库的理由是很明显的,你想想就明白了.
: 我不可能在指甲盖小的芯片里装pandas
: google
m
magagop
17 楼
區塊鏈,為什麼不用cpp加第三方庫?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 假如不考虑第三方库等历史因素。我现在感觉Go开发速度和python差不多。
: 只要你自己补好emacs,vim等的tool。
: 写个区块链。python多半是比不上go。无论从开发速度还是运行和部署。
g
guvest
18 楼
你非要无视事实。
说golang做不了严肃项目。
Python二流语言。

那又有什么意思呢?

我觉得你对two language dilemma 经历的不够。
不知道 两种语言 实际上会有多少麻烦。
谁要是觉得python 加c开发算法产品容易。
那他多半没做过足够多的项目。
【 在 magagop(magagop) 的大作中提到: 】
<br>: 我沒有說要用python這個二流語言啊,我的結論是:刷題練手、嚴肅項目最好用
cpp或
<br>: java或csharp。
<br>: 你說的那是嵌入式,那一定是c和cpp啦,golang編譯出來動輒xxxMB,不
支持動
態連結
<br>: ,跟cpp沒法比。
<br>: 如果做互聯網,那一定是java後台啦,框架多得很,為什麼不能用第三方庫?
<br>: 如果做桌面應用,那一定是csharp啦,golang能很好的搞桌面麼?
<br>: 這三種語言(cpp、java、csharp)語法越來越接近,而且java和csharp
編譯器
本身就
<br>: 是cpp寫得,是一個非常好和成熟的路線,為什麼要搞另類的golang?
<br>: 未來golang可以做的,他們(cpp20、java10、csharp8)都可以做,還有豐富的
第三方
<br>: 庫,為啥不用?
: ...................
<br>
g
guvest
19 楼
你自己查资料吧。golang处在c和python之间。

你把语言的表达能力做x
可预测性做y

XY上任何一个横向zone都有需求
【 在 magagop(magagop) 的大作中提到: 】
<br>: 區塊鏈,為什麼不用cpp加第三方庫?
<br>
f
fantasist
20 楼
不知道你为什么一个劲地揪着某些运算的性能不放,眼光狭隘。我就不在另一个帖回复了,意见统一写在这里。
* 写一个http web service,几十行代码没有额外dependency,编译成一个binary放到所有环境中都能运行。C++行吗?
* 加第三方库一般go get一下就解决了。C++/java行吗?就我个人经验而谈,从github下载的C++开源项目,几乎没一个能按照README里的步骤顺利编译的。
* 随便创建几百个goroutine,之间用channel通信,基本不用考虑性能问题,开发效率极高。C++行吗?你在测试中发现的不容易解决的性能问题,都是极端条件下才会发生
的现象,绝大多数时候并不需要担心这点。
* Go才出现几年,没标准委员会很正常。大公司不敢用的说法完全没有逻辑。大公司有百万行以上的代码,工具都是针对现有语言开发的,不可能直接替换成另一种语言,都是先从一小群爱好者开始慢慢推广。这也是为什么Amazon等公司一直用Java,FB费好大劲给PHP做HHVM。目前Go在中小型公司的新项目上很受欢迎,另外uber算大公司了吧,
很多backend service选择了用Go开发,不也用着好好的。

大部分开发工作是business driven的,与其盯着几个10x性能问题,不如花时间想想这些事情:招聘或培养合格程序员的成本,让代码在不同的开发与生产环境之间顺利部署的难度,代码可读与可维护性,不需要微调时的开发效率……你就能明白为什么Go会在web service和system management领域流行起来。最好的语言是满足business需求的同时,综合成本最低的语言。
y
yizhongxunhu
21 楼
> 就我个人经验而谈,从github下载的C++开源项目,几乎没一个能按照README里的步
骤顺利编译的
嗯呢,都是泪啊

【 在 fantasist (一) 的大作中提到: 】
: 不知道你为什么一个劲地揪着某些运算的性能不放,眼光狭隘。我就不在另一个帖回复
: 了,意见统一写在这里。
: * 写一个http web service,几十行代码没有额外dependency,编译成一个binary放到
: 所有环境中都能运行。C++行吗?
: * 加第三方库一般go get一下就解决了。C++/java行吗?就我个人经验而谈,从
github
: 下载的C++开源项目,几乎没一个能按照README里的步骤顺利编译的。
: * 随便创建几百个goroutine,之间用channel通信,基本不用考虑性能问题,开发效率
: 极高。C++行吗?你在测试中发现的不容易解决的性能问题,都是极端条件下才会发生
: 的现象,绝大多数时候并不需要担心这点。
: * Go才出现几年,没标准委员会很正常。大公司不敢用的说法完全没有逻辑。大公司有
: ...................
g
guvest
22 楼
楼主比较熟悉他传统上用来跑benchmark的一些case。可能没有实际卖过软件.
这个可以理解。但是软件现在是大发展的时代。。。
【 在 fantasist (一) 的大作中提到: 】
: 不知道你为什么一个劲地揪着某些运算的性能不放,眼光狭隘。我就不在另一个帖回复
: 了,意见统一写在这里。
: * 写一个http web service,几十行代码没有额外dependency,编译成一个binary放到
: 所有环境中都能运行。C++行吗?
: * 加第三方库一般go get一下就解决了。C++/java行吗?就我个人经验而谈,从
github
: 下载的C++开源项目,几乎没一个能按照README里的步骤顺利编译的。
: * 随便创建几百个goroutine,之间用channel通信,基本不用考虑性能问题,开发效率
: 极高。C++行吗?你在测试中发现的不容易解决的性能问题,都是极端条件下才会发生
: 的现象,绝大多数时候并不需要担心这点。
: * Go才出现几年,没标准委员会很正常。大公司不敢用的说法完全没有逻辑。大公司有
: ...................
h
hnpc
23 楼
哈哈哈,确实如此。

【 在 yizhongxunhu (刷题转码 工资翻倍) 的大作中提到: 】
: > 就我个人经验而谈,从github下载的C++开源项目,几乎没一个能按照README里的步
: 骤顺利编译的
: 嗯呢,都是泪啊
: github
w
wdong
24 楼
不然你们觉得我怎么赚钱...

【 在 yizhongxunhu (刷题转码 工资翻倍) 的大作中提到: 】
: 骤顺利编译的
: 嗯呢,都是泪啊
: github
n
netghost
25 楼
暈,什麼叫做區塊鏈語言?

你忽悠誰呢?
【 在 walkrandom (walkrandom) 的大作中提到: 】
: go是区块链语言,不会是小众语言。
: 觉得go性能不好,可以去leetcode和java同时刷刷比较一下。
y
yizhongxunhu
26 楼
dong哥好棒

【 在 wdong (万事休) 的大作中提到: 】
: 不然你们觉得我怎么赚钱...
n
normal
27 楼
sure golang has issues, but c++ has way more issues than that. and those
issues are more fundamental. you think golang designers are idiots, think
again.
d
digua
28 楼
这个话题有必要吵吗。:)

Go本来就不应该和C/C++比性能啊。
g
guvest
29 楼
现在区块链好多项目确实是golang写的。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 暈,什麼叫做區塊鏈語言?

: 你忽悠誰呢?
g
guvest
30 楼
和java,python比差不多。

【 在 digua(姚之FAN) 的大作中提到: 】

: 这个话题有必要吵吗。:)

: Go本来就不应该和C/C 比性能啊。
y
yizhongxunhu
31 楼
唉,C还没学明白呢,咋整出这么多语言啊,老帮菜真是惨
h
hnpc
33 楼
区块链这种服务器端的本来就适合用go,但是如果要挖矿那还是c++
f
fantasist
34 楼
据说Go对于写C的老帮菜们是无缝升级的特供语言
【 在 yizhongxunhu (刷题转码 工资翻倍) 的大作中提到: 】
: 唉,C还没学明白呢,咋整出这么多语言啊,老帮菜真是惨
g
guvest
35 楼
Golang一共25个关键字。对python,c,c plus,...

几乎任何语言的马工都是无缝升级----只要你不用第三方库。

我半小时就开始写代码了。

C比golang难写多了。
【 在 fantasist(一) 的大作中提到: 】
<br>: 据说Go对于写C的老帮菜们是无缝升级的特供语言
<br>
n
nkw
36 楼
不理解的一点是。go比较简单。很多特性都没有。又说又很多大牛在做。为什么性能重来不是名列前茅的。记得第一版出来时无论是编译还是运行速度都慢。

【 在 nkw (非死非活) 的大作中提到: 】
: https://read.acloud.guru/comparing-aws-lambda-performance-of-node-js-
python-
: java-c-and-go-29c1163c2581
w
walkrandom
37 楼
性能可以了,碾压java。看看阿里小哥的高票答案 https://www.zhihu.com/question/59481694

亮点是编译快,节省内存。

【 在 nkw (非死非活) 的大作中提到: 】
: 不理解的一点是。go比较简单。很多特性都没有。又说又很多大牛在做。为什么性能重
: 来不是名列前茅的。记得第一版出来时无论是编译还是运行速度都慢。
: python-
f
fantasist
38 楼
Go里还是有指针的概念,java python程序员会比较难受。对于cpp程序员来说又精简掉了template等复杂的东西。所以说从c过来是最舒服的。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Golang一共25个关键字。对python,c,c plus,...
: 几乎任何语言的马工都是无缝升级----只要你不用第三方库。
: 我半小时就开始写代码了。
: C比golang难写多了。
:
: 据说Go对于写C的老帮菜们是无缝升级的特供语言
:
g
guvest
39 楼
(A)
call by name
Call by value两分

(B)
指针,然后一致的call by value

A,B两个设计思路。各刷半小时题。总共一小时就解决了。
关键是认准知识点。不要和别的搅合在一起。

【 在 fantasist(一) 的大作中提到: 】
<br>: Go里还是有指针的概念,java python程序员会比较难受。对于cpp程序员来说又
精简掉
<br>: 了template等复杂的东西。所以说从c过来是最舒服的。
<br>
m
magagop
40 楼
zhihu這個回答你仔細看過了嗎?裡面最重要的一個限制條件就是單核心單線程,所以
go比java強跟cpp差不多結果不可信。如果不限CPU核心數量,cpp會完爆狗浪

【 在 walkrandom(walkrandom) 的大作中提到: 】

: 性能可以了,碾压java。看看阿里小哥的高票答案 https://www.zhihu.com/
question/

: 59481694

: 亮点是编译快,节省内存。
y
yizhongxunhu
41 楼
好性奋呢?晚上撸起裤子就是干,学一下

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Golang一共25个关键字。对python,c,c plus,...
: 几乎任何语言的马工都是无缝升级----只要你不用第三方库。
: 我半小时就开始写代码了。
: C比golang难写多了。
:
: 据说Go对于写C的老帮菜们是无缝升级的特供语言
:
s
silverhawk
42 楼
Golang比较目标不是CPP啊,是python一样容易程度和开发进度,大于Java的性能,然
后比java,python都好的memory efficient,和编译部署环境,
【 在 magagop (magagop) 的大作中提到: 】
: zhihu這個回答你仔細看過了嗎?裡面最重要的一個限制條件就是單核心單線程,所以
: go比java強跟cpp差不多結果不可信。如果不限CPU核心數量,cpp會完爆狗浪
:
: 性能可以了,碾压java。看看阿里小哥的高票答案 https://www.zhihu.com/
: question/
:
: 59481694
:
: 亮点是编译快,节省内存。
:
m
minquan
43 楼
Go
比我速度高的没我轻松
比我轻松的没我速度高
w
walkrandom
44 楼
这道题是leetcode上面find subString的高配版。
Hard disk IO bound。
多核并发上面,Java能有啥黑魔法beat go。

【 在 magagop (magagop) 的大作中提到: 】
: zhihu這個回答你仔細看過了嗎?裡面最重要的一個限制條件就是單核心單線程,所以
: go比java強跟cpp差不多結果不可信。如果不限CPU核心數量,cpp會完爆狗浪
:
: 性能可以了,碾压java。看看阿里小哥的高票答案 https://www.zhihu.com/
: question/
:
: 59481694
:
: 亮点是编译快,节省内存。
:
n
netghost
45 楼
既然我們都再聊技術,有誰告訴我why blockchain要用 go嗎?
此外用go的好處是?
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 现在区块链好多项目确实是golang写的。
:
: 暈,什麼叫做區塊鏈語言?
:
: 你忽悠誰呢?
:
b
brainless
46 楼
展开说说,为什么选golang做数值计算
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我看的点不是web后台。我认为下面两个观察是很牢固的,当然,也欢迎批评。
: 1。能严肃多线程并行的语言除了c sharp,cpp, java就只有golang
: 2。不用第三方库,做数值计算要么多语言。单语言最好的选择现在我找到的就是
golang。
: 我不用第三方库的理由是很明显的,你想想就明白了.
: 我不可能在指甲盖小的芯片里装pandas
: google
n
netghost
47 楼
如果一個語言打算serious,why GC?
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Golang一共25个关键字。对python,c,c plus,...
: 几乎任何语言的马工都是无缝升级----只要你不用第三方库。
: 我半小时就开始写代码了。
: C比golang难写多了。
: <br>: 据说Go对于写C的老帮菜们是无缝升级的特供语言
: <br>
d
dengdai
48 楼
代码好读懂.对科班出身的可能看template, reflection, annotation代码像呼吸一样
自然,但是对我等广大的门外汉,要抄别人的代码感觉go最清晰.仔细读完effective go, 就可以开工了. 大不了工作中多翻翻language specification, memory model,都不长.要看c++和java的类似文档会吐血的.

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 既然我們都再聊技術,有誰告訴我why blockchain要用 go嗎?
: 此外用go的好處是?
m
magagop
49 楼
對於嚴肅的後台大項目:

1. dependency可以用container解決
2. java/cpp有jenkins+cmake+apt+dpkg不比go get差
3. github上面的項目都是upstream,需要os廠商或中間商根據CVE改造,直接git
clone有很大安全風險
4. cpp/java也可以有coroutine或者actor模式,不是golang獨有
5. golang沒有一個除了google的大公司背書,比javascript都差

【 在 fantasist (一) 的大作中提到: 】
: 不知道你为什么一个劲地揪着某些运算的性能不放,眼光狭隘。我就不在另一个帖回复
: 了,意见统一写在这里。
: * 写一个http web service,几十行代码没有额外dependency,编译成一个binary放到
: 所有环境中都能运行。C++行吗?
: * 加第三方库一般go get一下就解决了。C++/java行吗?就我个人经验而谈,从
github
: 下载的C++开源项目,几乎没一个能按照README里的步骤顺利编译的。
: * 随便创建几百个goroutine,之间用channel通信,基本不用考虑性能问题,开发效率
: 极高。C++行吗?你在测试中发现的不容易解决的性能问题,都是极端条件下才会发生
: 的现象,绝大多数时候并不需要担心这点。
: * Go才出现几年,没标准委员会很正常。大公司不敢用的说法完全没有逻辑。大公司有
: ...................
m
magagop
50 楼
這個測試也印證了我的結論:golang性能上僅僅跟java相同,比csharp差好多,根本無法跟cpp比較。

cpp一般是csharp的2~3倍,在這裡csharp是golang的3倍,綜合,cpp比golang快一個
數量級。

【 在 nkw (非死非活) 的大作中提到: 】
: https://read.acloud.guru/comparing-aws-lambda-performance-of-node-js-
python-
: java-c-and-go-29c1163c2581
m
magagop
51 楼
cpp有很多魔法可以提高性能,golang基本不行,java和golang一個檔次。
我的意思是多路多核服務器,cpp可以比java和golang快很多,根本不是這篇知乎裡面
cpp僅僅比golang快一點的結論。

If local disk: unbuffered IO, SPDK, memory-mapped file
If remote disk: RDMA, DPDK
If using accelerator: TCAM, hardware regex engine, FPGA memory comparison
If not using accelerator: x86 SSE STTNI and AVX

cpp能把golang打出屎來

【 在 walkrandom (walkrandom) 的大作中提到: 】
: 这道题是leetcode上面find subString的高配版。
: Hard disk IO bound。
: 多核并发上面,Java能有啥黑魔法beat go。
h
hnpc
52 楼
为什么go不支持呢?难点在哪?

【 在 magagop (magagop) 的大作中提到: 】
: cpp有很多魔法可以提高性能,golang基本不行,java和golang一個檔次。
: 我的意思是多路多核服務器,cpp可以比java和golang快很多,根本不是這篇知乎裡面
: cpp僅僅比golang快一點的結論。
: If local disk: unbuffered IO, SPDK, memory-mapped file
: If remote disk: RDMA, DPDK
: If using accelerator: TCAM, hardware regex engine, FPGA memory comparison
: If not using accelerator: x86 SSE STTNI and AVX
: cpp能把golang打出屎來
m
magagop
53 楼
所以結論還是我前面提出的:

科班嚴肅大項目還是會用java、cpp、csharp,只有自己單幹的門外漢才首選golang。
golang能幹的java、cpp、csharp都能幹,golang只不過是在這三個裡面取捨折中一下
:平庸的性能,平庸的功能,平庸的第三方支持。
單個方向上都不是第一選擇:比甜比不過csharp,比快比不過cpp,比廣比不過java,
golang目前還不是一流語言。

【 在 dengdai (Gorge) 的大作中提到: 】
: 代码好读懂.对科班出身的可能看template, reflection, annotation代码像呼吸一样
: 自然,但是对我等广大的门外汉,要抄别人的代码感觉go最清晰.仔细读完effective
go,
: 就可以开工了. 大不了工作中多翻翻language specification, memory model,都不长
: .要看c++和java的类似文档会吐血的.
m
magagop
54 楼
需要CPU和廣大硬件廠商開發第三方庫。
譬如Intel的ICC、TBB和Nvidia的CUDA,並且可以兼容C語言,直接操作底層設備。

我最反感golang的一點是其在性能上吹牛,跟java差不多就說跟java一樣唄,非得說跟cpp差不過,結論是差好遠好嘛

【 在 hnpc (hnpc) 的大作中提到: 】
: 为什么go不支持呢?难点在哪?
h
hnpc
55 楼
Go的项目里各种文件就直接放在最顶层文件夹里。Java这种语言,一行代码还没写就几十层文件夹了。而且go不需要任何makefile,it just works,也不需要任何恶心的
markup language或者json配置文件。总之go的文件结构特别干净,适合程序员的审美。
h
hnpc
56 楼
Go在语言特性上也特别节制,没有各种恶心的oop特性,不容易写出anti-pattern。
m
magagop
57 楼
你提到的這個文件夾平鋪審美我很不適應,什麼雜七雜八的asm, defs, os, signal,
sys都混入了,真正runtime文件也就幾個,放到arch文件夾裡不行麼?要是像gcc那樣
支持幾十種處理器,豈不是有幾百個文件?

HACKING.md os_linux_noauxv.go
Makefile os_linux_ppc64x.go
alg.go os_linux_s390x.go
append_test.go os_nacl.go
asm.s os_nacl_arm.go
asm_386.s os_netbsd.go
asm_amd64.s os_netbsd_386.go
asm_amd64p32.s os_netbsd_amd64.go
asm_arm.s os_netbsd_arm.go
asm_arm64.s os_openbsd.go
asm_mips64x.s os_openbsd_arm.go
asm_mipsx.s os_plan9.go
asm_ppc64x.h os_plan9_arm.go
asm_ppc64x.s os_solaris.go
asm_s390x.s os_windows.go
atomic_arm64.s panic.go
atomic_mips64x.s plugin.go
atomic_mipsx.s pprof
atomic_pointer.go print.go
atomic_ppc64x.s proc.go
callers_test.go proc_runtime_test.go
cgo proc_test.go
cgo.go profbuf.go
cgo_mmap.go profbuf_test.go
cgo_ppc64x.go proflabel.go
cgo_sigaction.go race
cgocall.go race.go
cgocallback.go race0.go
cgocheck.go race_amd64.s
chan.go rand_test.go
chan_test.go rdebug.go
chanbarrier_test.go relax_stub.go
closure_test.go rt0_android_386.s
compiler.go rt0_android_amd64.s
complex.go rt0_android_arm.s
complex_test.go rt0_android_arm64.s
cpuflags_amd64.go rt0_darwin_386.s
cpuprof.go rt0_darwin_amd64.s
cputicks.go rt0_darwin_arm.s
crash_cgo_test.go rt0_darwin_arm64.s
crash_nonunix_test.go rt0_dragonfly_amd64.s
crash_test.go rt0_freebsd_386.s
crash_unix_test.go rt0_freebsd_amd64.s
debug rt0_freebsd_arm.s
debug.go rt0_linux_386.s
defs1_linux.go rt0_linux_amd64.s
defs1_netbsd_386.go rt0_linux_arm.s
defs1_netbsd_amd64.go rt0_linux_arm64.s
defs1_netbsd_arm.go rt0_linux_mips64x.s
defs1_solaris_amd64.go rt0_linux_mipsx.s
defs2_linux.go rt0_linux_ppc64.s
defs3_linux.go rt0_linux_ppc64le.s
defs_arm_linux.go rt0_linux_s390x.s
defs_darwin.go rt0_nacl_386.s
defs_darwin_386.go rt0_nacl_amd64p32.s
defs_darwin_amd64.go rt0_nacl_arm.s
defs_darwin_arm.go rt0_netbsd_386.s
defs_darwin_arm64.go rt0_netbsd_amd64.s
defs_dragonfly.go rt0_netbsd_arm.s
defs_dragonfly_amd64.go rt0_openbsd_386.s
defs_freebsd.go rt0_openbsd_amd64.s
defs_freebsd_386.go rt0_openbsd_arm.s
defs_freebsd_amd64.go rt0_plan9_386.s
defs_freebsd_arm.go rt0_plan9_amd64.s
defs_linux.go rt0_plan9_arm.s
defs_linux_386.go rt0_solaris_amd64.s
defs_linux_amd64.go rt0_windows_386.s
defs_linux_arm.go rt0_windows_amd64.s
defs_linux_arm64.go runtime-gdb.py
defs_linux_mips64x.go runtime-gdb_test.go
defs_linux_mipsx.go runtime-lldb_test.go
defs_linux_ppc64.go runtime.go
defs_linux_ppc64le.go runtime1.go
defs_linux_s390x.go runtime2.go
defs_nacl_386.go runtime_linux_test.go
defs_nacl_amd64p32.go runtime_mmap_test.go
defs_nacl_arm.go runtime_test.go
defs_netbsd.go runtime_unix_test.go
defs_netbsd_386.go rwmutex.go
defs_netbsd_amd64.go rwmutex_test.go
defs_netbsd_arm.go select.go
defs_openbsd.go sema.go
defs_openbsd_386.go sigaction_linux.go
defs_openbsd_amd64.go signal_386.go
defs_openbsd_arm.go signal_amd64x.go
defs_plan9_386.go signal_arm.go
defs_plan9_amd64.go signal_arm64.go
defs_plan9_arm.go signal_darwin.go
defs_solaris.go signal_darwin_386.go
defs_solaris_amd64.go signal_darwin_amd64.go
defs_windows.go signal_darwin_arm.go
defs_windows_386.go signal_darwin_arm64.go
defs_windows_amd64.go signal_dragonfly.go
duff_386.s signal_dragonfly_amd64.go
duff_amd64.s signal_freebsd.go
duff_arm.s signal_freebsd_386.go
duff_arm64.s signal_freebsd_amd64.go
duff_mips64x.s signal_freebsd_arm.go
duff_ppc64x.s signal_linux_386.go
env_plan9.go signal_linux_amd64.go
env_posix.go signal_linux_arm.go
env_test.go signal_linux_arm64.go
error.go signal_linux_mips64x.go
example_test.go signal_linux_mipsx.go
export_arm_test.go signal_linux_ppc64x.go
export_futex_test.go signal_linux_s390x.go
export_linux_test.go signal_mips64x.go
export_mmap_test.go signal_mipsx.go
export_test.go signal_nacl.go
export_unix_test.go signal_nacl_386.go
export_windows_test.go signal_nacl_amd64p32.go
extern.go signal_nacl_arm.go
fastlog2.go signal_netbsd.go
fastlog2_test.go signal_netbsd_386.go
fastlog2table.go signal_netbsd_amd64.go
float.go signal_netbsd_arm.go
funcdata.h signal_openbsd.go
futex_test.go signal_openbsd_386.go
gc_test.go signal_openbsd_amd64.go
gcinfo_test.go signal_openbsd_arm.go
go_tls.h signal_plan9.go
hash32.go signal_ppc64x.go
hash64.go signal_sighandler.go
hash_test.go signal_solaris.go
hashmap.go signal_solaris_amd64.go
hashmap_fast.go signal_unix.go
heapdump.go signal_windows.go
iface.go sigqueue.go
iface_test.go sigqueue_plan9.go
internal sigtab_linux_generic.go
lfstack.go sigtab_linux_mipsx.go
lfstack_32bit.go sizeclasses.go
lfstack_64bit.go slice.go
lfstack_test.go softfloat64.go
lock_futex.go softfloat64_test.go
lock_sema.go softfloat_arm.go
malloc.go sqrt.go
malloc_test.go sqrt_test.go
map_test.go stack.go
mapspeed_test.go stack_test.go
mbarrier.go string.go
mbitmap.go string_test.go
mcache.go stubs.go
mcentral.go stubs2.go
mem_bsd.go stubs32.go
mem_darwin.go stubs_android.go
mem_linux.go stubs_asm.go
mem_plan9.go stubs_linux.go
mem_windows.go stubs_nonlinux.go
memclr_386.s symtab.go
memclr_amd64.s symtab_test.go
memclr_amd64p32.s sys_arm.go
memclr_arm.s sys_arm64.go
memclr_arm64.s sys_darwin_386.s
memclr_mips64x.s sys_darwin_amd64.s
memclr_mipsx.s sys_darwin_arm.s
memclr_plan9_386.s sys_darwin_arm64.s
memclr_plan9_amd64.s sys_dragonfly_amd64.s
memclr_ppc64x.s sys_freebsd_386.s
memclr_s390x.s sys_freebsd_amd64.s
memmove_386.s sys_freebsd_arm.s
memmove_amd64.s sys_linux_386.s
memmove_amd64p32.s sys_linux_amd64.s
memmove_arm.s sys_linux_arm.s
memmove_arm64.s sys_linux_arm64.s
memmove_linux_amd64_test.go sys_linux_mips64x.s
memmove_mips64x.s sys_linux_mipsx.s
memmove_mipsx.s sys_linux_ppc64x.s
memmove_plan9_386.s sys_linux_s390x.s
memmove_plan9_amd64.s sys_mips64x.go
memmove_ppc64x.s sys_mipsx.go
memmove_s390x.s sys_nacl_386.s
memmove_test.go sys_nacl_amd64p32.s
mfinal.go sys_nacl_arm.s
mfinal_test.go sys_netbsd_386.s
mfixalloc.go sys_netbsd_amd64.s
mgc.go sys_netbsd_arm.s
mgclarge.go sys_nonppc64x.go
mgcmark.go sys_openbsd_386.s
mgcsweep.go sys_openbsd_amd64.s
mgcsweepbuf.go sys_openbsd_arm.s
mgcwork.go sys_plan9_386.s
mheap.go sys_plan9_amd64.s
mkduff.go sys_plan9_arm.s
mkfastlog2table.go sys_ppc64x.go
mknacl.sh sys_s390x.go
mksizeclasses.go sys_solaris_amd64.s
mmap.go sys_windows_386.s
mprof.go sys_windows_amd64.s
msan sys_x86.go
msan.go syscall2_solaris.go
msan0.go syscall_nacl.h
msan_amd64.s syscall_solaris.go
msize.go syscall_windows.go
mstats.go syscall_windows_test.go
mwbbuf.go testdata
net_plan9.go textflag.h
netpoll.go time.go
netpoll_epoll.go timeasm.go
netpoll_kqueue.go timestub.go
netpoll_nacl.go tls_arm.s
netpoll_solaris.go tls_arm64.h
netpoll_stub.go tls_arm64.s
netpoll_windows.go tls_mips64x.s
noasm.go tls_mipsx.s
norace_linux_test.go tls_ppc64x.s
norace_test.go tls_s390x.s
numcpu_freebsd_test.go trace
os2_freebsd.go trace.go
os2_nacl.go traceback.go
os2_openbsd.go type.go
os2_plan9.go typekind.go
os2_solaris.go unaligned1.go
os3_plan9.go unaligned2.go
os3_solaris.go utf8.go
os_android.go vdso_linux.go
os_darwin.go vdso_linux_386.go
os_darwin_arm.go vdso_linux_amd64.go
os_darwin_arm64.go vdso_linux_test.go
os_dragonfly.go vdso_none.go
os_freebsd.go vlop_386.s
os_freebsd_arm.go vlop_arm.s
os_linux.go vlop_arm_test.go
os_linux_arm.go vlrt.go
os_linux_arm64.go wincallback.go
os_linux_be64.go write_err.go
os_linux_generic.go write_err_android.go
os_linux_mips64x.go zcallback_windows.go
os_linux_mipsx.go zcallback_windows.s

【 在 hnpc (hnpc) 的大作中提到: 】
: Go的项目里各种文件就直接放在最顶层文件夹里。Java这种语言,一行代码还没写就几
: 十层文件夹了。而且go不需要任何makefile,it just works,也不需要任何恶心的
: markup language或者json配置文件。总之go的文件结构特别干净,适合程序员的审
美。
m
magagop
58 楼
反正我是感覺golang runtime寫得不如openjdk hotspot經典,比linux kernel更差得
遠。
g
guvest
59 楼
我想问一句。你做过的软件项目最多多少用户?严肃的大项目不是凭空想象可以得到的。

Golang本身在goog内部就有很多应用了。而且什么时候有谁拿golang和c比性能了吗

【 在 magagop(magagop) 的大作中提到: 】
<br>: 對於嚴肅的後台大項目:
<br>: 1. dependency可以用container解決
<br>: 2. java/cpp有jenkins cmake apt dpkg不比go get差
<br>: 3. github上面的項目都是upstream,需要os廠商或中間商根據CVE改造,直接
git
<br>: clone有很大安全風險
<br>: 4. cpp/java也可以有coroutine或者actor模式,不是golang獨有
<br>: 5. golang沒有一個除了google的大公司背書,比javascript都差
<br>: github
<br>
s
silverhawk
60 楼
我们现在内部正在上一个golang的项目,service3个月就上线而且还在继续增长,同样的项目想基于原来的CPP库改造,都没人敢碰,所以在实际公司中的项目中,考虑的因
素太多了
【 在 magagop (magagop) 的大作中提到: 】
: 所以結論還是我前面提出的:
: 科班嚴肅大項目還是會用java、cpp、csharp,只有自己單幹的門外漢才首選golang。
: golang能幹的java、cpp、csharp都能幹,golang只不過是在這三個裡面取捨折中一下
: :平庸的性能,平庸的功能,平庸的第三方支持。
: 單個方向上都不是第一選擇:比甜比不過csharp,比快比不過cpp,比廣比不過java,
: golang目前還不是一流語言。
: go,
g
guvest
61 楼
如果简化一下问题,不考虑第三方库。

用表达能力好做X轴正向,速度快为Y正向

那么XY平面上每个远离原点的语言
随着市场需求的变化
可能都会有个巅峰时段

前提是工程质量要高
不能太不可预测
最好不出现把人憋死的坑

【 在 silverhawk(silverhawk) 的大作中提到: 】

: 我们现在内部正在上一个golang的项目,service3个月就上线而且还在继续增长,同样

: 的项目想基于原来的CPP库改造,都没人敢碰,所以在实际公司中的项目中,考
虑的因

: 素太多了
b
brainless
62 楼
most of c++ vs java benchmarks were written by java developers

【 在 magagop (magagop) 的大作中提到: 】
: cpp有很多魔法可以提高性能,golang基本不行,java和golang一個檔次。
: 我的意思是多路多核服務器,cpp可以比java和golang快很多,根本不是這篇知乎裡面
: cpp僅僅比golang快一點的結論。
: If local disk: unbuffered IO, SPDK, memory-mapped file
: If remote disk: RDMA, DPDK
: If using accelerator: TCAM, hardware regex engine, FPGA memory comparison
: If not using accelerator: x86 SSE STTNI and AVX
: cpp能把golang打出屎來
m
magagop
63 楼
國際一流公司的媒體控制網關,大客戶是ATT和Verizon等一級郀I商,這個夠嚴肅吧?
都是C或Cpp,買第三方的庫,絕對不用開源github,害怕有GPL3。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我想问一句。你做过的软件项目最多多少用户?严肃的大项目不是凭空想象可以得到的。
: Golang本身在goog内部就有很多应用了。而且什么时候有谁拿golang和c比性能了吗
:
: 對於嚴肅的後台大項目:
:
: 1. dependency可以用container解決
:
: 2. java/cpp有jenkins cmake apt dpkg不比go get差
:
: 3. github上面的項目都是upstream,需要os廠商或中間商根據CVE改造,
: 直接
: git
:
: clone有很大安全風險
:
: 4. cpp/java也可以有coroutine或者actor模式,不是golang獨有
: ...................
m
magagop
64 楼
golang適合搞“前景不明朗”的小團隊實驗工程,這不屬於我講的“嚴肅”項目。
公司也分:一流大公司、一般大公司、二流公司、小公司、創業公司,不是每個公司都要golang才能解決問題。
沒人敢碰說明你們公司或項目缺骨幹。

【 在 silverhawk (silverhawk) 的大作中提到: 】
: 我们现在内部正在上一个golang的项目,service3个月就上线而且还在继续增长,同样
: 的项目想基于原来的CPP库改造,都没人敢碰,所以在实际公司中的项目中,考虑的因
: 素太多了
m
magagop
65 楼
我昨天突然想到可以用一個國家來形容golang:澳大利亞

袋鼠國是怎樣一個奇葩的國家,不是G7卻令人嚮往,就跟golang一樣,10歲了也不是程序語言前五名,相比之下,10歲的java已經快要奪冠了。袋鼠國也是,立國幾十年,人均收入爆高,卻不是G7成員。

想移民澳大利亞(golang)的人請注意:
袋鼠國科技不如美帝(cpp)、人氣不如中帝(java)、文化不如西歐英國(csharp)
,完全不是第一梯隊國家(語言)。袋鼠國只適合本身技能低無法移民美帝、又被西歐(MS)拒之門外、還不想跟土共(java)為伍的轉行人士開發“短平快、糙快猛”的新項目。

我從來沒說golang絕對不好,我是說golang跟主流語言相比“不夠好”,就像澳大利亞現在的尷尬定位一樣。

為什麼不能用第三方庫?美帝、英帝、中帝都有自己的一幫簇擁,澳大利亞有什麼?人均GDP麼(日均代碼量)麼?

對於不是科班出身的普通移民,澳大利亞確實有一些吸引力,但前提是想好自己未來要放棄:技術(美帝)、錢途(中帝)、文化逼格(西歐)

golang從來就不是silver bullet

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 如果简化一下问题,不考虑第三方库。
: 用表达能力好做X轴正向,速度快为Y正向
: 那么XY平面上每个远离原点的语言
: 随着市场需求的变化
: 可能都会有个巅峰时段
: 前提是工程质量要高
: 不能太不可预测
: 最好不出现把人憋死的坑
:
: 我们现在内部正在上一个golang的项目,service3个月就上线而且还在继续增长
: ,同样
: ...................
w
walkrandom
66 楼
在大公司退休靠不住。
不管能力多强,年纪大了被扫地出门的多了。
被赶走前带走点东西糊口,go比你说的那些语言强。
不慢,关键是内存用的少。现在云上的内存一直在涨价。
打个比方,那个阿里小哥做的hackathon,敏感词替换,就是习总登基以后做点东西的
好项目。
大家都不傻。

【 在 magagop (magagop) 的大作中提到: 】
: golang適合搞“前景不明朗”的小團隊實驗工程,這不屬於我講的“嚴肅”項目。
: 公司也分:一流大公司、一般大公司、二流公司、小公司、創業公司,不是每個公司都
: 要golang才能解決問題。
: 沒人敢碰說明你們公司或項目缺骨幹。
g
guvest
67 楼
你可能需要清醒下脑子。用ssh上站。shift-f 什么的查一下本版13年到今日的Golang
帖子。把基本事实弄对。

第一个要点,golang对标的是java,python
不是cpp。rust 对标的是cpp

你批评的东西完全牛头不对马嘴。Rob Pik什么的怎么可能去和C系列比性能?

第二个要点,golang在外面发展起来之前。google内部已经有很多项目在跑了。你查查就知道了
。Ken Thompson 这些人你觉得不是科班出身的?不是严肃项目?

你讲的话偏离常识太远了。

【 在 magagop(magagop) 的大作中提到: 】
<br>: golang適合搞“前景不明朗”的小團隊實驗工程,這不屬於我講的“嚴肅”項目。
<br>: 公司也分:一流大公司、一般大公司、二流公司、小公司、創業公司,不是每個
公司都
<br>: 要golang才能解決問題。
<br>: 沒人敢碰說明你們公司或項目缺骨幹。
<br>
m
magagop
68 楼
敏感詞過濾都是用硬件加速的,純軟件根本不行,更別提golang了

【 在 walkrandom(walkrandom) 的大作中提到: 】

: 在大公司退休靠不住。

: 不管能力多强,年纪大了被扫地出门的多了。

: 被赶走前带走点东西糊口,go比你说的那些语言强。

: 不慢,关键是内存用的少。现在云上的内存一直在涨价。

: 打个比方,那个阿里小哥做的hackathon,敏感词替换,就是习总登基以后做点
东西的

: 好项目。

: 大家都不傻。
m
magagop
69 楼
你的觀點不就正好證明了我的結論麼,你再看看我的標題。

第一,性能:
golang根本沒法跟cpp比性能,差一個數量級,golang僅僅是跟java相似,比python快
而已。
Cpp可以說跟assembly差不多,因為性能只有XX%的差異,不會超過一倍。
但是golang跟cpp根本不是某些人宣傳的那樣,接近cpp,其實是接近java。
golang也不可能取代對性能有要求的cpp領域,所以golang差不多10年了普及率也不高。

第二,社區:
不是因為有幾個人、幾個公司的語言就是一流語言,臉家還有項目用php、hhvm,你認
為php是一流語言麼?
golang相比java、cpp,除了狗家,還有誰大規模用?開源項目除了docker、k8s、juju還有幾個?普及率能跟java、cpp比麼?

第三,嚴肅項目的根據地:
搞android必須搞java,搞deep learning和HPC必須搞cpp,搞windows必須搞csharp
你說說哪個行業、哪個項目必須用golang,沒有golang玩不了的?
感覺golang在這方面還不如javascript的用戶群牢固。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你可能需要清醒下脑子。用ssh上站。shift-f 什么的查一下本版13年到今日的
Golang
: 帖子。把基本事实弄对。
: 第一个要点,golang对标的是java,python
: 不是cpp。rust 对标的是cpp
: 你批评的东西完全牛头不对马嘴。Rob Pik什么的怎么可能去和C系列比性能?
: 第二个要点,golang在外面发展起来之前。google内部已经有很多项目在跑了。你查查
: 就知道了
: 。Ken Thompson 这些人你觉得不是科班出身的?不是严肃项目?
: 你讲的话偏离常识太远了。
:
: golang適合搞“前景不明朗”的小團隊實驗工程,這不屬於我
: ...................
m
magagop
70 楼
結論:

golang的地位就是澳大利亞那樣的二流OECD國家在聯合國裡面的地位。
什麼都能做但是什麼都不拔尖。性能不如cpp、社區不如java、在某些領域的統治地位
不如javascript。
替代性非常強,什麼大家拿、信息藍都可以拿來跟袋鼠國比較。
s
stdio
71 楼
golang也不在我的武器库里,主要是因为:

1. 表达能力太差
2. 长得忒丑

【 在 magagop (magagop) 的大作中提到: 】
: 結論:
: golang的地位就是澳大利亞那樣的二流OECD國家在聯合國裡面的地位。
: 什麼都能做但是什麼都不拔尖。性能不如cpp、社區不如java、在某些領域的統治地位
: 不如javascript。
: 替代性非常強,什麼大家拿、信息藍都可以拿來跟袋鼠國比較。
g
guvest
72 楼
你讲的事实部分和你的结论完全没有关系。
比较的什么加拿大澳大利亚更是一比糊涂账。
多少年来除了你,没人拿golang和c plus比性能。
人的第一卖点是M:N scheduler
第二卖点不是语言,是易用性。

【 在 magagop(magagop) 的大作中提到: 】

: 結論:

: golang的地位就是澳大利亞那樣的二流OECD國家在聯合國裡面的地位。

: 什麼都能做但是什麼都不拔尖。性能不如cpp、社區不如java、在某些領域的統
治地位

: 不如javascript。

: 替代性非常強,什麼大家拿、信息藍都可以拿來跟袋鼠國比較。
h
hyhl
73 楼
搞deep learning一定要用cpp吗?难道不是python? 我是纯外行,随便瞎问问。:)
【 在 magagop (magagop) 的大作中提到: 】
: 你的觀點不就正好證明了我的結論麼,你再看看我的標題。
: 第一,性能:
: golang根本沒法跟cpp比性能,差一個數量級,golang僅僅是跟java相似,比python快
: 而已。
: Cpp可以說跟assembly差不多,因為性能只有XX%的差異,不會超過一倍。
: 但是golang跟cpp根本不是某些人宣傳的那樣,接近cpp,其實是接近java。
: golang也不可能取代對性能有要求的cpp領域,所以golang差不多10年了普及率也不
高。
: 第二,社區:
: 不是因為有幾個人、幾個公司的語言就是一流語言,臉家還有項目用php、hhvm,你認
: 為php是一流語言麼?
: ...................
m
magagop
74 楼
你是不是根本看不懂我最開始提到的goroutine sched問題?目前runtime 2根本不支持NUMA,在G和M之間引入P完全是勉強提高性能的臨時解決方案,go關鍵字隱含多線程不
可控,性能低下在支持NUMA的新sched前完全無解。新sched概念早在2014年就提出了,目前根本沒有實現,說明golang內部嚴重缺人,也是無解。go是二流語言沒跑。

DL/ML的核心庫都是cpp,py只不過是調用一下而已。

【 在 guvest(我爱你老婆Anna) 的大作中提到: 】

: 你讲的事实部分和你的结论完全没有关系。

: 比较的什么加拿大澳大利亚更是一比糊涂账。

: 多少年来除了你,没人拿golang和c plus比性能。

: 人的第一卖点是M:N scheduler

: 第二卖点不是语言,是易用性。

: 治地位
c
chebyshev
75 楼
golang当然不是tie 1语言,这还用得着你攻击加拿大才能说明白吗?
scheduler性能有疑问是个人都知道。但是也有容易用,内存少的优点。
其实就typed unix pipeline类似的东西。

dl有c (not cpp),lua.
ml更复杂。
【 在 magagop (magagop) 的大作中提到: 】
: 你是不是根本看不懂我最開始提到的goroutine sched問題?目前runtime 2根本不支持
: NUMA,在G和M之間引入P完全是勉強提高性能的臨時解決方案,go關鍵字隱含多線程不
: 可控,性能低下在支持NUMA的新sched前完全無解。新sched概念早在2014年就提出了,
: 目前根本沒有實現,說明golang內部嚴重缺人,也是無解。go是二流語言沒跑。
: DL/ML的核心庫都是cpp,py只不過是調用一下而已。
:
: 你讲的事实部分和你的结论完全没有关系。
:
: 比较的什么加拿大澳大利亚更是一比糊涂账。
:
: 多少年来除了你,没人拿golang和c plus比性能。
:
: 人的第一卖点是M:N scheduler
:
: 第二卖点不是语言,是易用性。
: ...................
s
silverhawk
76 楼
任何一个公司的新项目都是从前景不明朗开始的,要是都是前景明朗的,那都是维护老旧的系统,当然是CPP和Java居多,但是那样的项目基本对人没啥成长

至于没人敢碰和公司能力,我就不透露了,至少业界前三,没人敢碰是连原来CPP的核
心开发人员都在往golang转,自己开发的项目都不准备继续CPP下去,为啥,因为CPP带来的性能提升,远远抵消不了开发维护难度的增加和项目推进速度慢的损失。尤其对于cloud部署来说,CPP的性能提升更不明显

【 在 magagop (magagop) 的大作中提到: 】
: golang適合搞“前景不明朗”的小團隊實驗工程,這不屬於我講的“嚴肅”項目。
: 公司也分:一流大公司、一般大公司、二流公司、小公司、創業公司,不是每個公司都
: 要golang才能解決問題。
: 沒人敢碰說明你們公司或項目缺骨幹。
h
hyhl
77 楼
py只是调用一下啊?听上去没有什么技术含量。:)
那用py做AI的难点是哪里?或者说什么地方需要动脑筋比较花时间?Domain Knowledge? 调模型参数?
【 在 magagop (magagop) 的大作中提到: 】
: 你是不是根本看不懂我最開始提到的goroutine sched問題?目前runtime 2根本不支持
: NUMA,在G和M之間引入P完全是勉強提高性能的臨時解決方案,go關鍵字隱含多線程不
: 可控,性能低下在支持NUMA的新sched前完全無解。新sched概念早在2014年就提出了,
: 目前根本沒有實現,說明golang內部嚴重缺人,也是無解。go是二流語言沒跑。
: DL/ML的核心庫都是cpp,py只不過是調用一下而已。
:
: 你讲的事实部分和你的结论完全没有关系。
:
: 比较的什么加拿大澳大利亚更是一比糊涂账。
:
: 多少年来除了你,没人拿golang和c plus比性能。
:
: 人的第一卖点是M:N scheduler
:
: 第二卖点不是语言,是易用性。
: ...................
h
hyhl
78 楼
和我现在的部门情况有点像,也是老系统用CPP做,新系统用其他语言。不过我们这里
主要是管理层在推新系统,核心CPP的人要么不愿去做新系统,要么就离开公司了。老
板们肯定是不喜欢CPP的,生产力太低,受技术大牛影响太大,开发成本太高,几乎没
办法找到大量合格的C++程序员。要是一个公司随便就能找到几十个或者上百个大牛C++程序员,干活努力,工资10万封顶,那肯定所有公司都用C++了啊。:)

【 在 silverhawk (silverhawk) 的大作中提到: 】
: 任何一个公司的新项目都是从前景不明朗开始的,要是都是前景明朗的,那都是维护老
: 旧的系统,当然是CPP和Java居多,但是那样的项目基本对人没啥成长
: 至于没人敢碰和公司能力,我就不透露了,至少业界前三,没人敢碰是连原来CPP的核
: 心开发人员都在往golang转,自己开发的项目都不准备继续CPP下去,为啥,因为CPP带
: 来的性能提升,远远抵消不了开发维护难度的增加和项目推进速度慢的损失。尤其对于
: cloud部署来说,CPP的性能提升更不明显
x
xiaoju
79 楼
C++的问题不是程序员工资高,而是不合格程序员比例大。

C++几乎没法开发大项目,要不就是一个牛人单打独斗,要不就是一个特别强势的人定
一个极严格的规范把大部分特性禁用属下只搬砖,否则写出来的代码就是灾难。

【 在 hyhl (hehe) 的大作中提到: 】
: 标 题: Re: golang性能比C和Cpp差好遠,尤其在非x86平台,跟�
: 发信站: BBS 未名空间站 (Wed Mar 14 02:00:25 2018, 美东)
:
: 和我现在的部门情况有点像,也是老系统用CPP做,新系统用其他语言。不过我们这里
: 主要是管理层在推新系统,核心CPP的人要么不愿去做新系统,要么就离开公司了。老
: 板们肯定是不喜欢CPP的,生产力太低,受技术大牛影响太大,开发成本太高,几乎没
: 办法找到大量合格的C++程序员。要是一个公司随便就能找到几十个或者上百个大牛C++
: 程序员,干活努力,工资10万封顶,那肯定所有公司都用C++了啊。:)
:
: 【 在 silverhawk (silverhawk) 的大作中提到: 】
: : 任何一个公司的新项目都是从前景不明朗开始的,要是都是前景明朗的,那都是维护老
: : 旧的系统,当然是CPP和Java居多,但是那样的项目基本对人没啥成长
: : 至于没人敢碰和公司能力,我就不透露了,至少业界前三,没人敢碰是连原来CPP
的核
: : 心开发人员都在往golang转,自己开发的项目都不准备继续CPP下去,为啥,因为
CPP带
: : 来的性能提升,远远抵消不了开发维护难度的增加和项目推进速度慢的损失。尤其对于
: : cloud部署来说,CPP的性能提升更不明显
:
:
:
: --
h
hyhl
80 楼
是的,但这两者其实也是相关联的,如果公司愿意出足够多的钱,还是能招到合格C++
程序员的。关键现在也没新人学了,年轻人连JAVA都不学了,谁还学C++?
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: C++的问题不是程序员工资高,而是不合格程序员比例大。
: C++几乎没法开发大项目,要不就是一个牛人单打独斗,要不就是一个特别强势的人定
: 一个极严格的规范把大部分特性禁用属下只搬砖,否则写出来的代码就是灾难。
: ++
: 护老
: 的核
: CPP带
: 对于
x
xiaoju
81 楼
难题就在这里

花钱可以招到足够的C++程序员,但是无法去除里面的沙子还是用不了。Java和C#是极
为抗操的语言可以扔给地球对面的印度外包公司折腾,C++这么搞就废了。

【 在 hyhl (hehe) 的大作中提到: 】
: 是的,但这两者其实也是相关联的,如果公司愿意出足够多的钱,还是能招到合格C++
: 程序员的。关键现在也没新人学了,年轻人连JAVA都不学了,谁还学C++?
m
magagop
82 楼
“尤其对于cloud部署来说,CPP的性能提升更不明显”

container/kvm部署golang和cpp的性能差異目前我們還沒有做,但非常懷疑這個cpp性
能提升不明顯的結論,有reference link沒?前面有人貼link說aws lambda上csharp性能是golang的三倍,三倍也算不明顯嗎?

【 在 silverhawk(silverhawk) 的大作中提到: 】

: 任何一个公司的新项目都是从前景不明朗开始的,要是都是前景明朗的,那都是维护老

: 旧的系统,当然是CPP和Java居多,但是那样的项目基本对人没啥成长

: 至于没人敢碰和公司能力,我就不透露了,至少业界前三,没人敢碰是连原来
CPP的核

: 心开发人员都在往golang转,自己开发的项目都不准备继续CPP下去,为啥,因
为CPP带

: 来的性能提升,远远抵消不了开发维护难度的增加和项目推进速度慢的损失。尤其对于

: cloud部署来说,CPP的性能提升更不明显
w
wdong
83 楼
说得太对了。我带了好几个人了,从来不敢让他们插手我的C++项目。
只要引入一个好玩点的bug就够我受的了。
好在现在有python。

【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: C++的问题不是程序员工资高,而是不合格程序员比例大。
: C++几乎没法开发大项目,要不就是一个牛人单打独斗,要不就是一个特别强势的人定
: 一个极严格的规范把大部分特性禁用属下只搬砖,否则写出来的代码就是灾难。
: ++
: 护老
: 的核
: CPP带
: 对于
h
hyhl
84 楼
C++性能好是无可争议的,有人拿benchmark results 来证明java或者python比C++快,甚至还拿leetcode的运行时间来举例,都是在搞笑。所以说这不是问题。
问题是stroustrup大爷弄出来C++以后三十多年了,冒出来这么多语言,各自立一个山
头。要是C++真得很好用,那些语言不会有生存空间。。。C++17 C++20 可能是好用了
很多,但是sorry, too late. 其实这和中国足球搞不好是一样的,因为中国小孩都不
踢球了。

所以存在就是合理的。当然吹牛不好。我也不喜欢AI的人吹嘘AI马上就要取代人类,紧急关头一定要记得拔电源啥的。我对无人车也持保留态度。但大家都是要混口饭吃。尤其如果golang比java的主要差距是在ecosystem的话,吹牛还是会很有帮助的。 :)

【 在 wdong (万事休) 的大作中提到: 】
: 说得太对了。我带了好几个人了,从来不敢让他们插手我的C++项目。
: 只要引入一个好玩点的bug就够我受的了。
: 好在现在有python。
y
yizhongxunhu
85 楼
> 但大家都是要混口饭吃
对,谁给咱饭吃,咱就干啥,不挑

【 在 hyhl (hehe) 的大作中提到: 】
: C++性能好是无可争议的,有人拿benchmark results 来证明java或者python比C++快,
: 甚至还拿leetcode的运行时间来举例,都是在搞笑。所以说这不是问题。
: 问题是stroustrup大爷弄出来C++以后三十多年了,冒出来这么多语言,各自立一个山
: 头。要是C++真得很好用,那些语言不会有生存空间。。。C++17 C++20 可能是好用了
: 很多,但是sorry, too late. 其实这和中国足球搞不好是一样的,因为中国小孩都不
: 踢球了。
: 所以存在就是合理的。当然吹牛不好。我也不喜欢AI的人吹嘘AI马上就要取代人类,紧
: 急关头一定要记得拔电源啥的。我对无人车也持保留态度。但大家都是要混口饭吃。尤
: 其如果golang比java的主要差距是在ecosystem的话,吹牛还是会很有帮助的。 :)
l
lestrois2000
86 楼
中国都是笨蛋去踢球,负筛选,能踢得好才怪。一流霸主的国家足球不会强。

【 在 hyhl (hehe) 的大作中提到: 】
: C++性能好是无可争议的,有人拿benchmark results 来证明java或者python比C++快,
: 甚至还拿leetcode的运行时间来举例,都是在搞笑。所以说这不是问题。
: 问题是stroustrup大爷弄出来C++以后三十多年了,冒出来这么多语言,各自立一个山
: 头。要是C++真得很好用,那些语言不会有生存空间。。。C++17 C++20 可能是好用了
: 很多,但是sorry, too late. 其实这和中国足球搞不好是一样的,因为中国小孩都不
: 踢球了。
: 所以存在就是合理的。当然吹牛不好。我也不喜欢AI的人吹嘘AI马上就要取代人类,紧
: 急关头一定要记得拔电源啥的。我对无人车也持保留态度。但大家都是要混口饭吃。尤
: 其如果golang比java的主要差距是在ecosystem的话,吹牛还是会很有帮助的。 :)
x
xiaoju
87 楼
C++性能并不好,因为缺少轮子,你又不可能自己手撸所有的

【 在 hyhl (hehe) 的大作中提到: 】
: C++性能好是无可争议的,有人拿benchmark results 来证明java或者python比C++快,
: 甚至还拿leetcode的运行时间来举例,都是在搞笑。所以说这不是问题。
: 问题是stroustrup大爷弄出来C++以后三十多年了,冒出来这么多语言,各自立一个山
: 头。要是C++真得很好用,那些语言不会有生存空间。。。C++17 C++20 可能是好用了
: 很多,但是sorry, too late. 其实这和中国足球搞不好是一样的,因为中国小孩都不
: 踢球了。
: 所以存在就是合理的。当然吹牛不好。我也不喜欢AI的人吹嘘AI马上就要取代人类,紧
: 急关头一定要记得拔电源啥的。我对无人车也持保留态度。但大家都是要混口饭吃。尤
: 其如果golang比java的主要差距是在ecosystem的话,吹牛还是会很有帮助的。 :)
s
silverhawk
88 楼
不知道三倍这个benchmark哪里来的,每个人实现不一样,我没有做过C# 对golang的对比,不过网上有很多,随便找一个https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8,可以试一下,

我觉得其实你可以改变mindset,你对底层了解,为啥不想着去提升golang性能,这样
impact会大得多,如果你假设别家都是不知道golang比CPP性能不如,误入golang,恐
怕也太低估这么多上golang公司的技术能力和项目判断了。相反,如果golang性能不如CPP下还这么收欢迎,岂不是Golang性能提升之后更大有可图,所以做这个的话,
impact比你只是比较CPP和golang大多了。

当然项目选择语言,各家各个项目组,历史现实都不一样,不好判断

【 在 magagop (magagop) 的大作中提到: 】
: “尤其对于cloud部署来说,CPP的性能提升更不明显”
: container/kvm部署golang和cpp的性能差異目前我們還沒有做,但非常懷疑這個cpp性
: 能提升不明顯的結論,有reference link沒?前面有人貼link說aws lambda上csharp性
: 能是golang的三倍,三倍也算不明顯嗎?
:
: 任何一个公司的新项目都是从前景不明朗开始的,要是都是前景明朗的,那都是
: 维护老
:
: 旧的系统,当然是CPP和Java居多,但是那样的项目基本对人没啥成长
:
: 至于没人敢碰和公司能力,我就不透露了,至少业界前三,没人敢碰是连原来: CPP的核
:
: 心开发人员都在往golang转,自己开发的项目都不准备继续CPP下去,为啥,因
: ...................
y
yizhongxunhu
89 楼
看这个帖子学了好多,各位基友太厉害了,爱你们
g
guvest
90 楼
楼主不了解cpp用户痛点。
【 在 silverhawk (silverhawk) 的大作中提到: 】
: 不知道三倍这个benchmark哪里来的,每个人实现不一样,我没有做过C# 对golang的对
: 比,不过网上有很多,随便找一个https://hackernoon.com/go-vs-net-core-in-
terms
: -of-http-performance-7535a61b67b8,可以试一下,
: 我觉得其实你可以改变mindset,你对底层了解,为啥不想着去提升golang性能,这样
: impact会大得多,如果你假设别家都是不知道golang比CPP性能不如,误入golang,恐
: 怕也太低估这么多上golang公司的技术能力和项目判断了。相反,如果golang性能不如
: CPP下还这么收欢迎,岂不是Golang性能提升之后更大有可图,所以做这个的话,
: impact比你只是比较CPP和golang大多了。
: 当然项目选择语言,各家各个项目组,历史现实都不一样,不好判断
h
hyhl
91 楼
哈哈,那帮国家队踢球的也不是笨蛋,天分有限倒是真的, 因为合适的可供选拔的人
才太少了。美国足球也还马马虎虎了,主要问题是其它几项运动太火把人才分流了。中国的问题是场地都被拿去造房子,开演唱会,跳广场舞了,没地儿踢球。
【 在 lestrois2000 (lestrois2000) 的大作中提到: 】
: 中国都是笨蛋去踢球,负筛选,能踢得好才怪。一流霸主的国家足球不会强。
h
hyhl
92 楼
哈哈,没错。我是假设有足够多的C++牛人。但这个假设在实际生活中基本上是不存在
的, 所以程序往往在性能和稳定性上都会有问题,尤其是在使用时间比较长,牛人慢慢流失的情况下。 其实楼主把自己克隆1万个,很多问题就解决了。:)
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: C++性能并不好,因为缺少轮子,你又不可能自己手撸所有的
m
magagop
93 楼
你說的應該是c++03 stl性能不好,老黃曆了,現在正在改變。
c++11和c++03是兩種語言,c++20和c++11/03比則是第三種語言。

【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: C++性能并不好,因为缺少轮子,你又不可能自己手撸所有的
x
xiaoju
94 楼
C++1x也是垃圾

举个例子,用C++写加密层如何无缝切到GPU上?

【 在 magagop (magagop) 的大作中提到: 】
: 你說的應該是c++03 stl性能不好,老黃曆了,現在正在改變。
: c++11和c++03是兩種語言,c++20和c++11/03比則是第三種語言。
w
wdong
95 楼
C++20都有了啊。刚刚看了眼,感觉也没啥大差别。

【 在 magagop (magagop) 的大作中提到: 】
: 你說的應該是c++03 stl性能不好,老黃曆了,現在正在改變。
: c++11和c++03是兩種語言,c++20和c++11/03比則是第三種語言。
m
minquan
96 楼
golang的初衷就是智商高于80%分位低于95%分位的较优秀人才能编利索,而且在这个档秒杀竞争品种,例如python

至于你说的极限速度不如C++

不是废话吗?

C++几个能用好,几个能继承前任代码?
b
brainless
97 楼
possible features变化不小,如果能实现
【 在 wdong (万事休) 的大作中提到: 】
: C++20都有了啊。刚刚看了眼,感觉也没啥大差别。
n
netghost
98 楼
BS 這個人思維主要是推廣語言而不是拿他自己的baby來實現軟件。你看他這麼多年除
了寫書幹了啥?這種人搞出來的語言很多都是中看不中用的東西。

此外,C++性能好只有程序員把他當C來寫的時候才行,本身性能也就一般般。隨便舉個例子,任何care性能的人,會把std::string搞成那樣嗎?
【 在 hyhl (hehe) 的大作中提到: 】
: C++性能好是无可争议的,有人拿benchmark results 来证明java或者python比C++快,
: 甚至还拿leetcode的运行时间来举例,都是在搞笑。所以说这不是问题。
: 问题是stroustrup大爷弄出来C++以后三十多年了,冒出来这么多语言,各自立一个山
: 头。要是C++真得很好用,那些语言不会有生存空间。。。C++17 C++20 可能是好用了
: 很多,但是sorry, too late. 其实这和中国足球搞不好是一样的,因为中国小孩都不
: 踢球了。
: 所以存在就是合理的。当然吹牛不好。我也不喜欢AI的人吹嘘AI马上就要取代人类,紧
: 急关头一定要记得拔电源啥的。我对无人车也持保留态度。但大家都是要混口饭吃。尤
: 其如果golang比java的主要差距是在ecosystem的话,吹牛还是会很有帮助的。 :)
S
StevenTen
99 楼
看好rust,它才是有可能打败cpp的。区块链中也有用rust装逼的
b
bruklyn
100 楼
让你笑死我了,你们厂完全不用C++所以你怕C++成了这样吧,C++没那么可怕,程序开
发都有质量控制
C这种可读性差的一个牛人单干有可能,比如Linus

【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 难题就在这里
: 花钱可以招到足够的C++程序员,但是无法去除里面的沙子还是用不了。Java和C#是极
: 为抗操的语言可以扔给地球对面的印度外包公司折腾,C++这么搞就废了。