Go 与 泛型: 优点 or 缺陷

2017 年 2 月 8 日
 banxi1988

之前看到 Go 中国 的文章: 为什么说 2017 年你必须要学习 Go 了

其中把 Go 语言没有泛型作为其优点之一.

昨天晚上看到新发的文章: Russ Cox 的 2017 年 Go 开发计划

注: Russ Cox 目前是 Go Team 的 leader

其中对于泛型有这么一两句话:

我不相信 Go 团队曾经说过“ Go 不需要泛型”

但我们确实明白,对于 Go 来说缺乏参数多态性是一个显著的障碍。

这样看来, 在 Go 开发团队眼中, Go 没有泛型并不是一个优点啊.

11101 次点击
所在节点    Go 编程语言
128 条回复
jarlyyn
2017 年 2 月 9 日
@noli




@livid

#99

这人人生攻击没底线了
noli
2017 年 2 月 9 日
@jarlyyn

golang 利用多值返回来传递 err 就是滥用特性的做法。 golang 使用者大规模地使用这种方式写代码,实际上就是在大规模地制造臭代码,制造有漏洞的软件。

我对狗钻狗洞没有意见,我也对 gopher 出于解决问题写臭代码也没有意见。
但非要说 golang 设计良好没有问题,我不赞同,就好像我不赞同出于和狗玩耍去钻狗洞这种行为一样。

还不让人说不好?真是你弱你有理啊。
jarlyyn
2017 年 2 月 9 日
@noli

或许你对别人说你是狗没意见,对不起,我有。

你的理由建立在这是臭代码的基础上。

可惜。我觉得你列出的两种方法,第二种比第一种好多了。

你要说你觉得怎么样,是你的权利。

