为什么用Python而不用Lua?[关闭]


45

为什么Python得到了Google的支持并迅速流行起来而Lua却没有呢?

你知道为什么Lua留在后台吗?


3
Lua喜欢假装数组和字典是同一回事,并且具有长度获取器,它不仅可以返回错误的结果,而且可以返回不确定的结果。我不知道Google的原因是什么,但这足以让我不喜欢它。
2011年

4
对我来说,Python更易于编码,更有趣并且具有更多功能。我脑海中浮现出一些例子:生成器是Python(yield)中的一等公民,而Lua需要更繁琐的设置。Python的列表索引[::]是一个巨大的优势。Python具有合法的类和继承。Lua更快,是的,但是当速度很重要时,我实际上喜欢编写Go代码以在Python中使用
弗兰克·布莱斯

我爱LuaJIT,但我最喜欢的部分是它易于嵌入,速度快且占用空间小。如果我不得不整天编写程序,那么我可能会更倾向于Python。

@FrankBryce,您倒向了。Python的生成器是Lua协程的子集。参见inf.puc-rio.br/~roberto/docs/MCC15-04.pdf
capr

Answers:


37

我真的很喜欢Lua,但是它确实有一些实际的局限性,正如其他人提到的那样,它们主要源自Lua的起源,最初是配置文件语言,后来又是嵌入式脚本语言。

由于要使Lua保持较小的目标,因此仅存在一个非常小的标准库,该库仅具有基本功能。

这在Lua圈子中导致了一种不幸的文化,在Lua圈子中,Lua开发人员喜欢重新实现许多其他语言的标准库本身提供的功能,而不是共同致力于一组通用的核心库。

“多线程”,正则表达式,平台无关的文件访问方法甚至位操作(直到5.2)之类的东西都“不包括在内”,因为它们会使Lua变得更大,更慢。当然,您可以让图书馆做到这些-但是这些图书馆都有独立的维护者和质量等级。

不要误会我的意思。我爱Lua的原因与我刚列出的原因相同。


54

简单:Lua比Python具有更多的“利基”目标

Python被认为是一种通用的编程语言。因此,它在许多情况下很有用。它涵盖了许多众所周知的应用程序类型,但是并没有直接与可能针对特定约束的其他语言竞争,但是它的语法很简单。

Lua完全旨在成为嵌入式脚本语言。这是最初的目的,即使当前在构建系统等其他上下文中使用过也是如此。将被嵌入软件中并允许轻松实现特定于域的脚本功能和结构。它是如此的简约,甚至可以在真正受限制的硬件上使用(我在NintendoDS上使用Lua),它是轻量级的,易于使用的FAST,并且是一种极简主义的语言,但被认为可以扩展为许多方言(例如导入范式面向对象)。它的可移植性(ANSI C)可以在具有现代嵌入式软件相当大内存量的任何嵌入式硬件上使用(如果我记得很好,默认的lua vm约为400ko,如果不循环创建对象,它几乎永远不会增长) ...)。

因此,Lua最初用于需要为应用程序嵌入脚本语言的上下文中

Python用于...几乎不需要任何利基语言的任何事物(您可以使用Python来制作性能出色的游戏,但确实需要避免这种系统的某些性能较高的游戏)。

只是,与Lua相比,Python在更多的上下文中使用。据我所知,除了Android(提供Java和本机语言支持)之外,Google并不是一家嵌入式软件公司,因此它们并不需要在任何地方使用Lua,而Python对于他们所做的任何事情(Web,构建系统)都非常有用,通讯,网络和网络)。

Python也被很多游戏用于嵌入式脚本编写,但它比Lua笨重且运行缓慢。Python的语法使它更适合大型游戏,这些大型游戏在游戏结构中非常依赖脚本信息(不确定我是否清楚在那里,但只要认为如果您需要“真正的完整语言”来编写脚本,则可能需要嵌入Python)一个不错的主意,如果您的表现适合您)。Python不是要嵌入的,所以很好。Falcon是旨在嵌入C ++中的等效Python。

为了进行极端的比较,一些针对嵌入并尝试具有比极简Lua更完整的语法并在性能上竞争的语言:ChaiScript,AngelScript,Io ...

顺便说一下,我已经看到像PreMake或Bam这样的新构建系统使用Lua作为构建文件语言。这个想法是轻量级的,并且是游戏开发人员所熟知的(游戏开发中的构建系统是一个主要问题)。因此,也许这是Lua可能会受到更多赞赏的另一个领域。它肯定比CMake语法更加人性化。


4
我认为Lua作为嵌入式语言的目标可能是主要的贡献者。但即使如此,我仍然认为,语言的“流行性”与语言本身的实际设计或功能的关系较小,而更多是“正确的时间,正确的位置”(例如,参见PHP)。
迪恩·哈丁

好吧,我认为针对特定目的的语言自然会吸引特定的用户,这使其受众比任何通用语言都更加克制。观众人数少于通用语言的人数会直接影响将要谈论的人数。除此之外,特定目标意味着特定功能。因此,这并不适合所有情况。例如,在这里lua本身并不是一种很好的gui编程语言。它需要一些补充才能真正有用。
Klaim 2011年

就是说,我完全同意:如果php不被用于诸如网站开发这样的广泛使用的领域,那么它现在就不会无处不在。
Klaim 2011年

Lua主要用作嵌入式语言,但它是一种通用的编程语言,例如,您可以使用mod_lua制作CGI脚本。我可以将问题更改为为什么lua保留为嵌入式语言?
BenjaminB

因为它是起源。您可以将它用作通用语言,是的,因为也可以将php用于通用目的。您也可以使用Perl进行相同的操作。但是他们的起源决定了他们的方向。同样,它们的初始用途使它们不如通用语言的其他语言有用。Lua缺少一些易于在GUI系统中使用的功能语言,例如面向对象(可以轻松添加,但不是本机语言)。确保您看到了最初用于特定目的的语言与通用语言之间的区别。无论如何,它们都有约束。
Klaim

4

您可以使用Lua做任何事情,它是作为脚本语言创建的,用于扩展程序?是的,但它不仅限于此,Lua有很多库,使用正确的工具(LuaJIT的FFI或tolua),您甚至可以在其上使用C / C ++库。在我看来,更多地使用Python的原因只有年龄,许多大学和学校都将Python用作第一语言,比Lua了解Python的人更多,并且更容易为Python找到一个好的库比Lua的语言更成熟。另外,我对Python不太了解,但是据我所知,很容易向最终用户隐藏您的代码,在Lua中,这不是那么容易,对吗?

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.