为什么Python得到了Google的支持并迅速流行起来而Lua却没有呢?
你知道为什么Lua留在后台吗?
yield
)中的一等公民,而Lua需要更繁琐的设置。Python的列表索引[::]
是一个巨大的优势。Python具有合法的类和继承。Lua更快,是的,但是当速度很重要时,我实际上喜欢编写Go代码以在Python中使用。
为什么Python得到了Google的支持并迅速流行起来而Lua却没有呢?
你知道为什么Lua留在后台吗?
yield
)中的一等公民,而Lua需要更繁琐的设置。Python的列表索引[::]
是一个巨大的优势。Python具有合法的类和继承。Lua更快,是的,但是当速度很重要时,我实际上喜欢编写Go代码以在Python中使用。
Answers:
我真的很喜欢Lua,但是它确实有一些实际的局限性,正如其他人提到的那样,它们主要源自Lua的起源,最初是配置文件语言,后来又是嵌入式脚本语言。
由于要使Lua保持较小的目标,因此仅存在一个非常小的标准库,该库仅具有基本功能。
这在Lua圈子中导致了一种不幸的文化,在Lua圈子中,Lua开发人员喜欢重新实现许多其他语言的标准库本身提供的功能,而不是共同致力于一组通用的核心库。
“多线程”,正则表达式,平台无关的文件访问方法甚至位操作(直到5.2)之类的东西都“不包括在内”,因为它们会使Lua变得更大,更慢。当然,您可以让图书馆做到这些-但是这些图书馆都有独立的维护者和质量等级。
不要误会我的意思。我爱Lua的原因与我刚列出的原因相同。
简单: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语法更加人性化。