Lua是一种通用的脚本语言?

当我看到Lua的时候,我所读过的唯一的东西就是“embedded”,“快速”,“轻量级”,比“魔兽世界”或者简称“魔兽世界”更经常。

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

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

  • 重命名一堆文件
  • 从网上下载一些文件
  • Webscraping

缺乏标准库吗?

仅仅因为它是作为embedded脚本引擎的特殊用途语言(在某种程度上来说)“销售”,并不意味着它就局限于此。 实际上,WoW也可以selectPython作为他们的embedded式脚本语言。

Lua是一个很酷的语言,重量轻,速度非常快!

但重点是: 对于你提到的那些任务,performance如此重要?

  • 重命名一堆文件
  • 从网上下载一些文件
  • Webscraping

你一次写这些程序,运行一次,也许。 为什么你在乎一次运行一次的程序呢?

例如:

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

如果您select第一个,那么节省运行该程序的时间,但是您花时间来开发该程序。

另一方面,如果你select第二个,那么你就浪费时间来运行程序,但是当程序运行时你可以做其他事情。 玩魔兽世界怎么样,用你的术士杀怪? 吃我的DOT ! :P

而已! 尽pipeLua并不是很难写,但Lua的一切都是为了高效而devise的,而且Lua中只有很less的模块,但是Python中有很多模块。 你不想为一个运行一次的程序移植一个用于Lua的C库,是吗? 相反,selectPython并使用这些模块轻松实现您的任务可能是一个更好的主意。

仅供参考:实际上,我曾经尝试过使用Lua来进行networking扫描,但最后我意识到我不必太在乎语言performance。 webscraping的瓶颈不在于语言的performance 。 瓶颈在于networkingI / O,HTMLparsing和多任务处理。 我所要做的就是确保程序正常工作并find瓶颈。 最后,我select了Python而不是Lua。 有这么多优秀的Python模块, 我没有理由build立自己的。

根据我关于网页浏览的经验,我select了Twisted作为networkingI / O和lxml作为我的webscraping程序的后端。 我写了一篇文章介绍这项技术。

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

希望这是有帮助的。

Lua的库比Pythonless。 但一定要看看LuaForge 。 它有很多有趣的库,如LuaCURL , wxLua或getopt 。

然后,访问Lua的包pipe理系统LuaRocks 。 有了它,你可以search和安装依赖关系最成熟的Lua模块。 感觉就像RubyGems或aptitude 。

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

我所喜欢的关于Lua的不是它的速度,而是它最基本的核心语言,灵活性和可扩展性。

也就是说,我可能会使用Python来处理你所提到的任务,因为大型社区在Python中做这样的事情。

这可能是因为Lua被devise为脚本和扩展语言。 在官方网站上,它被描述为一个function强大,快速,轻量,可embedded的脚本语言。 没有什么能够阻止你为它编写通用程序(如果我正确地记得它带有解释器和编译器),但是语言devise者打算把它主要用作embedded式语言(因此是轻量级的,所有的)

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

我几乎全部使用Lua进行通用脚本编写。 但是我不得不写几百行代码,这样Lua才能更好地使用shell。 这包括诸如此类的技巧

  • 引用一个string,所以它被shell看作是一个单词
  • 编写一个函数来捕获命令的输出,如shell $(command)
  • 编写一个函数来使用Lua posix库来抓取文件系统,并展开shell globbing模式

(对于那些可能感兴趣的人,我把代码留在了我的Lua下拉框中 ,它也包含了一些其他的东西。有趣的东西可能在os.quoteos.runfos.capture ,也许os.execveposixutil.lua ,他们都使用Luiz Henrique de Figuereido的Lua Posix库 。)

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

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

缺乏标准的图书馆。 期。 即使列出目录中的所有文件也需要一个非标准的模块 。

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

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

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

邮件列表中还有几个正在讨论的模块库,但是社区还没有把它作为“官方”机制。

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

我认为关于它作为“市场营销”的答案可能是正确的,还有缺乏大量的图书馆可供select。 我想指出另一个例子:Ruby。 Ruby意味着成为一种通用的脚本语言。 问题是,由于Ruby on Rails已经如此受欢迎,所以很难find与Rails无关的东西。 恐怕Lua也会因为使用它的一些主要的东西而受到欢迎,但是从来没有能够摆脱这种耻辱。

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

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

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