但是针对,攻击其他和你观点不一样的人,就实在是太 LOW 了。
l1093178
2017 年 2 月 9 日
@noli golang 最蛋疼的地方是还有 nil...这都是 [billion-dollar mistake]( https://en.wikipedia.org/wiki/Null_pointer#History) 了, Rust 和 Swift 都消灭了这个问题,就只有 Golang 还保留了 null reference
noli
2017 年 2 月 9 日
@jarlyyn 你觉得被我针对,觉得我人身攻击你,觉得不开心,那你就 block 我。废话少说,要战便来战。

欢迎你提出,为什么通过多值返回传递 err 会比 Either monad 好。
我确实没见过这个立场的意见,你告诉大家,大家都会很开心的。
jarlyyn
2017 年 2 月 9 日
@noli

首先, V2EX 是不允许人身攻击的

https://v2ex.ih06.com/about

所以,我需要做的是联系站长,而非 block 你,不要搞错,你自以为的一套逻辑对你而言可能觉得天大地大,可惜在我这里一文不值。

和你战?对不起,暂时没发现你有这个资格。

其次。我用的爽,所以传递 err 比另一种方式好。这就是最大的理由。

你没见过的东西多了,我个人很为那些东西感到庆幸。
noli
2017 年 2 月 9 日
@l1093178

Swift 其实真的很不错,我唯一觉得不顺眼就是没有 namespace
可能是考虑到 Swift 为了兼容 OC 的 msg 机制
考虑有两个 interface 位于不同的 namespace 下但是有同名的 msg ,这种问题它觉得没有把握能处理得好,所以不做 namespace 也是可以理解的。

据说 Swift 4 之后打算开始 API 兼容了?
aias
2017 年 2 月 9 日
@noli 那人超能喷..朋友当心啊
l1093178
2017 年 2 月 9 日
@noli 对, 4.0 的主要目的就是源代码兼容性和稳定标准库的 ABI
noli
2017 年 2 月 9 日
@aias
是在给我建议,还是指代我超能喷?
后者的话谢谢你欣赏,我一向觉得既然都要嘴上交锋了,还要顾及什么喷子不喷子的评价,那真是活得不明白。
前者的话,那我顺带总结(读音:吐槽)两句

@jarlyyn 这个人在本帖里的事迹:

一开始说 C# copy Java 。 #28
我举出 C# 的独特特性, #34
他又说不讨论特性 #36
那好,说 C# copy Java 的根据是什么呢?

又说,语言没有优劣之分,而 golang 试图在 C 的领域里面做得更好。
我说 golang 不能写 GUI , C 起码还是有 GTK 的, golang 在这个方面没有贡献。暗示 golang 比不上 C #43
后来纠结谁是某某语言吹,
直到 #64 又来自说自话,语言没有好坏,只看场景。

我深感遗憾,说了那么多浪费那么多时间,结果这人不看语言特性,看应用场景 golang 又被反驳,又来这句来说明语言没有优劣——其实就是重复自己的观点:语言没有优劣,但为神马,我不说。 #94

其实他自己也承认,语言社区发展起来很大程度不一定因为特性,是要看因缘际会的。 #94
这一点跟我的观点类似,譬如 docker 这样的重量级应用用 golang 来写是有偶然性的。

但我认为这一点不能否认语言设计,如果是一门学科的话,那么这个学科是有道理可讲的。
然后最后大家看到了,他的意思是不想听。

综上,我觉得他就是来找碴的,道理不想听不理解对他来说等于没有。

如果因为觉得我言辞激烈,认为我是个喷子,我不冤,因为我就是想激烈地反对无脑之人。燃烧激情的人生比死水一潭的人生有趣多了。我都三十好几的人了,保持这么中二不是我没开窍,而是我觉得这是快乐。

像他那样,又拒绝交锋,又想自吹自擂。我只想说:不知所谓。

来喷吧。
aias
2017 年 2 月 9 日
@noli 给你建议。这人以前经常参与撕逼,还故作高姿态
jarlyyn
2017 年 2 月 9 日
@noli

首先,我 @27 楼的说的是

“ c#作为一个 java 的 copy 者和竞争者”

在我认为的一般语境下, copy 者是指用途,设计思想,功能,服务对象相似,实在和有没有独特的特性没关系。
比如当年大家都认为马化腾的 Oicq 是 icq 的 copy 者和竞争者,尽管 Oicq 有在服务器上储存联系人的特性。
比如当年大家都认为百度是谷歌的 copy 者和竞争者,尽管百度有盗版 mp3 在线播放的特性。
你既然提出有特性是区分是不是 copy 的标准,那为什么不和#30 楼我说的那样,告诉我们为什么?

你不说,我只能认为,你觉得你的想法就是天下真理。

你在 42 楼提的提 C 的 GTK 库 CTK# 原话“做跨平台 GUI GTK#”,我就不明白你的点在哪了。 go 语言一样有 gtk 库啊?

至于 C 能做 GTK,你还真没提过,因为如果你提了,我肯定会告诉你,好歹 go 还有过一个通过 opengl 接口做的 UI 库,虽然已经被放弃了。
至于 golang 在 C 适用的场景里做的怎么样,我的原话如下:
#38 "golang 不是一直目标是 Better C 么。有谁说 golang 和 C 是没关系的么"
#46 "better C 本来就是试图在 C 用的场景上做的更好啊。 "
#46 "至于 C 和 golang 哪个应用的更广泛,在大部分场景中更有优势,自然是 C 啊。"


至于语言为什么没有优劣,我说的很清楚啊
#82 “因为好或者坏不是一个客观范畴内的东西。

这个世界本没有好与坏。

只有你认为他好,或者认为他坏。

而不同的人认定好坏的标准是不同的。”


V2 是一个不能删贴修改的论坛,所有的帖子我有引用有出处,可以看看是不是这样。

至于最后,我为什么不和你站,这也是我自己的问题啊。

装比点说,因为傲慢与偏见啊。

在我的眼中你是这样的:
#97 “喷你一点爽快感都没有,因为你自认为不需要讨论更高层次的东西,我咋秀优越感呢。你自个儿玩得开心就好。我只对你吹的 golang 感兴趣,因为 golang 真的很适合用来暴露智商”
需要靠用什么语言,喜欢什么语言才能秀优越感,妥妥的屌丝啊。

#110 “都三十好几的人了,保持这么中二不是我没开窍,而是我觉得这是快乐"
30 多岁了还只能靠语言来秀优越,真是看不到未来的屌丝啊。

#110 ”是在给我建议,还是指代我超能喷?
后者的话谢谢你欣赏,我一向觉得既然都要嘴上交锋了,还要顾及什么喷子不喷子的评价,那真是活得不明白“
喜欢喷人,以喷人为荣的盆子,无法与人正常沟通又看不到未来的屌丝。

不论我积累了怎么样暴烈的情绪,准备了怎么样刻薄的话语,看到这么一个 无法与人正常沟通又看不到未来的屌丝 ,都只能不受我理智控制完完全全的转换成了那浓浓的,浓浓的同情啊。

这还让我怎么战?
chingli
2017 年 2 月 9 日
这种讨论意义不大了,讨论对象比较复杂,每个人都有自己的理解。现在的问题是,好多人都只从自己的角度想问题,看到自己看到的美与丑。

世界上没有最好的语言,我们也不可能有完美的语言,选个差不多的能解决问题就行了。说实在的,能拿来在这里辩论的都是好语言。你们是没用过其他行业真正让人想骂娘的语言。

无论如何,不要人身攻击,维护社区气氛,否则上 V2 也没有意思了。不好意思,我故作高姿态了!
noli
2017 年 2 月 9 日
@jarlyyn

1. "copy 者是指用途,设计思想,功能,服务对象相似" 按你的理解,通用编程语言看来都是一样的了对吧?
所以我指出,你总是回避讨论细节,你就没有资格认为语言说语言没有好坏。

2. “因为好或者坏不是一个客观范畴内的东西。 这个世界本没有好与坏。”
很明显我们不是在讨论哲学,不是在讨论世界,我们在讨论编程语言的特性和缺陷,你装什么高深呢?
不想承认自己没货很丢脸的话,你闭嘴就好了。

3.
我傲慢是因为是恃才傲物。
我有干货。
你除了一直在评论我的为人之外,显得你很有洞察力之外,我没看到为什么不应该对你有傲慢——谁叫你没货。

来啊,有别的本事使出来。

说我傲慢我疯子我神经病我也认了。
不想招惹疯子你就闭嘴,就这么简单。
jarlyyn
2017 年 2 月 9 日
@noli

1.我的意思是通用编程语言看来怎么样根本就不重要,我也不关心,我不看细节,只看结果。
如果结果都不重要,那这个世界就没什么更重要的了。

2.大部分情况下,特性本身就是缺陷,缺陷本身就是特性。可惜你讨论的并不是特性与缺陷,而是试图判断一门语言好或者不好。

3.别的不说,你的确很难和人正常沟通。

我才是傲慢,正在对你偏见。

你?我只有同情。

真的不关心你到底怎么样怎么想。
a3358387
2017 年 2 月 9 日
顶一下。
noli
2017 年 2 月 9 日
@jarlyyn

1. 所以说白了,就就不是在讨论语言优点啊缺陷啊,什么的。
你需要的只是你说,做 XXX 项目我用了某某某语言。
至于为什么用,不为什么,就因为我喜欢,我觉得好用,我学了,我听说他好用……
you don't even try to be helpful.

你不是重视结果,你只是反理性。

2. “大部分情况下,特性本身就是缺陷,缺陷本身就是特性”
别在玩弄你的概念偷换大法了。

golang 有 interface 就是有缺陷,没有泛型就是没有缺陷。是不是啊?

当然你也说了,懒得跟我说。
没事,本来我的目的只是希望大家别听你胡扯。你不用特地告诉我,我人好,还是希望你多分享。

3. 就算你我傲慢与否对会有偏见,只不过我选择展示我的偏见
而你希望假装没有。

好了,不跟你玩了,已 block 。
a3358387
2017 年 2 月 9 日
继续!!!
ptyfork
2017 年 2 月 10 日
多返回值返回 error 我觉得挺好用的,楼上几位喷了么多。。。
但是 go 自己标准库对 error 使用真是很烂,前面提到的判断网络连接是不是被重置了,居然要用字符串匹配。
situs
2017 年 2 月 10 日
题主一脸懵逼:有人能只说说 go 与泛型的不,我好像没问 c#。。

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

https://v2ex.ih06.com/t/338929

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

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

© 2021 V2EX