坚持使用JVM,厌倦了Java ......去哪儿了?

whe*_*ies 11 scala clojure jvm-languages

在接下来的3年中,我将不得不使用非常具体的第三方API来使用JVM(项目要求).他们想要Java,但我已经有了回避Java的余地.我希望我们可以回到.NET框架,这样我就可以在F#中开发代码,完全爱上OCaml..NET开发已被我们的客户打倒.这是不行的.

我转向寻找,阅读和探讨编程博客/论坛,试图了解哪种语言可能会对我更有吸引力:Scala或Clojure.那些似乎拥有最大的社区/粉丝群.有了ML语言的经验,我看到很多人将Scala与ML进行比较.然而,在进行这种比较时,有一些真正的反对者.如果Scala接近ML,那么我的生产力和学习曲线将有助于实现这一转变.

互联网上充满了错误的信息,并想知道我是否患有此类信息.我不喜欢Lisp的语法(不要伤害我!)但是如果Scala有我正在阅读的瑕疵(糟糕的IDE支持,通量单元测试框架,性能问题)我想知道Clojure是否更好选项.我希望通过使用函数作为第一类对象,并最大限度地减少并发性痛苦,提高效率.

所以无论如何,在我花太多时间在互联网上而不工作之前......我被JVM困住了,厌倦了Java,想知道去哪儿了?

Dan*_*phe 24

在我看来,Clojure和Scala都没有很好的IDE支持,如果这对你真的很重要的话.也就是说,这是我从阅读和体验中可以收集的内容.

Scala的专业人士

  • 由于更多静态类型,比Clojure更快
  • 更接近ML(语法,类型导向编程)
  • 更大的标准API(Clojure的API增长非常缓慢,因为他们希望确保他们在公开之前找到最好的习惯用法.那就是说,Clojure仍然有半官方补充API)
  • 使用典型的Java工具集实现更好的集成实践(Clojure仍在做出一些选择,因此在这方面尚未确定)
  • 比Clojure更老(但Clojure建立在一个非常古老且经过验证的核心之上:Lisp)
  • 人们说它有机会达到主流,而他们不会对Clojure说同样的话

Clojure的专业人士

  • 基于MVCC的STM 其他并发机制,令人难以置信的简单,快速和正确的并发
  • 默认情况下的不变性有助于首先做正确的事情
  • 更稳定的标准API
    • 当事情发生变化时,通常您不必重写任何现有代码
    • (Scala的系列再次重拍2.8)
    • (我还读过一些知识,Scala的Actors实现需要重新思考和重写.)
  • 更容易学习(小语言,(非常干净)Lisp)
  • 通过学习不同的东西,您有机会成长
  • Clojure的表现只会随着时间的推移而变得更好; 在编译器中仍有很好的优化空间
  • Scala与Java的关系比Clojure(Scala和Java的静态类型系统之间的交互)更具限制性.人们有时可以对Clojure说同样的话题(面向对象的支持不是1:1适合,但对此的支持很快会变得更好)
  • Rich Hickey有一个做出选择的礼物,让Clojure拥有技术领先的功能,几十年后其他语言将采用这些功能.他还有一个解释他们的礼物.因此,今天在Clojure中使用它们,或者等待在若干年内使用其他语言.:)

关于分布式并发

如果你的并发需求是分布式的,那么除非你在Terracotta或类似的东西上运行它,否则Clojure还没有任何东西,在这种情况下你将能够使用它的所有并发功能.如果你这样做,你将获得比Scala的Actors,IMO更好的分布式并发体验.

结论

IMO Scala尝试做所有事情,并成功完成大部分工作.Clojure没有尝试同样的事情,但它关注的是绰绰有余并且成功得如此之好以至于大多数人真的知道Clojure不会想要回到别的东西.披露:我个人的偏好当然是Clojure.我希望我能够在我写的内容中保持客观.


Dón*_*nal 10

你考虑过Groovy吗?我不认为它与Scala/Clojure一样功能,但它确实比Java**更具功能性.一般来说,我可以在Groovy中完成相同的工作,其中大约50%的代码将用于Java.

这是因为Groovy在语法上与Java类似,并提供对JDK库的无缝访问,但是添加了许多语言功能(闭包,元编程,属性)和动态类型几乎消除了与Java编程相关的所有样板.

**我的意思是"功能性编程"而不是"正常工作"的功能


Dan*_*ral 10

我将解决你提出的关于Scala的观点.

  • IDE支持:

    Scala没有与Java相同的级别或IDE支持 - 或者,就此而言,F#应该与VS10一起使用.

    也就是说,它在Java之外的JVM上拥有最好的(甚至最好的?)IDE支持.目前NetBeans已经足够好了,人们一直认为IDEA仍然更好(传闻).Eclipse插件虽然不稳定.

    但是你提到了3年的范围,一旦Scala 2.8出来,对Scala的IDE支持应该会大大增强,因为它将为IDE提供一些编译器支持.没有定义发布日期,但它看起来在接下来的六个月内,可能是三个月.Eclipse插件将随之更新.

  • 在通量单元测试框架中:

    是的,如果你的意思是它充满活力,不断发展和得到很好的支持,而不是停滞不前和被抛弃.ScalaTest,Specs和ScalaCheck是高质量的框架,兼容它们,并与其他Java框架和库(如JUnit和JMock)兼容.

    事实上,测试框架几乎是Scala可能实现的儿童海报.

    编辑: Scala在其标准库(scala.testing.SUnit)中具有基本的单元测试支持.但是,鉴于许多优秀的,积极支持的和免费的替代品已经出现,这已被弃用,并且可能不会成为Scala 2.8附带的库的一部分.

  • 性能问题:

    我不知道任何事情,除了你可以编写糟糕的代码,就像任何其他语言一样.不习惯函数式编程的人经常会做一些效率不高的事情,例如不使用尾递归或连接列表,以及Scala启用的范式转换可以实现这一点.

    无论如何,您可以像Java代码一样快速编写Scala代码(对于一些即将推出的功能,速度更快).您可以使用几乎与Java代码一样快的函数功能编写Scala代码.


Osc*_*Ryz 9

坦率地说,得到另一份工作.

如果你要在接下来的三年里对你正在做的事感到不舒服,你应该考虑寻找更有吸引力的替代方案.

即使你设法得到一个你喜欢的语言,如果你是一个团队的一部分(我猜你是),团队的其他成员可能不喜欢那种语言.如果其余的代码用Java编写,并且您" 填写空白 "编程语言,则可能会出现问题.

毕竟这并不坏.

和老板谈谈,让他知道你的感受.开始寻找替代品并拥有一个漂亮而专业的"离开".

你没有理由不能与现任老板保持良好的关系.如果最终他们有了.net的新项目,你可能会回来.与他们谈论这一点.把门打开.


Art*_*ldt 6

它不是真正的零和游戏,全部学习!
ps:我投票给Clojure,我发现它最有趣!


Jes*_*per 5

您应该认为自己可以使用JVM,因为JVM在替代编程语言中越来越受欢迎,而不是Java.

除了Java之外,还有Groovy,Scala,Clojure(JVM上的Lisp方言),JRuby(JVM上的Ruby),Jython(JVM上的Python),Jaskell(JVM上的Haskell),Fan(在JVM上运行以及.NET CLR)以及更多,还有一个在JVM上运行的OCaml-Java,OCaml.

因此,JVM上的编程语言有很多选择,从纯功能到简单的脚本和先进的OO语言.