Go 与 泛型: 优点 or 缺陷

2017-02-08 09:26:18 +08:00
 banxi1988

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

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

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

注: Russ Cox 目前是 Go Team 的 leader

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

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

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

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

9016 次点击
所在节点    Go 编程语言
128 条回复
bianhua
2017-02-08 20:14:29 +08:00
@jarlyyn

> 我认为语言之间当然没有优劣之分,只有适合不适合。

NO NO NO ,语言自然有优劣之分。说没有只是 PC 而已,为了避免争吵。

语言有优劣之分,也有是否合适。

只是大多数流行的语言在竞争的压力下,选择了自己的专长(适用领域)。有很多语言因为“劣质”的原因,根本没有机会流行起来,或者只是流行了一小段时间。
jarlyyn
2017-02-08 21:14:39 +08:00
@bianhua

原来这样啊,那不知道语言的优劣的标准是什么?

lua 和 c#那个优,哪个劣?
noli
2017-02-08 23:40:51 +08:00
@jarlyyn

评判语言优劣需要设定标准。有些标准是主观的,譬如说适不适合啊,是否方便阅读啊;但有些标准是可以用数理逻辑去验证的,譬如各种语言 feature 的正交性、语法二义性、语义表达能力,

在正交性方面, Lua 比 C# 的正交性好——意味着语言的各种元素、元对象的组合控制能力比 C# 来得精确。例如 lua 的 table 完全可以模拟 OO 的继承、多态;

但是 C# 的语义表达能力又比 lua 好——实现同样的抽象逻辑,使用 C# 可以写更少的代码。而 C# 如果不套用 OO 的逻辑,完全可以借助泛型和反射实现 Lua 的精确控制能力。

综上, C# 是一门比 Lua 好的语言。

当然啦,不关心细节的码农,大概是什么拿到手只要为其所用就好——就像有些人的择偶要求,女的活的,就可以了。
当人只需要满足低级需求的时候,谈什么是好的就是奢侈。
当使用编程语言只需要交货满足工程需要的时候,谈特性都是废话。

你也是这么看的吧?
jarlyyn
2017-02-09 00:47:28 +08:00
@noli

当然不是。

我压根不关心特性,我只关心场景。

正好这两门语言都是我用过一段的语言。

这两语言对我而言没什么优劣。

如果写 windows 桌面程序,我肯定用 c#。

如果写用来写嵌入式的脚本,我肯定用 lua 。

c#和 lua 的生态本质上也是围绕这两个语言适合场景发展的。不存在好不好。哪怕可能有其他的第三方库 /转译器。我也不会选择。

当然,这两个场景,我都不会选 go 。

就我而言,目前的选择大概是

网页 /模板语言选择 php,这个方向放弃过 python

重接口的服务选择 go,这个方向放弃过 nodejs

嵌入式脚本选择 lua ,这个方向放弃过 js

维护脚本选择 python+shell

简单的 ui 界面选择 electron+nodejs/go,这个方向自从我换过主系统后放弃过 c#,VB 等一票

我只看某个场景适合不适合,不太考虑语言特性,甚至会放弃某些语言中比较特殊的特性。

所以 python 和 perl 我会喜欢 python

所以 nodejs 和 go 我会喜欢 go

一定要我说什么语言好的话,我会倾向与更简单通用,学习成本更低的语言。

就这么简单。
noli
2017-02-09 01:42:25 +08:00
@jarlyyn 这只能说明,你的软件生涯里面大多数时间是不断地创造和交付程序而很少长期维护, code base 对你来说是不存在的概念。就酱,夏虫不可语冰。
ototsuyume
2017-02-09 06:39:59 +08:00
都什么年代了还拿语法特效来黑 Go 。 Go 的设计意图已经够明确了,不在乎语法优不优美特性丰不丰富,只在乎效率,不光是运行的效率还有团队的开发效率,完全就是一种对工程妥帖的选择。不然那么多创业公司用 Go 是眼瞎了嘛
zzWinD
2017-02-09 08:13:12 +08:00
一门语言能被喷是好事情。
PHP 被喷了这么久 还是屹立不倒 JAVA 也是
vagary
2017-02-09 08:37:20 +08:00
@noli
大神,想听你说说 C# 有哪些缺点
ikaros
2017-02-09 09:12:59 +08:00
@ototsuyume 我觉得除了在错误处理方面 golang 做得不够优雅,其他地方我觉得都不错,而且退一步说,即使语言本身设计不够优雅也可以通过代码结构调整使之优雅.
jokerjoker
2017-02-09 09:57:04 +08:00
@noli 我表示赞同你,C#应该是目前世界上最好的语言了
zhouquanbest
2017-02-09 10:02:29 +08:00
我选 Kotlin
当 Java 的同人就可以了
gc532
2017-02-09 10:02:36 +08:00
Let's Rust.
pooker
2017-02-09 10:20:46 +08:00
脱离业务场景大谈特谈语言优缺点都是耍流氓
vicalloy
2017-02-09 10:42:48 +08:00
不是特定语言的死忠,不想加入混战,不过还是想说一句,语言本身也是有优劣的。
比如我就认为
Swift 就比 Objective-C 要优秀很多。
Python 比 Perl 要优秀很多。
Rust 应当会比 C++优秀很多(这个没有真正用过,所以是应当)。

