【问题标题】:Lua as a general-purpose scripting language?Lua 作为通用脚本语言?
【发布时间】:2010-09-19 23:49:38
【问题描述】:

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

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

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

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

是缺少标准库吗?

【问题讨论】:

  • 请写出与您的问题内容一致的问题标题。如果问题标题的直观答案是“是”,但问题文本的直观答案是“好吧,没有人为 LUA 实现过好的独立脚本执行运行器”,那么问题标题就不是很好。这就像有一个标题“牛是神吗?”然后是“当我喝牛奶时,我想呕吐,这是为什么?”之类的问题。

标签: python scripting lua


【解决方案1】:

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

但重点是:性能对那些人来说如此重要吗? 你提到的任务?

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

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

例如:

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

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

另一方面,如果你选择第二个,你会浪费时间跑 程序,但是当程序运行时你可以做其他事情 跑步。 玩魔兽世界,杀怪怎么样 和你的术士?吃掉我的 D.O.T! :P

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

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

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

The best choice to grab data from websites: Python + Twisted + lxml

希望这有帮助。

【讨论】:

  • 很好的答案,虽然我在想你能想出什么疯狂的一次性使用方案,它在 Python 中的运行速度比在 C 中慢 10 倍......其中大多数 -无论如何,关闭脚本往往会受到磁盘的限制。
  • @TM,同意。通常,您可以使用节省的 2.5 小时中的一部分来使用更好的算法并最终运行得比 C 更快,更不用说更有信心它可以正常工作并且更易于维护。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我不认为 Python 会是一个很好的选择。 Lua 和 Python 在嵌入方面的区别在于,Lua 的语义旨在最大限度地减少与其他代码一起工作的问题,而 Python 通常假设它是可控的。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      (感兴趣的朋友可以把代码留在我的Lua drop box里面,里面还有一些其他的东西。有趣的东西大概在osutilos.quote,os.runf,@987654327 @,也许是os.execve。通配符在posixutil.lua。他们都使用Luiz Henrique de Figuereido的Lua Posix library。)

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

      【讨论】:

      • 你有这几百行代码的链接吗?
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

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

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

        【讨论】:

        • 你更喜欢哪个 GUI 工具包,IUP 还是 wxLua?
        • @Jimmy,就个人而言,我已经在几个小项目中使用过 IUP,并且对它非常满意。它最大的优点也是它的弱点:它喜欢用盒子和胶水模型来做自己的控件布局,所以很容易指定一个充满控件的对话框,但很难让它的布局与其他对话框完美匹配。不同的控制组合。我已经尝试过 wxLua 演示,它显然是一个优质产品,但我没有个人理由切换。
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          缺乏标准库。时期。即使列出目录中的所有文件也需要a non-standard module

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

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                猜你喜欢
                • 2010-09-21
                • 2011-07-16
                • 2014-03-13
                • 1970-01-01
                • 2016-04-15
                • 1970-01-01
                • 2012-11-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多