37

当我看到 Lua 时,我唯一读过的就是“非常适合嵌入”、“快速”、“轻量级”,而且比其他任何东西都多:“魔兽世界”或简称“魔兽世界”。

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

Lua 似乎在速度和内存使用(最快的脚本语言 afaik)等方面做得很好,那么为什么我从来没有看到 Lua 被用作“桌面脚本语言”来自动化任务呢?例如:

  • 重命名一堆文件
  • 从网上下载一些文件
  • 网页抓取

是缺少标准库吗?

4

11 回答 11

40

Lua 是一种很酷的语言,重量轻且速度极快!

但重点是:性能对于你提到的那些任务那么重要吗?

  • 重命名一堆文件
  • 从网上下载一些文件
  • 网页抓取

你编写这些程序一次,运行一次,也可能。为什么你如此关心一次性程序的性能?

例如:

  1. 编写一个C/C++程序需要3个小时,处理一次数据,程序运行需要1个小时。
  2. Cost 30 Minute 编写一个 Python 程序处理一次数据,程序运行需要 10 个小时。

如果您选择第一个,您可以节省运行程序的时间,但您会花费时间来开发程序。

另一方面,如果选择第二种,则浪费时间运行程序,但可以在程序运行时做其他事情。玩魔兽世界,用你的术士杀怪怎么样?吃掉我的DOT!:P

就是这样!虽然 Lua 写起来并不难,但 Lua 的一切设计都是为了高效。而且 Lua 的模块很少,但 Python 的模块却很多。你不想为 Lua 移植一个 C 库只是为了一个运行一次的程序,对吗?相反,选择 Python 并使用这些模块轻松完成您的任务可能是一个更好的主意。

仅供参考:实际上,我曾尝试使用 Lua 进行网页抓取,但最后,我意识到我不必太在意语言性能。网页抓取的瓶颈不在于语言的性能。瓶颈在于网络 I/O、HTML 解析和多任务处理。我所要做的就是确保程序正常工作并找到瓶颈。最后,我选择了 Python 而不是 Lua。有很多优秀的 Python 模块;我没有理由建立自己的。

根据我对网页抓取的经验,我选择 Twisted 进行网络 I/O 和 lxml 进行 html 解析作为我的网页抓取程序的后端。我写了一篇文章来介绍这项技术。

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

希望这会有所帮助。

于 2008-10-31T08:48:29.583 回答
23

Lua 的库比 Python 少。但一定要看看LuaForge。它有很多有趣的库,比如LuaCURLwxLuagetopt

然后,访问LuaRocks,这是 Lua 的包管理系统。有了它,你可以搜索和安装最成熟的 Lua 模块和依赖。感觉就像RubyGemsaptitude

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

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

也就是说,我可能会使用 Python 来完成您提到的任务,因为更大的社区在 Python 中做这些事情。

于 2008-10-31T14:40:55.890 回答
12

仅仅因为它作为嵌入式脚本引擎的专用语言被“销售”(在某种意义上),并不意味着它仅限于此。事实上,WoW 也可以选择 Python 作为他们的嵌入式脚本语言。

于 2008-10-30T13:24:26.830 回答
10

这可能是因为 Lua 被设计为一种脚本和扩展语言。在官方网站上,它被描述为一种强大、快速、轻量级、可嵌入的脚本语言。没有什么能阻止你为它编写通用程序(如果我没记错的话,它附带解释器和编译器),但语言设计者打算将它主要用作嵌入式语言(因此是轻量级的)

于 2008-10-30T13:28:04.123 回答
9

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

我几乎完全将 Lua 用于通用脚本。但是我必须写几百行代码,这样 Lua 才能更好地使用 shell。这包括这样的技巧

  • 引用一个字符串,以便 shell 将其视为一个单词
  • 编写一个函数来捕获命令的输出,如 shell $(command)
  • 使用 Lua posix 库编写一个函数来爬取文件系统并扩展 shell globbing 模式

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

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

于 2008-11-28T20:56:38.537 回答
6

绝对缺乏标准库。它也比 Python、Perl 或 Ruby 鲜为人知。

于 2008-10-30T19:13:31.023 回答
5

最近有人推动在 Windows 上为 Lua 创建包含电池的安装。结果可以在 LuaForge的Lua for Windows项目中找到。它包括解释器和大量额外模块,允许开箱即用地编写和使用有用的脚本和应用程序。

我知道现在各种 Linux 发行版都包括 Lua 和一些模块,而且还会有更多。

邮件列表中还讨论了几个提议的模块库,但社区还没有确定一个作为“官方”机制。

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

于 2009-02-20T08:31:28.220 回答
4

我认为关于它作为“营销”事物的答案可能是正确的,同时缺乏大量可供选择的库。我想指出另一个例子:Ruby。Ruby 旨在成为一种通用脚本语言。问题是,自从 Ruby on Rails 变得如此流行以来,很难找到与 Rails 无关的东西。恐怕 Lua 也会遭受这种痛苦,因为一些主要的东西使用它而流行,但永远无法摆脱这种耻辱。

于 2008-10-31T14:15:15.100 回答
4

缺乏标准库。时期。即使列出目录中的所有文件也需要非标准模块

这样做有充分的理由(保持严格的 ANSI 可移植性,不需要 POSIX),但结果是,对于一般编程,我更喜欢 Python。

于 2008-12-16T08:56:51.820 回答
4

Lua 作为一种嵌入式语言用于TeX 扩展LuaTeX中,并因此在 TeX 开发人员中迅速普及。它被用作 TeX Live 发行版中某些实用程序的脚本语言,只是因为现在有一个luatex二进制文件,可在所有平台上使用,它也可以用作 Lua 解释器(添加了一些重要模块——slnunicode、luafilesystem等)这对于 Windows 安装非常重要,它依赖于早期的其他 Unix 脚本工具(ActivePerl 等)。ConTeXt 宏语言现在广泛使用 Lua 脚本。

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

于 2009-10-08T13:24:02.017 回答
3

为了使 Lua 易于嵌入,它必须具有很少的依赖项并且很小。这使得它不适合作为通用脚本语言。因为将其用作通用脚本语言将需要大量标准库。但是如果 Lua 有很多标准库,那么嵌入将更加困难(由于依赖项和内存占用。)

于 2009-04-23T11:32:02.087 回答