Lua作为一种通用脚本语言?

当我看到 Lua 时,我所听到的只有 "非常适合嵌入"、"快速"、"轻量级",而且比其他任何东西更频繁的是:"魔兽世界"或简称"魔兽"。

为什么它只限于将整个东西嵌入到另一个应用程序中呢?为什么不像使用 Python 或 Perl 一样编写通用脚本呢?

Lua 在速度和内存使用等方面似乎表现出色(据我所知,它是最快的脚本语言),那么为什么我从未看到 Lua 被用作 "桌面脚本语言 "来自动化任务呢?例如:

  • 批量重命名文件
  • 从网上下载一些文件
  • Web 爬虫

是不是缺少标准库的原因?

原文链接 https://stackoverflow.com/questions/250151

点赞
stackoverflow用户13051
stackoverflow用户13051

只是因为它被“销售”(在某种一般意义上)作为嵌入式脚本引擎的特定语言,并不意味着它仅限于此。事实上,魔兽世界可能同样可以选择Python作为他们的嵌入式脚本语言。

2008-10-30 13:24:26
stackoverflow用户23153
stackoverflow用户23153

很可能是因为 Lua 被设计成脚本和扩展语言。在 官方网站 上,它被描述为一种强大、快速、轻量级、可嵌入的脚本语言。你完全可以为它编写通用目的的程序(如果我没有记错的话,它会带有解释器和编译器),但语言设计者的意图是将其主要用作嵌入式语言(因此是轻量级的)。

2008-10-30 13:28:04
stackoverflow用户15795
stackoverflow用户15795

肯定存在标准库不足的问题。同时,它也比 Python、Perl 或 Ruby 不太知名。

2008-10-30 19:13:31
stackoverflow用户25077
stackoverflow用户25077

Lua 是一门很酷的语言,非常轻量和极其快速!

但关键是:对于那些你提到的任务,性能是否如此重要呢?

  • 批量重命名文件
  • 从网上下载一些文件
  • 网页爬虫

你只需要编写这些程序一次,也只需运行一次。 为什么你会如此关心一个只运行一次的程序的性能呢?

例如:

  1. 花费 3 小时编写一次性处理数据的 C/C++ 程序,该程序将需要 1 小时运行时间。
  2. 花费 30 分钟编写一次性处理数据的 Python 程序,该程序将需要 10 小时运行时间。

如果你选择第一个,你会节省运行程序的时间,但付出的是开发程序的时间。

另一方面,如果你选择了第二个,你会浪费运行程序的时间,但当程序运行时,你可以做其他事情。怎样?玩《魔兽世界》,用你的术士杀怪吗?吃我的点火伤害!:P

仅此而已!尽管 Lua 并不难写,但 Lua 中的所有内容都被设计成高效率。此外,Lua 的模块很少,但 Python 的模块那么多。你不想为了一个只运行一次的程序而将一个 C 库转换为 Lua,不是吗?相反,选择 Python 并使用那些模块来轻松完成任务可能是个更好的主意。

FYI:实际上,我尝试使用 Lua 进行网页爬虫,但最终我意识到我不必如此关心语言性能。网页爬虫的瓶颈不在语言性能上。瓶颈在于网络 I/O、HTML 解析和多任务处理。我需要做的就是确保程序运行正常并找出瓶颈。最后,我选择了 Python 而不是 Lua。有那么多优秀的 Python 模块,我没有理由自己编写。

根据我关于网页爬虫的经验,我选择了 Twisted 作为网络 I/O 和 lxml 作为 HTML 解析的后端。我已经写了一篇文章介绍这项技术。

从网站中抓取数据的最佳选择:Python + Twisted + lxml

希望这对你有所帮助。

2008-10-31 08:48:29
stackoverflow用户23048
stackoverflow用户23048

我认为关于这是“营销”问题的答案可能是正确的,再加上缺乏大量可供选择的库。我想指出另一个类似的案例:Ruby。Ruby本意是通用脚本语言。问题是,由于Ruby on Rails变得非常流行,很难找到与其无关的东西。我担心Lua也会遭受同样的遭遇,因为一些主要的东西使用它而变得流行,但永远无法摆脱这种烙印。

