为什么这些尝试用Xtend和Kotlin浇灌Scala?[关闭]


26

因此,现在Eclipse提供了Xtend,而JetBrains提供了Kotlin-两者似乎都是Scala的简化版本。我的问题是为什么?我已经使用Scala打了一下,这不是很难。这仅仅是对从命令式转换为功能性转换的固有困难的反应,还是在这里还有其他工作?


编辑:道歉。重读我最初发布的问题,我可以看到听起来像是在拖钓。我说问题的方式似乎是提出问题的最佳方法。我看到过这样的博客帖子:“ Scala太难/ Scala太复杂”,还有“ Kotlin尝试做Scala但更简单”。我将保留原来的措词,但老实说我并没有试图拖钓。


20
在我看来,很想简单地假设一种与Scala相似的新语言必须是Scala太难了的人写的“ Scala的精简版”。通过这样的问题,您不太可能获得经过深思熟虑的答案。
Michael Borgwardt

8
汇编只是机器代码的精简版,对吗?
Ben Brocka

6
@BenBrocka:不,它与机器代码同构;)

4
Scala很棒。对于我来说,我相信人们应该放弃Java的死法,而应该重新发明Java(所有这些新语言,无论是否提及),而应该使用和改进Scala。恕我直言。
伊万

2
@MichaelBogwardt很公平。我将断言基于我在博客圈看到的一切。“ Scala太难了”和“ Scala太复杂”似乎是相对普遍的抱怨。
Onorio Catenacci 2011年

Answers:


39

在过去的7年中,使用Java进行编程的人恕我直言,这是我最强大的语言,我发现Scala相当陌生,很难适应它。

Xtend 感觉更像Java,并且能够更快地编写一个简单的应用程序。当然,我没有花足够的时间在Scala上,但是我当然理解为什么它会关闭一些功能。

话虽如此,人们会在一个陌生的天堂上选择一个熟悉的地狱。


19
+1:“人们会在陌生的天堂上选择熟悉的地狱”。
乔治

18

JetBrains有一个Wiki页面,将Scala与Kotlin进行了比较,似乎Kotlin做了一些事情,而Scala却没有:

  • 零开销的零安全。Scala具有Option,这是一个语法和运行时包装器
  • 聪明的演员
  • 静态扩展功能。而不是在运行时包装
  • Kotlin的内联函数可促进非本地跳转
  • 字符串模板。有用于scala的具有类似功能的第三方编译器插件:ScalaEnhancedStrings
  • 一流的代表团。也可通过第三方插件实现:自动代理模块

因此,将Kotlin称为Scala可能是一个过分的简化。至于Xtend,我认为它主要针对Xtext用户,而不是更广泛的受众。与Scala的主要区别在于Xtend可以编译为Java,而不是字节码。

您应该添加到列表中的另一种“ Java杀手”语言是Red Hat的Ceylon,尽管我不知道它是否以及如何与Scala相比。


13
自动转换听起来很吓人。
乔纳斯(Jonas)

14
该行业具有这些周期性的革命,开发人员将从一个极端出发,一次又一次返回。功能丰富的电源编码器语言很好,然后白痴编写了错误的代码,我们发现了危险,人们因此涌向了Java的安全性,现在又回到了电源编码器。看一下Javascript和基于浏览器的性能如何,然后出现applet,使用浏览器插件的RIA很好,而使用Javascript不好,然后出现了现代AJAX框架,并且插件不安全和不好,然后Silverlight出现了,人们说AJAX已经死了,现在是HTML5是时尚,插件又变坏了!:)
maple_shaft

3
@Jonas我什至不知道是否同意,但这是我注意到的一种现象。当然,每次革命都会带来一个更复杂的解决方案,但每个解决方案始终都有一个致命弱点。解决“脚跟”问题会使一些人对以前的想法解决方案进行回顾,但是随着时间的流逝,人们忘记了为什么原来的解决方案最初被废弃。但是随着时间的流逝,每次旋转,脚跟都会变得越来越小。Java + XTend肯定不如Scala复杂,但是问题要比完全切换到新语言的投资小。
maple_shaft

2
@Jonas好吧,在评论中只不过是对技术发展的极端高度简化。我确实同意maple_shaft的观点,但是技术发展确实具有迭代的感觉
yannis 2011年

3
@Jonas这些演员表不是自动的,而是聪明的演员表:如果您调查一下就会发现它是不一样的:kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m 2015年

11

我一直在使用Scala的作为我的主要语言为去年(如紧随其后与Java,既有大型遗留Java代码库中。)我还是要回去看看相当基本的功能,如果我没有在他们使用而。当然,您可以快速编写一些Scala,但这是一种功能非常丰富的语言,需要很长时间才能掌握。

而且,它的复杂性不仅是人类的问题,也是IDE和编译器的问题。Celyon和Kotlin均可直接编译为相当干净的JavaScript。Scala可以通过GWT生成JavaScript,尽管到达那里很复杂,而且GWT的输出既不清晰也不旨在与外部JavaScript或HTML很好地兼容。

