当我看到 Lua 时,我唯一读过的就是“非常适合嵌入”、“快速”、“轻量级”,而且比其他任何东西都多:“魔兽世界”或简称“魔兽世界”。
为什么仅限于将整个事物嵌入到另一个应用程序中?为什么不像使用 Python 或 Perl 那样编写通用脚本呢?
Lua 似乎在速度和内存使用(最快的脚本语言 afaik)等方面做得很好,那么为什么我从来没有看到 Lua 被用作“桌面脚本语言”来自动化任务呢?例如:
- 重命名一堆文件
- 从网上下载一些文件
- 网页抓取
是缺少标准库吗?
Lua 是一种很酷的语言,重量轻且速度极快!
但重点是:性能对于你提到的那些任务那么重要吗?
你编写这些程序一次,运行一次,也可能。为什么你如此关心一次性程序的性能?
例如:
如果您选择第一个,您可以节省运行程序的时间,但您会花费时间来开发程序。
另一方面,如果选择第二种,则浪费时间运行程序,但可以在程序运行时做其他事情。玩魔兽世界,用你的术士杀怪怎么样?吃掉我的DOT!:P
就是这样!虽然 Lua 写起来并不难,但 Lua 的一切设计都是为了高效。而且 Lua 的模块很少,但 Python 的模块却很多。你不想为 Lua 移植一个 C 库只是为了一个运行一次的程序,对吗?相反,选择 Python 并使用这些模块轻松完成您的任务可能是一个更好的主意。
仅供参考:实际上,我曾尝试使用 Lua 进行网页抓取,但最后,我意识到我不必太在意语言性能。网页抓取的瓶颈不在于语言的性能。瓶颈在于网络 I/O、HTML 解析和多任务处理。我所要做的就是确保程序正常工作并找到瓶颈。最后,我选择了 Python 而不是 Lua。有很多优秀的 Python 模块;我没有理由建立自己的。
根据我对网页抓取的经验,我选择 Twisted 进行网络 I/O 和 lxml 进行 html 解析作为我的网页抓取程序的后端。我写了一篇文章来介绍这项技术。
从网站抓取数据的最佳选择:Python + Twisted + lxml
希望这会有所帮助。
Lua 的库比 Python 少。但一定要看看LuaForge。它有很多有趣的库,比如LuaCURL、wxLua或getopt。
然后,访问LuaRocks,这是 Lua 的包管理系统。有了它,你可以搜索和安装最成熟的 Lua 模块和依赖。感觉就像RubyGems或aptitude。
lua-users.org网站也有很多有趣的资源,比如教程或Lua Wiki。
我喜欢 Lua 的不是它的速度,而是它最小的核心语言、灵活性和可扩展性。
也就是说,我可能会使用 Python 来完成您提到的任务,因为更大的社区在 Python 中做这些事情。
仅仅因为它作为嵌入式脚本引擎的专用语言被“销售”(在某种意义上),并不意味着它仅限于此。事实上,WoW 也可以选择 Python 作为他们的嵌入式脚本语言。
这可能是因为 Lua 被设计为一种脚本和扩展语言。在官方网站上,它被描述为一种强大、快速、轻量级、可嵌入的脚本语言。没有什么能阻止你为它编写通用程序(如果我没记错的话,它附带解释器和编译器),但语言设计者打算将它主要用作嵌入式语言(因此是轻量级的)
这是一个社会学问题,而不是编程问题。
我几乎完全将 Lua 用于通用脚本。但是我必须写几百行代码,这样 Lua 才能更好地使用 shell。这包括这样的技巧
(对于那些可能感兴趣的人,我将代码留在了我的Lua drop box 中,其中还包含一些其他的东西。有趣的东西可能在osutil
, os.quote
, os.runf
,os.capture
和也许os.execve
。通配符在posixutil.lua
. 他们都使用 Luiz Henrique de Figuereido 的Lua Posix 库。)
对我来说,额外的努力是值得的,因为我可以处理简单的语法和出色的数据结构。对于其他人来说,与外壳更直接的连接可能是首选。
绝对缺乏标准库。它也比 Python、Perl 或 Ruby 鲜为人知。
最近有人推动在 Windows 上为 Lua 创建包含电池的安装。结果可以在 LuaForge的Lua for Windows项目中找到。它包括解释器和大量额外模块,允许开箱即用地编写和使用有用的脚本和应用程序。
我知道现在各种 Linux 发行版都包括 Lua 和一些模块,而且还会有更多。
邮件列表中还讨论了几个提议的模块库,但社区还没有确定一个作为“官方”机制。
我将 Lua 用作脚本语言和典型应用程序的“主”循环,由一个或多个包含在 C 中更好地实现的代码的 DLL 支持,或者包装特定项目所需的现有库或 API 函数。与诸如IUP或wxLua(wxWindows 的 Lua 绑定)之类的 GUI 工具包一起使用,Lua 使编写中小型 GUI 应用程序变得非常愉快。
我认为关于它作为“营销”事物的答案可能是正确的,同时缺乏大量可供选择的库。我想指出另一个例子:Ruby。Ruby 旨在成为一种通用脚本语言。问题是,自从 Ruby on Rails 变得如此流行以来,很难找到与 Rails 无关的东西。恐怕 Lua 也会遭受这种痛苦,因为一些主要的东西使用它而流行,但永远无法摆脱这种耻辱。
缺乏标准库。时期。即使列出目录中的所有文件也需要非标准模块。
这样做有充分的理由(保持严格的 ANSI 可移植性,不需要 POSIX),但结果是,对于一般编程,我更喜欢 Python。
Lua 作为一种嵌入式语言用于TeX 扩展LuaTeX中,并因此在 TeX 开发人员中迅速普及。它被用作 TeX Live 发行版中某些实用程序的脚本语言,只是因为现在有一个luatex
二进制文件,可在所有平台上使用,它也可以用作 Lua 解释器(添加了一些重要模块——slnunicode、luafilesystem等)这对于 Windows 安装非常重要,它依赖于早期的其他 Unix 脚本工具(ActivePerl 等)。ConTeXt 宏语言现在广泛使用 Lua 脚本。
诚然,这是一个非常特殊的领域 :-) 但与游戏完全无关!
为了使 Lua 易于嵌入,它必须具有很少的依赖项并且很小。这使得它不适合作为通用脚本语言。因为将其用作通用脚本语言将需要大量标准库。但是如果 Lua 有很多标准库,那么嵌入将更加困难(由于依赖项和内存占用。)