喷下go语言

中山野鬼 发布于 2013/08/13 23:01
阅读 3K+
收藏 6
Go

最近看了go语言的一些新闻,又大概翻了翻资料。不多,一点点,wiki上的介绍。摘抄如下:

Go语言的语法接近C语言,但是对于变量的声明是不同的,其他语法不同之处是For循环if判断式没有括号围绕。Go语言支持垃圾回收功能。Go语言的并行模型是以东尼·霍尔CSP为基础,采取类似模型的其他语言包括occamLimbo[1],但它也具有Pi运算的特征,比如通道传输。

与C++相比,Go语言并不包括如异常处理继承泛型断言虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持[1]。当然,Google 对于泛型的态度还是很开放的,但在该语言的常见问题列表中,对于断言的存在,则持负面态度,同时也为自己不提供型别继承来辩护。不同于Java,Go语言内嵌了关联数组(也称为哈希表(hashes)或字典(dictionaries)),就像字符串类型一样。

==============

这中间的亮点有且仅有一个。就是 东尼.霍尔。这家伙是大牛。其余的基本也就这样了。中间有些技术,不是一般程序员(依赖垃圾回收功能级别的程序员)随便就能设计的。比如并行模式,通道传输,管道等。

估计我又要被喷了,说不学习新东西。如果想喷我,我一向不介意,但希望针对下面的讨论喷,而不是上面。

传统的cpu,广义上的并行计算无法三种。以前我说过,向量计算,sse mmx 等指令集。并发计算,dsp的指令集。和多线程计算。如果说现在我们的程序,不考虑io的堵塞,进程通讯对于本进程而言,也是io。耗时的,无非是函数跳转(说来说去是状态机),和纯逻辑计算(加减乘,与或非,外加比较 和位移),数字计算机没有除法指令,是其他代码组合出来的。

就高级语言而言,如果是状态机方面的,就是你的判断加跳转,多线程和并发还有向量对你都是白搭,你是无法回避逻辑状态的,这块给你再多cpu,再怎么样的优化,能省的,各种语言写干净点(别动不动一个函数调一个函数的)也就省掉了,省不掉的,换汇编都没着。余下就是拼硬件。所谓硬件流水线增加,无非多几个分支同时计算,遇到长跳转(调用函数,特别是类里的成员函数)一样白搭。如果这个也叫并行,那么你用哪家cpu,就用哪家编译器。保证大多数情况下,好使。

上面的结论,简单说,go给你带来不了任何东西,关于并行方面。无非给你一些特定的写法规则,使得编译器能尽可能的利用硬件特性。说句难听的,在intel的cpu上,还是intel的 编译器好使,它的datasheet会告诉你怎么书写高级语言会让编译器更好的利用机器特性来优化代码实现。你要想玩性能,有学习go的空,不如去好好翻翻intel的编译器方面的资料。

至于其他方面无非给你个实现模式而已。要说用来快速堆建逻辑,这或许方便。但要针对特定问题,进行特定性优化,这方面还是裸的c/c++代码更有效。因为不需要针对那些模式来设计。一个任务有多种实现模式。

总结一下观点。语言这个东西,好快更多在于是否方便快速实现。拼性能的事情,实话实说,就是用c,也要参考一对硬件特性,无非c能代笔的地方c代笔,代笔不了的地方,还是要汇编。所以,谈语言,别谈性能。至于垃圾回收功能,我的态度一向是,依赖垃圾回收功能的程序员,最终只是让自己的代码越来越垃圾。

大家讨论go,不要讨论性能,倒是应该讨论讨论,它适合做什么,这个更靠谱点。。

额外喷一句并发,分布式、集群等等。除非有人告诉我lex ,yacc sb了,语法分析现在已经进步了,可以对单线逻辑状态自动拆借了,ok,或许多核处理可以加速计算了。否则,并发、分布式、集群都不是哪个语言说可以替代的。最简单的一个道理,有人问我为什么说hadoop是个玩具,答案是,它帮你做了很多底层的事情,而它不知道你究竟要什么,它以为你知道这个事实,最终,只能你玩它它玩你。

简单说,即便是计算负载平衡,面对不同的场景,算法都不一样,你敢说找个什么架构,下面的东西都是别人按照一个套路做好的就可以通吃天下了?这不是玩具是什么?


加载中
2
宏哥
宏哥

这个破玩意, 

论完整性, 不如python,C#

论性能小巧, 不如lua,

web不如PHP

Google下的臭蛋

帖子列表
帖子列表
我大PHP终于还有web,泪奔
xesam
xesam
按照这种比法逻辑,没有一个语言不被喷。 C语言——论web不如php。 PHP——论性能不如C。 python——论小巧不如lua。 lua——论功能不如python。 没完没了,有意思吗
1
中山野鬼
中山野鬼

引用来自“ParosFish”的答案

因为文章里的错别字实在太多,所以看了两遍,但又实在没看出来你想喷Go什么?东扯西拉的喃喃自语,不知道你想表达的主旨是什么。倒是几个“无非”让人觉得貌似在炫技,又有点像半瓶水的产品经理:“这个无非不就是XXX嘛?怎么要这么长开发时间呢?!”

这中间的亮点有且仅有一个。就是 东尼.霍尔。这家伙是大牛。其余的基本也就这样了。

=================================================

首先,东尼.霍尔跟Go没有直接关系,只是Go的并行模型是以他的CSP为基础(鄙人水平太低,第一次听说东尼.霍尔,所以去维基查了一下)。另外,不知道Kenneth Thompson算不算大牛?至少我知道不少人是因为他的号召力才皈依到了Go


