Clojure与Ruby的比较

17

我是一名ASP.NET开发人员。我想学习与微软不同的Web开发技术和其他编程语言。我听说过两种语言,但我不知道哪种更好,也不知道如何在它们之间进行选择,特别是Clojure相对较新。

有没有人能告诉我为什么要选择其中一种而不是另一种呢?

谢谢。


这就像是把苹果和橙子进行比较。 - GabiMe
1
从.NET转到Ruby可能会更容易学习。 - NullUserException
1
你最终可以在桌子上放更多的选择:Scala和F#都有点像介于Clojure和Ruby之间。 - Pedro Rolo
3个回答

19
如果你的目标是完成任务并重用成熟的库,那么显然Ruby会为你提供更好的性价比。考虑到Web开发,它必须拥有最活跃的生态系统之一。新东西的数量很大,最重要的是,质量通常是惊人的。
它有一个非常好的软件包分发系统和许多工具,可以轻松实现各个级别的实用Web开发。
在重量级Web框架中,你有:
  • Rails,你必须听说过。它可能是今天在大型社区和智能设计之间达成的最佳妥协。在我看来,另一个是Django,但它是一个Python框架
  • Merb,它是完整框架部门的轻量级替代品
而且你有很多更轻的选择,比如Sinatra,它可能是我见过的最优雅的小型Web框架之一,或者Camping,它很小,非常有趣。
这只是开始。无论是ORM、模板引擎还是与Web相关的其他任何事情,你都有大量高质量的选项。
对于Ruby的负面影响:
  • 这是一门非常密集的语言,有很多需要学习的东西,并且具有明显的“魔法”构造倾向。它非常美丽,但远非最简单的语言。
  • 速度较慢。如果您想要进行任何需要高性能的操作,Ruby可能不是您需要的语言。这可能是一个问题,也可能不是,具体取决于您想要使用它做什么。
  • 与“常规编程”相比,它没有那么多的库,尽管它显然也不是沙漠。如果您退出Web编程,像Python这样的语言拥有更广泛的库范围。

Clojure完全是另一种不同的动物。它是一种非常新的语言,完全是函数式的。如果您以前从未以函数式风格编程过,那么这可能会是一个范式转变,这将使您在一段时间内效率降低,但您几乎肯定会在此过程中学到很多东西。

它也是一种lisp语言,就像函数式编程一样,这可能意味着许多新事物需要学习,但在过程结束时会有很多启示。

它是一种非常优雅的语言,具有非常充满活力的社区。它也比Ruby快得多,并且随着新的1.2版本而变得越来越好。

因此,在积极方面:

  • 这是一门聪明的语言。包含许多有趣的想法,特别是关于并发性。它不是面向对象的。
  • 对于动态语言来说,它的速度很快
  • 它运行在JVM上,并且与Java具有非常强大且易于使用的互操作系统。这基本上意味着您可以使用整个Java生态系统。

在消极方面:

  • 这是非常新的。这本身不是一个缺点,但也是你在使用它时可能遇到其他问题的原因。
  • 它有非常少的集成和思考过的库。在我看来,这是最具破坏性的点。在Java世界中,你基本上拥有你所需要的一切,但解决方案可能很丑陋。你可能想要在过程中编写自己的包装库,但这需要时间。
  • 它不像你所知道的一切。它不是面向对象的,也不是命令式的,没有任何类似于经典C语法的东西。因此,根据您对其他语言的经验,学习可能需要很长时间。

因此,总结如下:

如果您想在非常舒适的环境中学习新事物,并通过利用成熟的库快速构建项目,请选择Ruby。

如果您想学习更多的新事物,不介意完全进入新的领域,花更多的时间完成任务,并想参与可能正在修改我们对编程思维方式的社区,同时在过程中进行黑客攻击和娱乐,请选择Clojure ;)


如果你只想做一个纯Ruby的网站,我同意。但是用Clojure你可以学到更多。 在Clojure中,Web开发正在迅速发展,有新的框架、基于事件的服务器,以及模板化方面的新想法…… Clojure非常适合与键值存储一起工作,因为它几乎感觉像正常的数据结构,所以你不需要OO转换框架来访问任何数据库。 Clojure作为一种通用编程语言更有用,因为它更快,有更多的库可供使用。 - nickik
我认为Clojure可以从一些流行的库/框架中获益,但我认为我看到的可用代码更加清晰。正如另一个评论者所说,Ruby有大量可用的库“具有丑陋的内部结构”。它们可能适合您的需求,但您必须符合它们的代码风格,可能存在巨大的效率问题,并且在下一个Rails版本发布时可能需要更新它们(请记住,Rails需要更新以确保安全性,因此您需要升级或使用LTS版本)。对我来说,Clojure库更像是干净的代码。 - jm0

3

从ASP切换到Ruby可能比切换到Clojure更容易,而且它有着更大的社区和生态系统。但是,如果你对函数式编程和/或并发功能感兴趣,那么你应该尝试一下Clojure。


你可以说Clojure为你提供了整个Java社区和生态系统......你可以争论定义,但在实践中,你会得到很多好处。 - mikera

1

Ruby是一种不错的语言,尽管我偏爱Django框架而非Rails。使用解释型语言时,我发现它们对线程的实现存在歧义。在Ruby和Python中,解释器始终只会同时处理一个线程。

至于Clojure,考虑一下你在使用它时需要多大的库。从.Net来看,你已经有一个庞大的库了。Python和Ruby在这方面已经相当成熟,你可以找到几乎任何想象得到的扩展。拥有一个大型库是如此容易被忽视,直到你没有它之前。在切换之前,看一看.Net nuke。虽然我没有用过,但它应该是.Net的模型/查看器层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接