与Java相比,我在Scala中的工作效率肯定更高,并且代码更紧凑,更易读(一旦您对Scala有所了解。)但是它的复杂性让我不敢推荐给其他人。一种具有20%的复杂度但80%的功能的语言将是受欢迎的选择。

[已编辑以删除提及旧版代码的内容,请参见下面的评论。]

[2017附录:Scala现在支持将JavaScript作为构建目标,而Kotlin继续增加了一些功能,这些功能对于替换类似Scala的Java / Groovy / JavaScript很有用。与我最初写这篇文章时相比,它们现在是更具特色的语言。]


您能否再详细说明一下“延迟部分”?例如,您是指采用列表而不是序列的哪些方法?
kiritsuku

我将进行编辑,因为经过反思,标准的Scala库实际上很少这样做。JSONArray具有一个List,但大多数构造函数都没有。无论如何,文档在列表上仍然存在偏见,尤其是因为在Scala编程第二版中仅涵盖了Vector之前的Scala 2.8。它的代码示例倾向于具有使用List的构造函数,而Seq更好。
David Leppik 2013年

是的,对于2.10,有些事情更好(+:例如,提取器)。我希望在不久的将来更新Scala中的编程。对于2.11,有些事情会进一步改善。stdlib已经摆脱了弃用,并且还会缩小一点。也许scala.util.parsing也将移出stdlib。我们将看到...
kiritsuku 2013年

1
我应该补充一点,列表与向量的真正问题在于将项目添加到列表(即Scala中的Seq)是一项非常基本的操作,并且有太多等效的方法可以做到,而所有这些都带有有趣的符号,很难做到记得。该规范的方法是::::=或者+:=其前插,但大多数人都希望:+=这追加的,但不是有效的列表。
David Leppik

10

JetBrains非常清楚地说明了Kotlin的目标

我们希望通过切换到更具表现力的语言来提高生产力。同时,我们不能接受以下方面的折衷:Java互操作性(新语言将逐渐引入,并且需要与现有代码库顺利进行互操作)或编译速度(我们的代码库需要足够长的时间才能进行编译) javac,并且我们不能让它变慢)。接下来的事情也相当简单:我们期望Kotlin能够推动IntelliJ IDEA的销售。


8

我已经在带有Play Framework的Eclipse中使用Scala几个月了。我喜欢这种语言,但有些东西我不喜欢。

对我来说,从Java切换到另一种语言的原因是要提高生产力。

到目前为止,我在Scala上的工作效率更高。原因之一是Eclipse中缺乏对Scala的良好支持,Scala插件不好(例如,缩进失败)并且还没有很多功能(例如,没有“ Open Call Hierarchy”)。Scala编译器的速度也很慢,这可能不是问题,但是我将Scala与Play Framework结合使用,可以为每个请求编译代码,因此编译器的速度非常重要。


2
也许您还没有学到足够的Scala习语。我已经将Scala用于小型项目(工具),尽管我在Java(> 10年)比在Scala(<2年)中拥有更多的经验,但我在Scala中的生产力远比Java高。
Giorgio 2013年

4

不了解Kotlin,但是Scala和Xtend是两种截然不同的野兽。

与俗语相反,Scala不是更好的Java。Scala是比Java更具有特色的语言,具有自己的语法和语义以及自己的基础库包。

Xtend是更好的Java。它保留了Java语义并增强了其语法。Xtend代码的每一行都可以直接转换为一堆Java代码行。没有额外的运行时,也没有。

我认为这两种方法都是正确的,尽管有所不同。我不喜欢Scala(作为一种语言),但是不喜欢将Scala jar添加到我的项目中。我也无法在Android中正确使用Scala,这也不会增加重量和性能问题。Xtend的功能并不多,但对我来说还可以(比Java语言更值得使用),它可以在每个平台上工作,就像我直接用Java编写一样。

我相信两种语言涵盖了不同的领域,并且可以共存而不会互相干扰。恕我直言,Scala太复杂了,没有添加任何新内容。如果您想提高功能性而减少面向对象,只需选择许多更简单的功能语言之一,例如Clojure或JHaskell。如果您只想要Java具有更好的语法和一些功能编程,那么Fantom和Scala一样强大(它与C#十分相似)。

但是我发现Xtend在所有这些语言之间都处于最佳状态。它添加了我想要的所有Java语法模式,并保留了Java的大部分内容(其语义)。将其视为Java的Coffescript。

Eclipse支持非常出色。


…并且仅在Eclipse中受支持。对?Eclipse是个地狱……
Sarge Borsch 2014年

Xtend确实有一个额外的运行时。我最后检查了大约3MB。
mm2001

@ mm2001是的,在我的小型测试项目(github.com/pdemanget/examples/tree/master/xtend/message-send)上,xtend约300 Ko,番石榴约2 Mo. 诸如InputOutput的附加类,附加注释。正如我在这个答案中所说的,这并没有消除我的主要观点,Scala和Xtend是2种非常不同的语言。
pdem '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.