哈,反对这个喷,都说喷下面别喷上面了。要喷就喷点道理出来。这边能让我学习知识的帖子或回帖真的不算多。至于我的结论我写的清清楚楚。看好了再发言。。。如果go语言和他有关系,我倒真要研究研究了。。。

至于错别字嘛,自从不用微软abc了,错别字就一直存在,哈,各位就怪智能输入法吧。

1
mallon
mallon

和D语言一样,你可以把它看作Express C,提供比C相对高级的功能,降低编码复杂度和编码量,同时又保留了C语言编译的特征;C++其实也干这个,不过是半吊子;Python Java的语法更高级,更能降低程序员的工作强度,但是却失去了编译带来的优势。

你硬要拿CPU本身提供的功能说事我也没办法,事实上C语言汇编语言也能写复杂的程序,比如以前DOS下面的经典软件,不过工作量摆在那里。

至于Go语言能不能流行,我是持否定看法的,这和Google的政策有关,是另一回事,哈哈。

1
viney
viney
golang爱好者,我是来围观的。喜欢,不解释。你喷或不喷不影响我对golang的喜爱。
1
七念
七念

引用来自“f223156”的答案

引用来自“唐海”的答案

go粉确实很搞笑,google定位go是系统级编程语言,也就是做服务器端开发用的,可惜,搞服务器开发的基本不屑于用这个,倒是吸引了一帮go粉用go来搞web,笑死人了。


谁忽悠你go是系统级编程语言的? 一门不能被编译成动态链接库, 不能被其他语言embed的系统级编程语言? 

go的定位本身就是应用级语言, web开发也是重头, 标准库里带全套http服务器,parser和template,甚至包括数据库连接池, 哪门不看重web开发的语言会有这待遇? 更别提一开始的时候甚至websocket都是go的标准库, 现在虽然分拆出去, 也是go官方在维护

谁告诉你的目标是应用级语言了?给你个链接仔细看下,用GO开发WEB本来就是吃饱了撑的!

http://golang.org/doc/faq#What_is_the_purpose_of_the_project

懒得翻译了

By its design, Go proposes an approach for the construction of system software on multicore machines.

还有GO语言开发目的(懒得翻译):

What is the purpose of the project?

No major systems language has emerged in over a decade, but over that time the computing landscape has changed tremendously. There are several trends:

  • Computers are enormously quicker but software development is not faster.
  • Dependency management is a big part of software development today but the “header files” of languages in the C tradition are antithetical to clean dependency analysis—and fast compilation.
  • There is a growing rebellion against cumbersome type systems like those of Java and C++, pushing people towards dynamically typed languages such as Python and JavaScript.
  • Some fundamental concepts such as garbage collection and parallel computation are not well supported by popular systems languages.
  • The emergence of multicore computers has generated worry and confusion.

We believe it's worth trying again with a new language, a concurrent, garbage-collected language with fast compilation. Regarding the points above:

  • It is possible to compile a large Go program in a few seconds on a single computer.
  • Go provides a model for software construction that makes dependency analysis easy and avoids much of the overhead of C-style include files and libraries.
  • Go's type system has no hierarchy, so no time is spent defining the relationships between types. Also, although Go has static types the language attempts to make types feel lighter weight than in typical OO languages.
  • Go is fully garbage-collected and provides fundamental support for concurrent execution and communication.
  • By its design, Go proposes an approach for the construction of system software on multicore machines

不过说实话,GO的语法真JB丑

0
中山野鬼
中山野鬼

引用来自“宏哥”的答案

这个破玩意, 

论完整性, 不如python,C#

论性能小巧, 不如lua,

web不如PHP

Google下的臭蛋

我还不敢说它好坏,因为我压根不知道它能做什么。例如python,做个胶水不错,做个图论网络的引擎,靠,上千个点,就基本上死了。。。。。每个事情都有特点这最好。问题是特点在不同环境下,会变成优点或缺点。怕就怕热乎的东西, 大家都不知道它的特点,适合的应用场景。。。。
0
宏哥
宏哥

引用来自“中山野鬼”的答案

引用来自“宏哥”的答案

这个破玩意, 

论完整性, 不如python,C#

论性能小巧, 不如lua,

web不如PHP

Google下的臭蛋

我还不敢说它好坏,因为我压根不知道它能做什么。例如python,做个胶水不错,做个图论网络的引擎,靠,上千个点,就基本上死了。。。。。每个事情都有特点这最好。问题是特点在不同环境下,会变成优点或缺点。怕就怕热乎的东西, 大家都不知道它的特点,适合的应用场景。。。。
python 可以直接调用C的动态链接库, 比C调用还方便.
宏哥
宏哥
回复 @f223156 : python 可以直接调用DLL, 从脚本调用, 对于测试很有裨益。 不需要编译链接过程
f
f223156
go调用c库比python方便,除了import "c"后直调,还可以通过注释直接include h头和分平台设置编译参数.
0
习总
习总
天朝码农的跟风习气蔚为奇观
0
小耶果
小耶果
Go的最终目标定位个人认为是想做Native版的Erlang.
荷风居士
荷风居士
D语言同样也想做Native Erlang。个人感觉就并发方面,D语言做的比go好,其它方面设计理念和哲学不同,不方便比较。
okgood
okgood
Go的名字起的好,Go!Go!Go!
0
holyzhou
holyzhou
不明觉厉。
isaced
isaced
+1
牛仔豆
牛仔豆
+1
十舍七匹狼
十舍七匹狼
+1
渔樵耕读
渔樵耕读
+1
返回顶部
顶部