Google Go有啥用?以及何谓好的系统编程语言

原创
开发 开发工具
在过去20年中,系统编程一直是C和C++程序员的地盘。Google上个月推出了Go语言,但是似乎没人知道这个语言适合哪些开发者!有人提出Go应该是一个不错的系统编程语言,但是本文作者通过Go与C语言的一系列比较证明了这是不可能的。最后作者还编了首小诗,认为Go一无是处。

【51CTO精选译文】Google在2009年11月推出了Go语言。关于这个Go,我经常听到的一个问题是“Go语言适合哪些开发者?”我一直未能找到一个合适的答案。甚至连Go语言自己的FAQ页面也没有对此问题给出一个确切的答案。

我认为,多数非初学者程序员不会把Go语言纳入自己的应用程序编程语言列表之中。当我指出它永远无法取代Java后,有人说我没有看到正确的统计数据。他们认为Go非常适合系统程序员。众所周知,在过去20年中,系统编程一直是C和C++程序员的地盘。通常来说,如果你进行真正的系统编程,必然属于这两个阵营之一,当然也有可能使用一点汇编语言。

好的系统编程语言

下面我将具体解释这个问题。首先,我们看一下一门好的系统编程语言的标准是什么。以下几点是我们希望它所具备的:

1、能够运行在资源受限的环境中;

2、效率高且运行时(runtime)开销小;

3、具有一个非常小的运行时库,或根本没有;

4、允许编程人员直接且“原始”的控制内存访问和控制流;

5、让编程人员能够直接以汇编语言编写部分程序。

那么Google Go语言是否满足上述要求?下面让我们逐一分析:

1、平均来说,Go语言的性能数据大约比C++差6倍左右。Go性能测试的最佳结果与C的最差结果相当。在一个应用程序环境中测试性能,Go和Java已经占了一定便宜,因为在这种环境中可能存在许多其它非内存和非CPU瓶颈,真实系统世界对原始执行时间和资源占用的要求要严格的多。(Go得10分)

Go的性能 
性能数据,左侧为C系列语言,右侧为Go

2、Go所需的内存和执行占用空间要比C和C++高得多,并非两者理想的接班人。一个有趣的实验:在Go和C++中编译Hello World示例,Go的内存开销为38K,而C++则仅为6K,比前者小84%。(Go得10分)

Go语言的内存和执行占用空间
时间、内存和代码量,Go所用与C系列所用之比

3、如果你考虑垃圾收集器,Go运行时的空间占用肯定要比C/C++大得多。更糟糕的是:Go的垃圾收集器目前还不太安全。(公正的讲,这是目前Go团队首要解决的事情)(Go得15分,此题20分)

4、在Go中可以实现原始且直接控制内存访问。如果你愿意,你可以使用这一点来研究其运行时架构。(Go得20分,此题20分)

5、Go有一个类似Java的本地接口(JNI),不过是静态连接的。(Go得20分,此题20分)

以上问题每题按20分计算,那么在满分为100分的测评中,Go的得分为75分。如果你是一个C/C++程序员,以上测评的得分肯定是满分,那么你转向Go的动机何在?加上系统编程人员通常不会迅速采用新推出的领先技术。C++也是经过了数年时间才被嵌入式C语言用户所接受。考虑到进行高质量系统编程所需要的可靠性程度,我对该领域任何新技术被接受的可能性持怀疑态度。

语法

#T#最后,我们再次看一下Go语法方面的争议,我认为这是Go所有问题的核心所在。首先我要声明,就我个人而言,不存在对Go语法的任何问题。作为一个软件开发迷,我已经学习了大量语言,如果报酬可观的话,再多学一门语言不是什么大问题。不过根据我作为一个语言讲师的经验和帕金森蒜皮定律(Parkinson’s Law of Triviality)来看,语法学习对多数人来说是一个拦路虎。(51CTO编者注:平心而论,Go语言的语法还是很出色的,而且有着阵容强大的设计者。作者此处强调帕金森定律虽然没错,但未免一厢情愿,有失偏颇。)

简单来说,帕金森定律认为,我们在讨论一件事情上所花费的时间和精力,往往和这件事的重要程度成反比,也就说,越不重要的事情,我们都能理解,就会花越多的时间去讨论;而越重要的事情,因为我们不能理解,就会花更少的时间去讨论。该定律对编程语言和语法来说尤其适用。上世纪90年代中期,向C++用户教授Java时曾遭遇阻力。从C++转向Go所面临的阻力要比从C++转向Java大的多,而这种阻力对Go的采用率非常关键。

因此,我不认为Go会取代C/C++成为新的系统编程语言。

原文:Google Go: Good For What?  作者:Dave

结语——Dave编写的一首小诗

“Go! Huh!  Yeah! (Go!哈!耶!)

What is it good for? (它有什么好?)

Absolutely nothing. (它一无是处。)

Say it again.” (再说一遍。)

51CTO编者后记:Go语言自亮相以来并没有展示一个明确的方向,Google员工将Go语言称为一个“试验性语言”,称其试图融合Python等动态语言的开发速度和C或C++等编译语言的性能和安全。一位Go语言的支持者概括而言Go语言如下:简单、快速、安全、并发、快乐编程、开源;但Go语言缺乏方向以及其“集大成者”的尝试很容易会导致其学猫不成学狗也不成,沦为四不像。尽管如此,编者仍然觉得Go语言有相当大的潜力:很多开发者对它感兴趣——不仅它的最初设计者阵容强大,而且在参与修改源代码的人群中也不乏大牛级人物。这很有可能帮助Go语言找到适合自己的方向,开拓系统编程的新方向。

责任编辑:yangsai 来源: 51CTO.com
相关推荐

2009-12-10 10:33:09

Go语言

2012-07-06 13:16:37

Google Go

2012-03-13 10:40:58

Google Go

2019-05-15 11:38:22

GoogleGo编程语言

2022-04-26 09:23:07

Hare编程语言C

2023-02-22 08:36:47

显卡VBIOS存储

2010-01-11 09:38:28

编程语言排行榜Google Go

2011-01-05 10:58:05

Google Go

2014-12-08 09:47:48

Go

2012-11-08 09:36:10

Google Go

2017-01-09 11:28:31

编程语言排行榜

2020-10-18 07:13:44

Linux系统编程信号捕捉

2020-10-10 07:18:14

Linux系统编程管道

2020-09-26 21:43:59

Linux系统编程条件变量

2020-10-05 22:01:02

Linux系统编程线程属性

2014-07-16 09:41:12

Swift传统编程

2019-02-11 08:32:22

编程语言Go

2021-05-16 18:02:52

系统编程JavaScript

2020-09-26 23:09:00

Linux系统编程读写锁

2020-09-22 07:35:06

Linux线程进程
点赞
收藏

51CTO技术栈公众号