我不是一个专业的程序员(我的专业是医学研究),但我精通C/C++和各种脚本语言。不久前,我对Lisp很感兴趣,但我从来没有时间认真学习它。在短暂接触了R之后,我决定花更多的时间学习函数式编程语言。
我喜欢JVM语言的实用性,因此将范围缩小到Clojure和Scala。据我所知,两者都可以使用已经存在的Java库,并且可以将性能关键型代码委托给Java,具有相对相同的执行能力。
在我需要它们的应用程序空间中,这两种语言相比如何?在生物信息学中有使用这两种方法的实际项目吗?
已经存在的代码将是一个重要的加分,良好的文档和相当平缓的学习曲线也是如此。另外,两者的并发模型如何比较?
任何人都有显著的优势/劣势吗?
发布于 2011-03-10 05:19:43
我个人可以保证Clojure是这类工作的一个很好的工具。(我相信Scala也会很棒,只是我用它的经验较少)。
我个人的研究是在预测建模/机器学习领域,计算非常密集-所以我认为它与生物信息学或生物统计学有许多相似之处。
我个人的方法/设置包括:
简而言之,我认为作为一名研究人员,使用Clojure是没有错的。
有一件事我可能还不会使用它,那就是编写一个新的数值库--这可能在Scala或纯Java中做得更好,因为您可能想要采用更多的命令式/ OOP风格。
发布于 2011-03-10 03:02:35
我对生物信息学和生物统计学本身不太了解,但我经常进行科学数据分析,而且我很欣赏Scala让我能够相对轻松地编写与Java一样快的代码。我相信现在在Clojure中这通常是可能的,但我还没有看到支持这一点的基准测试。就目前而言,我认为谨慎的假设是,它们的表现并不一样好。例如,查看Computer Languages Benchmark Game,其中Scala在每一次测试中都比Clojure更快。(忽略Clojure可怕的"pidigits“结果--Scala(和Java)正在调用用C编写的GMP库,这是Clojure可以做的,但由于技术细节需要对库进行不同的包装,目前游戏中不允许这样做)。查看multicore comparisons并不能改善Clojure的表现,请注意,Clojure代码对于这些低级算法任务并不短。
Clojure目前在并行集合方面处于领先地位,尽管即将发布的Scala 2.9版本应该会弥补很大的差异。从C++开始,两者都没有平缓的学习曲线;Scala可能更容易一些,因为它的语法看起来更熟悉一些。我相信它们都有很好的学习材料。
编辑: P.S.您可以使用rJava (特别是JRI接口)从Java (因此也可以从Clojure或Scala)调用R。编辑来编辑:这些天,还有rScala。
编辑#2:在编写本文时,Scala在所有方面都比Clojure快;到本次编辑时,Clojure略微领先一步(以大量代码为代价)--但不管怎样,总体观点是成立的。(在这一个测试上的Scala实现可以加速。)
发布于 2011-03-10 02:46:50
如果你喜欢R,试试Incanter吧!R代表Clojure。
Scala的目的是为了让来自Java的人在语法上更容易,这是为了让来自C语言的人在语法上更容易,尽管有了这样的两层间接性,这种优势可能会消失。
Clojure在大数据领域获得了很大的吸引力,并很好地映射到了针对大数据的Hadoop作业上。我认为这在生物信息学领域将是一个很大的优势。
真的,这些东西很大程度上是个人喜好,所以两个都试一试,看看这会让你开心:)
如果你想在没有太多“智力开销”的情况下感受一下Clojure,我建议你使用leiningen来快速开始一个测试项目。
https://stackoverflow.com/questions/5250459
复制相似问题