对于喜欢LISP的人,请建议Ruby vs Python

Please advise on Ruby vs Python, for someone who likes LISP a lot

我是C++开发人员,慢慢进入Web开发。我很喜欢Lisp,但不喜欢Lisp提供的Allegrocl和Web框架。我正在寻找更多的自由和能力,做酷的语言级黑客。我不认为标签是违反自然的罪行。

哪一个更接近lisp:python或ruby?

我似乎无法从python和ruby中进行选择:它们看起来非常相似,但显然ruby更实用,更面向对象,这是好事,而python更像perl:一种简单的脚本语言。我有正确的印象吗?

PS-这可能看起来像是一个火焰诱饵,但它不是真的,我只是想尽量不疯狂从OCD关于从RoR切换到python/django和回来。


彼得·诺维格,一个著名的伟大的口齿不清的人,变成了Python。他为Lisp程序员写了一篇文章python,您可能会发现它对特性的详细比较很有趣。

python看起来像可执行的伪代码。这很容易理解,而且经常使用你的直觉就可以了。Python允许您轻松地将您的想法放入代码中。

现在,对于Web开发来说,与Ruby相比,python似乎是一个更加分散的选项,因为有大量的python Web框架可用。不过,总的来说,python是一种非常好和有用的语言。由于红宝石和Python的壁龛重叠,我同意Kiv的观点,这在一定程度上取决于你选择哪个壁龛的个人品味。


我要和鲁比一起去。它有各种各样的元编程和duck-pushing黑客程序,这使得它很容易扩展。像块这样的特性起初看起来可能不太像,但如果您正确地使用它们,它们会提供一些真正干净的语法。如果你把开放类搞砸了,它们可能是在调试地狱,但是如果你是一个负责任的程序员,你可以很容易地完成像2.days.from_now(来自rails的例子)这样的事情(我认为,python也可以做到,但是会有点痛苦)。

PS:看看"为什么Ruby是一个可接受的Lisp"。


魔鬼拥护者:谁在乎?

它们都是很好的系统,拥有一个由良好的Web框架和活跃的开发人员社区组成的生态系统。我猜你的决定是基于错误的标准。这个问题听起来像是你在担心你是否会通过选择一个而不是另一个来解决实现问题或其他困难。不要。

这类似于Java/.NET决策。在特定的情况下,可能有令人信服的原因,但是软性因素(如架构师对平台的熟悉)是项目成功的一个更强有力的预测因素。

我承认我使用的python比ruby要多得多,但我不会说我在这两者之间除了熟悉之外还有什么特别的偏好。我从1998年开始就一直在使用Python,我喜欢Ruby的小语调,因为15年前我曾短暂地使用过smalltalk。他们都做相似的事情略有不同。

我想要Ruby的某些特性(或者与之相关的Smalltalk),但Python不能这样工作。相反,它还有其他特性,语言习惯用法与Ruby或Smalltalk略有不同。其他几张海报都链接到了比较这两张海报的文章。

如果您担心Rails和Django之间的冲突,这意味着您正在寻找一个Web应用程序平台。两种语言都有良好的工具支持和活跃的开发人员社区。Django似乎是python web framework混战的胜利者,Rails似乎正在"跨越鸿沟"并将Ruby带到它身边。这两个系统都是相当成熟的系统,并已被证明在相当可观的交通量下运行良好。

普罗提普:宗教战争的存在是一个很好的指标,表明双方都没有令人信服的论据。

所以,我要扮演魔鬼拥护者的角色,说担心选择是毫无意义的。这些语言彼此之间有优缺点,但在一般情况下,没有什么是令人信服的。对一个平台或另一个平台的详细优点感到苦恼是错误地制定了这个决定。

选择一个并使用它。您将能够使用这两种方法有效地构建系统。


作为一个"鲁比派",我同意基辅。这两种语言在编程范式方面都有很大的回旋余地,但也有好处/缺点。我认为无论哪种方式,你所做的妥协都是关于你自己的编程风格和品味的。

就个人而言,我认为Ruby比Python更像是伪代码。首先,python有活动的空白,虽然在许多人看来很优雅,但在编写伪代码时,这些空白不会进入公式。而且,Ruby的语法非常灵活。这种灵活性会导致许多奇怪的地方,这些地方可能会混淆,但也允许代码具有很强的表现力和漂亮的外观。

