我现在正在学习Scala,并且上个月一直在学习。今天,(通过 Twitter)我偶然发现了另一种似乎非常相似的语言,Gosu。
Scala 和 Gosu 与它们最有影响力的父级 Java 有哪些本质上的相同点和不同点?有没有比较和对比这两种语言的网站?
是的,我们的语言比较表在很大程度上是个玩笑。尤其是“Not Lisp”行。:)
正如 Stephen C 在我原来的帖子中指出的那样,总的来说,Gosu 比 Scala 更简单,而 Scala 比 Gosu 具有更高级的功能。
Scala 和 Gosu 有很多相似之处:
两者都是静态类型的,但使用类型推断来减少代码膨胀
两者都支持闭包和更多函数式编程
两者都在现有的 java 库之上提供了额外的功能,尤其是在集合周围。
这里有一些区别:
Gosu 不支持通用运算符重载
Gosu 不为 Monad 提供语法支持
Gosu 中的泛型比 Java 中的泛型更简单(以正确性为代价),Java 中的泛型在 Scala 中更复杂(或至少一样)(尽管 Scala 在正确性方面做得更好。)
Gosu 不支持 Scala 在闭包中隐含的 '_' 参数:在这种情况下它更明确。
Gosu 对核心 Java 库的扩展没有那么引人注目。我们将额外的方法焊接到现有的 java 类型上,而不是引入新的类型层次结构。
Gosu 和 Scala 在功能方面有一个很大的区别:Gosu 有我们所说的开放类型系统。这允许人们将任意资源插入 Gosu 编译器。例如:Gosu(从 0.8.5 开始)支持 XSD 和 WSDL 文件作为一等公民:
在功能方面,开放类型系统是 Gosu 和其他静态类型 JVM 语言之间的真正区别。
话虽如此,目前不幸的现实是 Scala 在某些领域比 Gosu 成熟得多,尤其是在工具方面。在所有主要的 IDE 中都对 Scala 提供了很好的 IDE 支持。我们有一个 Gosu 的 Eclipse 插件,但它仍处于起步阶段。同样,我们的 IntelliJ 插件也是非常新的。
Scala 有一个非常完整的 Web 框架 Lift。我不是他们的方法的超级粉丝,但它是完整的并且很多人喜欢它。
Gosu 也有一个 Web 框架:
我喜欢罗宁的方法,但我会的,不是吗?Ronin 是由非常了解 Gosu 的人构建的,因此它利用了该语言的许多功能。
希望有帮助。实际上,如果我今天开始一个项目,我可能会因为工具支持而选择 Scala。但是,如果您想朝另一个方向发展,特别是如果您的项目涉及 Web 服务或 XSD 处理,那么 Gosu 可能是一种值得使用的语言。从长远来看,我希望 Gosu 将成为 JVM 开发人员的务实选择,但只有时间会证明一切。
Gosu比较表对 Scala 有点不公平:从 Java 过渡很容易(你不必一开始就使用所有花哨的 Scala 东西),并且对于具体化的泛型,Scala 没有一个完美但可行的解决方案,称为清单。当然缺少 Scala 闪耀的类别(模式匹配,更高种类的类型......)
据我所知,Gosu 是由 Guidewire 为他们的产品特定开发和产品配置而开发的。所以所有 Guidewire 用户/开发者都使用 Gosu 进行编程。这就是您没有看到很多与 Gosu 脚本相关的帖子的主要原因。