Lua作为一种通用脚本语言?
当我看到 Lua 时,我所听到的只有 "非常适合嵌入"、"快速"、"轻量级",而且比其他任何东西更频繁的是:"魔兽世界"或简称"魔兽"。
为什么它只限于将整个东西嵌入到另一个应用程序中呢?为什么不像使用 Python 或 Perl 一样编写通用脚本呢?
Lua 在速度和内存使用等方面似乎表现出色(据我所知,它是最快的脚本语言),那么为什么我从未看到 Lua 被用作 "桌面脚本语言 "来自动化任务呢?例如:
- 批量重命名文件
- 从网上下载一些文件
- Web 爬虫
是不是缺少标准库的原因?
原文链接 https://stackoverflow.com/questions/250151
很可能是因为 Lua 被设计成脚本和扩展语言。在 官方网站 上,它被描述为一种强大、快速、轻量级、可嵌入的脚本语言。你完全可以为它编写通用目的的程序(如果我没有记错的话,它会带有解释器和编译器),但语言设计者的意图是将其主要用作嵌入式语言(因此是轻量级的)。
肯定存在标准库不足的问题。同时,它也比 Python、Perl 或 Ruby 不太知名。
Lua 是一门很酷的语言,非常轻量和极其快速!
但关键是:对于那些你提到的任务,性能是否如此重要呢?
- 批量重命名文件
- 从网上下载一些文件
- 网页爬虫
你只需要编写这些程序一次,也只需运行一次。 为什么你会如此关心一个只运行一次的程序的性能呢?
例如:
- 花费 3 小时编写一次性处理数据的 C/C++ 程序,该程序将需要 1 小时运行时间。
- 花费 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
希望这对你有所帮助。
我认为关于这是“营销”问题的答案可能是正确的,再加上缺乏大量可供选择的库。我想指出另一个类似的案例:Ruby。Ruby本意是通用脚本语言。问题是,由于Ruby on Rails变得非常流行,很难找到与其无关的东西。我担心Lua也会遭受同样的遭遇,因为一些主要的东西使用它而变得流行,但永远无法摆脱这种烙印。
Lua 拥有的库比 Python 少。但是一定要浏览 LuaForge,它有很多有趣的库,比如 LuaCURL、wxLua 或者 getopt。
然后,去访问 LuaRocks,Lua 的软件包管理系统。通过它,你可以搜索和安装大部分成熟的 Lua 模块,包括它们的依赖。它就像 RubyGems 或 aptitude。
网站 lua-users.org 也有很多有趣的资源,比如教程或 Lua Wiki。
我喜欢 Lua 不是因为它的速度,而是因为它最小的核心语言、灵活性和可扩展性。
话虽如此,我可能会使用 Python 来完成你提到的任务,因为在 Python 中从事这些任务的社区更大。
这是一个社会学问题,不是一个编程问题。
我几乎只使用 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 直接连接。
缺乏标准库。就是这样。即使是列出目录中的所有文件也需要 一个非标准模块。
由于一些很好的理由(保持严格的 ANSI 可移植性,不需要 POSIX),但是结果是对于一般编程,我更喜欢 Python。
最近已经推出了一个在 Windows 上为 Lua 创建完整安装的推动。可以在 LuaForge 的 Lua for Windows 项目中找到其结果。它包括解释器和一大堆额外模块,使得可以编写和使用有用的脚本和应用程序。
我知道现在有一些 Linux 发行版已经包含了 Lua 和一些模块,未来将会有更多。
在邮件列表中也有一些提议的模块库正在讨论中,但是社区还没有确定一个“官方”的机制。
我将 Lua 用作脚本语言和我的典型应用程序的“主”循环,支持一个或多个包含用 C 实现更好的代码、包装已存在的库或特定项目所需的 API 函数的 DLL。与 GUI 工具包(如 IUP 或 wxLua(wxWindows 的 Lua 绑定)一起使用,Lua 的编写小到中型 GUI 应用程序变得非常愉快。
为了使 Lua 容易嵌入,它必须依赖少,而且体积小。这使得它不适合作为一般用途的脚本语言。因为将它用作一般用途的脚本语言需要大量的标准库。但如果 Lua 有很多标准库,它将更难以嵌入(因为依赖和内存占用)。
Lua在TeX扩展LuaTeX中用作嵌入式语言,因此在TeX开发人员中迅速流行起来。 它用作TeX Live分发中某些实用程序的脚本语言,因为现在有一个名为'luatex'的二进制文件,在所有平台上都可以使用它作为Lua解释器(添加了一些重要模块-例如slnunicode,luafilesystem等)。 这对于先前依赖其他Unix脚本工具(ActivePerl等)的Windows安装非常重要。 现在,ConTeXt宏语言广泛使用Lua脚本。
这显然是一个非常特殊的领域 :-) 但与游戏完全无关!
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
只是因为它被“销售”(在某种一般意义上)作为嵌入式脚本引擎的特定语言,并不意味着它仅限于此。事实上,魔兽世界可能同样可以选择Python作为他们的嵌入式脚本语言。