最后,我真的会说Ruby对我来说更像珍珠。这部分是因为我对它比较满意,所以我可以很快地破解脚本。不过,Ruby的很多语法都是从Perl中借用的,而且我没有看到多少感觉类似的Python代码(不过,我对Python的经验也很少)。

根据您希望采用的Web编程方法,我认为每种语言中可用的Web框架类型可能也是决定的一个因素。我想说两个都试试。您可以在一个下午内获得每一个方面的实用知识,虽然您不会编写出色的Ruby或Python,但您可能可以为每一个方面建立一种感觉,并决定您更喜欢哪一个。

更新:我认为您的问题实际上应该是两个独立的讨论:一个与Ruby,一个与Python。比较不那么重要,因为你开始争论差异的优点,而不是哪种语言对你更有用。如果你有关于鲁比的问题,我会非常乐意尽我所能回答。


Ruby和python都与不可变数据、数据程序和宏的Lisp传统相距甚远。但是Ruby几乎是smalltalk的克隆(我希望它能像smalltalk那样成长,因为不赞成使用Perlish cruft),而smalltalk和lisp一样,是一种将一个想法推向极端的语言。基于你想在语言层面上进行酷黑客攻击的愿望,我会和Ruby一起去,因为Ruby继承了Smalltalk的许多元编程思想,并且这种思想与Lisp传统相联系。


亚历克斯·马泰利对这个问题作了很好的分析。现在有点过时了,但我同意它的基本要点:Python和Ruby是实现同一事物的两种不同方法。当然,在Ruby中可以做一些在Python中不能做的事情。当然,python的语法(可以说)比ruby的好,但是当你深入研究它的时候,没有太多客观的、科学的理由比另一个更好。

你将听到的一个常见的事情是:平台比语言更重要,而Python的平台比Ruby更好(这一论点在两方面都有效,所以不要投票给我,所有的Ruby)。这是有道理的。但不幸的是,这并不重要。如果您不喜欢任何语言的平台,在Java和.NET中都有实现,所以如果您对平台有关注的话,可以使用这些语言。


我是一个pythonista;但是,根据您的需求,尤其是"语言级的酷黑客",我建议您使用Ruby。Ruby在Perl方面更为灵活,您可以进行大量的黑客攻击;Python的目标是可读性,这是一件非常好的事情,通常语言黑客有点不受欢迎。Ruby的基本类型可以用原型语言所允许的黑客方式进行修改,而Python的基本类型更适合于子类化。

顺便说一句,我想补充一点更正:Ruby和Python都非常非常面向对象,而且它们都不打算以Perl的方式用于快速而肮脏的脚本。在这两者中,Ruby在语法上更像Perl,而不是Python。


我还推荐了Namin发表的PeterNorvig的文章。如果您想了解Python中的函数编程,请查看标准库中的functools模块。

在python中,还有很多空间可以进行黑客攻击;私有变量是通过约定而不是强制执行的,因此,如果您愿意,可以在对象的内部状态中进行深入研究。不过,这通常是不必要的。

Ruby和Python都是面向对象的,并且支持函数式编程;我不会说其中任何一个对于您的项目都是明显的优越性;这在一定程度上取决于个人的品味。


如果您需要Unicode支持,请记住检查它的支持程度。在afaik中,python对unicode的支持比Ruby更好,特别是自从python 3.0以来。另一方面,python 3仍然缺少一些流行的包和第三方库,因此可能会遇到这种情况。


如果你喜欢LISP,我想你会比Ruby更好,但是C++让我想起了更多的Python。我发表了一篇关于这个主题的小文章:http://hartator.wordpress.com/2011/06/12/ruby-vs-python-2011/


为您的域选择最流行的一个,这样您的工作就可以获得最大的可见性。有些人可能会说ruby/rails for web,python for everything。选择一种语言仅仅是因为它类似的lisp对于一个专业人士来说是不合适的。


我是一个鲁比派,他们根据非常相似的标准选择语言。Python是一种很好的语言,我也很喜欢使用它,但是我认为Ruby在给程序员带来的自由度上有点过于轻率。python似乎把它的观点强加得多一点(这可能是件好事,但不符合我们这里的标准)。

当然,python并不是更加Perlish——ruby本质上是一个smalltalk/perl mashup(它使用较少的一些特性是直接从perl中提取的),而python与两者之间的关系也很遥远。