Scala和Gosu(与Java相关)之间的基本相同点和不同点是什么?

cha*_*ium 19 java scala gosu

我现在正在学习斯卡拉,并且上个月一直这样做.今天,(通过Twitter)我偶然发现了另一种看似非常相似的语言,Gosu.

Scala和Gosu在他们最有影响力的父母Java方面有哪些基本的相同点和不同点?有没有比较和对比这两种语言的网站?

Car*_*oss 27

是的,我们的语言对比图基本上是个笑话.特别是"Not Lisp"行.:)

正如斯蒂芬C从我的原始帖子中指出的那样,一般来说,Gosu比Scala更简单,而Scala比Gosu具有更高级的功能.

Scala和Gosu有许多相似之处:

  • 两者都是静态类型,但使用类型推断来减少代码膨胀

  • 两者都支持闭包和更多功能风格的编程

  • 两者都在现有Java库之上提供附加功能,尤其是在集合周围.

以下是一些差异:

  • Gosu不支持一般运算符重载

  • Gosu不为Monads提供语法支持

  • Gosu中的泛型比Java 中的更简单(以正确性为代价),它们在Scala中更多(或至少是)复杂(尽管Scala在正确性方面做得更好).

  • Gosu不支持像Scala在闭包中隐含的'_'参数这样的东西:在这种情况下它更明确.

  • Gosu对核心Java库的扩展不那么引人注目.我们将其他方法焊接到现有的Java类型上,而不是引入新的类型层次结构.

Gosu和Scala在功能方面有一个很大的区别:Gosu拥有我们所说的开放式系统.这允许人们将任意资源插入Gosu编译器.举个例子:Gosu(截至0.8.5)支持XSD和WSDL文件作为一等公民:

http://lazygosu.org/xml.html

在功能方面,开放式系统是Gosu和其他静态类型JVM语言之间的真正区别.

话虽如此,现在令人遗憾的现实是Scala在某些方面比Gosu更成熟,特别是工具.在所有主要的IDE中都有很好的IDE支持Scala.我们有一个Gosu的Eclipse插件,但它仍然处于起步阶段.同样,我们的IntelliJ插件非常新.

Scala有一个非常完整的Web框架,Lift.我不是他们的方法的忠实粉丝,但它是完整的,很多人喜欢它.

Gosu还有一个网络框架:

http://ronin-web.org

我喜欢Ronin的方法,但是我愿意,不是吗?Ronin是由非常了解Gosu的人建造的,因此,它利用了该语言的许多功能.

希望有所帮助.实际上,如果我今天开始一个项目,我可能只是因为工具支持而使用Scala.但是,如果您希望向另一个方向发展,特别是如果您的项目涉及Web服务或XSD处理,Gosu可能是一种有用的语言.从长远来看,我希望Gosu将成为JVM开发人员的务实选择,但只有时间会证明.

  • 卡森,快速评论说你的帖子的诚实是值得赞赏的.路要走. (4认同)
  • @ chaotic3quilibrium:语言对比图表就像我说的那样,是个玩笑.我实际上是那个提出它的人,最初有一个标题说"在一个完全公平和平衡的比较中,这就是Gosu如何与其他语言叠加"不幸的是,这种语言变得有争议,因为有些文化没有得到讽刺所以它是绝育的,只留下明显不公平和不平衡的图表,而没有幽默.Clojure的家伙对此非常生气,但是,总而言之,我仍然觉得这很有趣.特别是"Not Lisp"条目...... :) (4认同)
  • 顺便说一句,如果你对该营销图表的显示有任何影响,我强烈建议你敦促他们删除它,或者在Gosu没有得到一个复选标记时加入一些值.当我看到Gosu是唯一一个带有所有复选标记的人时,我的BS探测器开了.我完全决定完全无视Gosu.然后,我想我会看到它在SO上有什么样的声誉,并且只发现了两个带有gosu-lang标签的帖子.因此,我发布了这个问题. (2认同)
  • 干得好 - 你没有试图抨击Scala的事实为你的答案增添了可信度.顺便说一句,在这一点上,Scala开发人员在查看Web框架时也应该看看Play.事实上,熟悉整个Typesafe堆栈可能会付出代价. (2认同)

Lan*_*dei 16

古薮对照表是有点不公平的斯卡拉:从Java的转换很容易(你不必须使用所有的花哨的东西,斯卡拉在开头),以及仿制药具体化Scala有不完美,但被称为可行的解决方案舱单.当然,缺少Scala闪耀的类别(模式匹配,更高级的类型...)

  • @fernacolo:Scala的语法差异并不是随意的,它们有充分的理由:类似Pascal的`name:type`顺序更适合类型推断.Java的数组语法是一个例外,使它们与集合非常不同.在修复之后,`[]`是"自由的",并且可以用作`<>`的更可读的替代方法,无论如何都是被滥用的运算符.但重点是Scala的语法比Java更加*一致*,我认为这是不兼容的.你应该试着克服它,这是值得的. (4认同)
  • 不,Scala的"动态"功能与开放式系统无关.开放式系统允许您以**静态**类型的方式公开非Gosu资源.它可以用于_implement_动态类型(以及静态检查的协议),但它完全是一个不同的功能.我同意你可以使用Scala的一个子集来实​​现与Gosu接近的东西.你仍然会有更复杂的泛型系统,如果你正在查看其他人的代码,你将不得不依赖他们的口味.Gosu旨在简单而一致.(我当然有偏见.) (3认同)
  • 我必须同意,如果你只使用Gosu中也存在的Scala的那些功能,那么从Java过渡并不困难.我还认为2.9中即将出现的"动态"支持直接相当于Gosu的开放类型.因此,只需留下Manifest,一个更强大的生态系统,更好的并发支持和一系列额外功能作为差异化因素. (2认同)