之前看到 Go 中国 的文章: 为什么说 2017 年你必须要学习 Go 了
其中把 Go 语言没有泛型作为其优点之一.
昨天晚上看到新发的文章: Russ Cox 的 2017 年 Go 开发计划
注: Russ Cox 目前是 Go Team 的 leader
其中对于泛型有这么一两句话:
我不相信 Go 团队曾经说过“ Go 不需要泛型”
但我们确实明白,对于 Go 来说缺乏参数多态性是一个显著的障碍。
这样看来, 在 Go 开发团队眼中, Go 没有泛型并不是一个优点啊.
102
noli 2017-02-09 18:23:25 +08:00
@jarlyyn
golang 利用多值返回来传递 err 就是滥用特性的做法。 golang 使用者大规模地使用这种方式写代码,实际上就是在大规模地制造臭代码,制造有漏洞的软件。 我对狗钻狗洞没有意见,我也对 gopher 出于解决问题写臭代码也没有意见。 但非要说 golang 设计良好没有问题,我不赞同,就好像我不赞同出于和狗玩耍去钻狗洞这种行为一样。 还不让人说不好?真是你弱你有理啊。 |
103
jarlyyn 2017-02-09 18:33:50 +08:00
@noli
或许你对别人说你是狗没意见,对不起,我有。 你的理由建立在这是臭代码的基础上。 可惜。我觉得你列出的两种方法,第二种比第一种好多了。 你要说你觉得怎么样,是你的权利。 但是针对,攻击其他和你观点不一样的人,就实在是太 LOW 了。 |
104
l1093178 2017-02-09 18:40:57 +08:00
@noli golang 最蛋疼的地方是还有 nil...这都是 [billion-dollar mistake]( https://en.wikipedia.org/wiki/Null_pointer#History) 了, Rust 和 Swift 都消灭了这个问题,就只有 Golang 还保留了 null reference
|
105
noli 2017-02-09 18:42:02 +08:00
@jarlyyn 你觉得被我针对,觉得我人身攻击你,觉得不开心,那你就 block 我。废话少说,要战便来战。
欢迎你提出,为什么通过多值返回传递 err 会比 Either monad 好。 我确实没见过这个立场的意见,你告诉大家,大家都会很开心的。 |
106
jarlyyn 2017-02-09 18:46:47 +08:00
@noli
首先, V2EX 是不允许人身攻击的 https://www.v2ex.com/about 所以,我需要做的是联系站长,而非 block 你,不要搞错,你自以为的一套逻辑对你而言可能觉得天大地大,可惜在我这里一文不值。 和你战?对不起,暂时没发现你有这个资格。 其次。我用的爽,所以传递 err 比另一种方式好。这就是最大的理由。 你没见过的东西多了,我个人很为那些东西感到庆幸。 |
107
noli 2017-02-09 19:02:13 +08:00
@l1093178
Swift 其实真的很不错,我唯一觉得不顺眼就是没有 namespace 可能是考虑到 Swift 为了兼容 OC 的 msg 机制 考虑有两个 interface 位于不同的 namespace 下但是有同名的 msg ,这种问题它觉得没有把握能处理得好,所以不做 namespace 也是可以理解的。 据说 Swift 4 之后打算开始 API 兼容了? |
110
noli 2017-02-09 19:40:38 +08:00 1
@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 来写是有偶然性的。 但我认为这一点不能否认语言设计,如果是一门学科的话,那么这个学科是有道理可讲的。 然后最后大家看到了,他的意思是不想听。 综上,我觉得他就是来找碴的,道理不想听不理解对他来说等于没有。 如果因为觉得我言辞激烈,认为我是个喷子,我不冤,因为我就是想激烈地反对无脑之人。燃烧激情的人生比死水一潭的人生有趣多了。我都三十好几的人了,保持这么中二不是我没开窍,而是我觉得这是快乐。 像他那样,又拒绝交锋,又想自吹自擂。我只想说:不知所谓。 来喷吧。 |
112
jarlyyn 2017-02-09 21:36:10 +08:00
@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 ”是在给我建议,还是指代我超能喷? 后者的话谢谢你欣赏,我一向觉得既然都要嘴上交锋了,还要顾及什么喷子不喷子的评价,那真是活得不明白“ 喜欢喷人,以喷人为荣的盆子,无法与人正常沟通又看不到未来的屌丝。 不论我积累了怎么样暴烈的情绪,准备了怎么样刻薄的话语,看到这么一个 无法与人正常沟通又看不到未来的屌丝 ,都只能不受我理智控制完完全全的转换成了那浓浓的,浓浓的同情啊。 这还让我怎么战? |
113
chingli 2017-02-09 22:01:47 +08:00 via Android
这种讨论意义不大了,讨论对象比较复杂,每个人都有自己的理解。现在的问题是,好多人都只从自己的角度想问题,看到自己看到的美与丑。
世界上没有最好的语言,我们也不可能有完美的语言,选个差不多的能解决问题就行了。说实在的,能拿来在这里辩论的都是好语言。你们是没用过其他行业真正让人想骂娘的语言。 无论如何,不要人身攻击,维护社区气氛,否则上 V2 也没有意思了。不好意思,我故作高姿态了! |
114
noli 2017-02-09 22:22:32 +08:00
@jarlyyn
1. "copy 者是指用途,设计思想,功能,服务对象相似" 按你的理解,通用编程语言看来都是一样的了对吧? 所以我指出,你总是回避讨论细节,你就没有资格认为语言说语言没有好坏。 2. “因为好或者坏不是一个客观范畴内的东西。 这个世界本没有好与坏。” 很明显我们不是在讨论哲学,不是在讨论世界,我们在讨论编程语言的特性和缺陷,你装什么高深呢? 不想承认自己没货很丢脸的话,你闭嘴就好了。 3. 我傲慢是因为是恃才傲物。 我有干货。 你除了一直在评论我的为人之外,显得你很有洞察力之外,我没看到为什么不应该对你有傲慢——谁叫你没货。 来啊,有别的本事使出来。 说我傲慢我疯子我神经病我也认了。 不想招惹疯子你就闭嘴,就这么简单。 |
115
jarlyyn 2017-02-09 22:37:38 +08:00
@noli
1.我的意思是通用编程语言看来怎么样根本就不重要,我也不关心,我不看细节,只看结果。 如果结果都不重要,那这个世界就没什么更重要的了。 2.大部分情况下,特性本身就是缺陷,缺陷本身就是特性。可惜你讨论的并不是特性与缺陷,而是试图判断一门语言好或者不好。 3.别的不说,你的确很难和人正常沟通。 我才是傲慢,正在对你偏见。 你?我只有同情。 真的不关心你到底怎么样怎么想。 |
116
a3358387 2017-02-09 23:07:31 +08:00
顶一下。
|
117
noli 2017-02-09 23:10:43 +08:00
@jarlyyn
1. 所以说白了,就就不是在讨论语言优点啊缺陷啊,什么的。 你需要的只是你说,做 XXX 项目我用了某某某语言。 至于为什么用,不为什么,就因为我喜欢,我觉得好用,我学了,我听说他好用…… you don't even try to be helpful. 你不是重视结果,你只是反理性。 2. “大部分情况下,特性本身就是缺陷,缺陷本身就是特性” 别在玩弄你的概念偷换大法了。 golang 有 interface 就是有缺陷,没有泛型就是没有缺陷。是不是啊? 当然你也说了,懒得跟我说。 没事,本来我的目的只是希望大家别听你胡扯。你不用特地告诉我,我人好,还是希望你多分享。 3. 就算你我傲慢与否对会有偏见,只不过我选择展示我的偏见 而你希望假装没有。 好了,不跟你玩了,已 block 。 |
118
a3358387 2017-02-09 23:13:18 +08:00
继续!!!
|
119
ptyfork 2017-02-10 16:45:01 +08:00
多返回值返回 error 我觉得挺好用的,楼上几位喷了么多。。。
但是 go 自己标准库对 error 使用真是很烂,前面提到的判断网络连接是不是被重置了,居然要用字符串匹配。 |
120
situs 2017-02-10 18:21:55 +08:00
题主一脸懵逼:有人能只说说 go 与泛型的不,我好像没问 c#。。
|
121
Balthild 2017-02-11 15:03:54 +08:00
@noli 只要有用 JS 写出了 OS 的例子,那「 JS 可以写 OS 」有何错误?
同样,只要 golang 有至少一个非业务场合的应用(这里举的例子是 docker ),那「 golang 除了写 业务 server 之外,没有想到任何别的场合是能用的。 」这句话即被证伪了。 |
122
Balthild 2017-02-11 15:10:14 +08:00
↑不小心按了回复。
上述论证基于以下定理: 全称命题 ∀x∈M, p(x) 的否定命题是 ∃x0∈M, ~p(x) |