拒绝承认开发语言的优劣就是拒绝承认技术的进步。
jarlyyn
2017-02-09 10:44:54 +08:00
@vicalloy

虽然我很喜欢 python,很不喜欢 perl,但 python 比 perl 优秀是什么鬼?

这分明是不同的价值取向。
repus911
2017-02-09 11:29:12 +08:00
混迹这么久 一直以为 jarlyyn 挺激进的 看了会儿发现 noli 更激进 形同喷子
"没有想到任何别的场合是能用的"
"自认为是码农""降纬攻击"
"golang 吹 v2 上特别多"
"不关心细节的码农"
"夏虫不可语冰"
道德至高、下定义、贴标签 然而也没看出来能力如何
(装了逼就跑 真 TM 刺激
wph95
2017-02-09 11:37:24 +08:00
看了楼上的讨论,得出结论
1. Google 是傻子 ,选 Golang 写 k8s 。而不是选 C#
2. C# 强无敌,快一统江山。
3. lua 也会被 C# 干翻
bianhua
2017-02-09 12:08:49 +08:00
@jarlyyn

你倒是很会挑对自己有利的例子。但当我拿出 QBASIC 和 GVBASIC ,你还能说出什么来么?

当然可能你只听说过 TIOBE TOP 10 上的那些语言,写过的更少,所以才得出那些结论。但我已经说过了,流行的语言已经找到了自己的适用域,所以它们才没有被抛弃。

其实你拿 TIOBE TOP 50 和 TIOBE TOP 10 比比就能得出结论了——一些语言就是没有令一些优秀。

关于语言之争,其实引起争论的原因不是语言,而是在这些语言的背后,使用这些语言的人——当你开始批评一种语言的时候,不可避免的会激怒一些使用这些语言的用户——如果这些语言有用户的话。这就是为什么会有那种 PC 式的陈述句,避免让自己暴露在非理性的漩涡中。

但是,一件东西会比另一个东西好,这是自然的,就像一个人会比另一个人优秀、一个设计比另一个设计好看一样。所以当你说“这些东西没有好坏之分”的时候,要么是在说谎,要么是在犯错。
jarlyyn
2017-02-09 12:22:54 +08:00
首先指出几个问题。

1.QBASIC 和 GVBASIC 都是 basic 语言,不知道你想说什么?

2.lua 啥时候上过 tiobe top 10 了?

一个东西会比另外一个东西是自然不可能的,东西是客观存在,好与不好是每个人的主管判断,这是一个基本的哲学常识。

说 A 这个人比 B 这个人好,没有场景的话,鬼知道是什么意思?

心地好?

能力强?

人工成本低?

善于沟通?

所谓的好看,也只是好 /优秀的某一个标注而已。

你还需要好好了解这个世界
jarlyyn
2017-02-09 12:30:22 +08:00
@bianhua

再细化一下关于你两种 basic 的问题。

说真的,在这个论坛被人义正言辞的问这个问题,真的很冷幽默。

我是 BASIC 入门的,从当年小霸王自带的 basic 开始,到 Q Basic,到 VB ,都写过一定的程序。

第一次看到把具体的语言实现当成语言本身的。 golang 还有个 gccgo 呢

按你的分法, C 是不是还分 borland c,tubor c,vc,gcc,clang?

java 是不是也要按不同的 jvm 来分为不同的语言?

c#也分.net 和 Mono?

真的很佩服你一本正经说瞎话的强大内心。

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

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

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

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

© 2021 V2EX