GO-斯卡拉 - 走!有哪些主要区别?

时间:2010-07-02 12:13:39

标签: c# programming-languages scala go

我刚刚发现这个web page比较了用Scala,C#和Go编写的一些代码。我很惊讶看到Scala和Go代码看起来有多接近,比Scala代码与C#代码相比要多得多。

所以我的问题是:Scala和Go之间最重要的区别是什么?

4 个答案:

答案 0 :(得分:26)

老实说,Scala代码是以非常强制的方式编写的。我不是功能性的纯粹主义者,但是在Scaladoc的Stream class开头,将该页面的Eratosthenes Sieve代码与更短,更清晰的Eratosthenes Sieve of Eratosthenes示例进行对比。该页面的代码已经有大量的变量和while循环,更不用说 bitshifts 了。现在,我不知道对于什么被认为是惯用的Scala代码有多大的共识,但这绝对不是它的附近。因此,除了它们都是C的后代之外,它没有说出Scala和Go之间的相似性。

答案 1 :(得分:14)

我不这么认为,至少在概念上他们是非常不同的。 Go比C#更像C ++和“低级别”,而C#只有一些功能特性,而Scala允许你编写典型的“功能”代码(比OCaml或Haskell更冗长,但类似)。 Scala的类型系统相当复杂,但仍然基于类似Java / C#的基础。另一方面,Go的面向对象部分看起来很不一样。我没有尝试过Go,因为我发现它太像C级而且太低级了。作为一名Java程序员,我知道C#在技术上领先,并且在Java中缺少很多很好的功能。学习Scala时,它拓宽了我的视野,给了我功能代码的优势和力量,同时又不失去面向对象世界的好东西。经过多年的Java,Scala中的jail编程是一种非常令人耳目一新的令人兴奋的体验。

答案 2 :(得分:10)

Go只是另一种必备语言,仍在尿布中。截至目前,Go没有泛型。此外,还不支持函数式编程。

C#是一种OO /命令式语言,对函数式编程的支持很少。有仿制药。当前版本不支持协方差和反演变量注释(尽管它们是针对下一版本的语言而设计的)。

Scala是一种混合语言,它试图将两个世界中最好的东西(即OO和功能)组合成一种语言。从下图中可以看出(来源:http://james-iry.blogspot.com/2010/05/types-la-chart.html),Scala有一个非常复杂的文件系统,C#和Go都缺乏。

alt text http://www.pogofish.com/types.png

因此,特征是,Scala是三者中功能最丰富的语言(考虑OO和功能特性)。 C#确实提供了一些功能构造,但它与Scala无关。 IMO将Go与Scala / C#进行比较,就像将牛车与兰博基尼进行比较一样。

答案 3 :(得分:1)

我见过有些人几乎直接将Java代码转换为Go代码,C代码转换为Go代码等。我现在看到你几乎可以直接将Scala代码转换为Go代码。当语言具有相似的遗产时,通常不难做到。但是,比较应该在专门编写的代码之间进行,以利用特定语言的习语。我最近看了一些指针依赖的C代码几乎直接转换为Go代码。阅读不仅痛苦;它也很痛苦。

并且,为了补充MJP在Scala中的Eratosthenes筛选的示例,请查看A Tutorial for the Go Programming Language的Prime数字部分,以详细描述Go中Eratosthenes筛选的惯用并发编程实现。