2008-10-31 14:15:15
stackoverflow用户2797
stackoverflow用户2797

Lua 拥有的库比 Python 少。但是一定要浏览 LuaForge,它有很多有趣的库,比如 LuaCURLwxLua 或者 getopt

然后,去访问 LuaRocks,Lua 的软件包管理系统。通过它,你可以搜索和安装大部分成熟的 Lua 模块,包括它们的依赖。它就像 RubyGemsaptitude

网站 lua-users.org 也有很多有趣的资源,比如教程或 Lua Wiki

我喜欢 Lua 不是因为它的速度,而是因为它最小的核心语言、灵活性和可扩展性。

话虽如此,我可能会使用 Python 来完成你提到的任务,因为在 Python 中从事这些任务的社区更大。

2008-10-31 14:40:55
stackoverflow用户41661
stackoverflow用户41661

这是一个社会学问题,不是一个编程问题。

我几乎只使用 Lua 进行通用脚本编写。但是我必须写入数百行代码,以便Lua与 shell更好地兼容。这包括以下技巧:

  • 引用一个字符串,使其在 shell 中被视为一个单词
  • 编写一个函数来捕获命令的输出,就像在 shell 中使用 $(command) 一样
  • 使用 Lua posix 库编写一个函数来遍历文件系统,并扩展 shell 的 globbing 模式

(对于可能感兴趣的人,我在我的Lua drop box中留下了代码,其中还包含其他一些东西。有趣的东西可能在 osutil 中的 os.quote、os.runf、os.capture 和可能的 os.execve 中。globbing 在 posixutil.lua 中。它们都使用 Luiz Henrique de Figuereido 的 Lua Posix 库。)

对我来说,额外的努力是值得的,因为我可以处理简单的语法和出色的数据结构。对于其他人来说,可能更倾向于与 shell 直接连接。

2008-11-28 20:56:38
stackoverflow用户15625
stackoverflow用户15625

缺乏标准库。就是这样。即使是列出目录中的所有文件也需要 一个非标准模块

由于一些很好的理由(保持严格的 ANSI 可移植性,不需要 POSIX),但是结果是对于一般编程,我更喜欢 Python。

2008-12-16 08:56:51
stackoverflow用户68204
stackoverflow用户68204

最近已经推出了一个在 Windows 上为 Lua 创建完整安装的推动。可以在 LuaForge 的 Lua for Windows 项目中找到其结果。它包括解释器和一大堆额外模块,使得可以编写和使用有用的脚本和应用程序。

我知道现在有一些 Linux 发行版已经包含了 Lua 和一些模块,未来将会有更多。

在邮件列表中也有一些提议的模块库正在讨论中,但是社区还没有确定一个“官方”的机制。

我将 Lua 用作脚本语言和我的典型应用程序的“主”循环,支持一个或多个包含用 C 实现更好的代码、包装已存在的库或特定项目所需的 API 函数的 DLL。与 GUI 工具包(如 IUPwxLua(wxWindows 的 Lua 绑定)一起使用,Lua 的编写小到中型 GUI 应用程序变得非常愉快。

2009-02-20 08:31:28
stackoverflow用户66634
stackoverflow用户66634

为了使 Lua 容易嵌入,它必须依赖少,而且体积小。这使得它不适合作为一般用途的脚本语言。因为将它用作一般用途的脚本语言需要大量的标准库。但如果 Lua 有很多标准库,它将更难以嵌入(因为依赖和内存占用)。

2009-04-23 11:32:02
stackoverflow用户46495
stackoverflow用户46495

Lua在TeX扩展LuaTeX中用作嵌入式语言,因此在TeX开发人员中迅速流行起来。 它用作TeX Live分发中某些实用程序的脚本语言,因为现在有一个名为'luatex'的二进制文件,在所有平台上都可以使用它作为Lua解释器(添加了一些重要模块-例如slnunicode,luafilesystem等)。 这对于先前依赖其他Unix脚本工具(ActivePerl等)的Windows安装非常重要。 现在,ConTeXt宏语言广泛使用Lua脚本。

这显然是一个非常特殊的领域 :-) 但与游戏完全无关!

2009-10-08 13:24:02