本页面评审 Lua 模块。一个目标是确定一个或多个准官方/重要模块集,推荐它们作为最佳实践,并将其包含在 Lua 标准库和 Lua 发行版中(例如 LuaForWindows?)。
函数类别
这些是标准库和发行版需要涵盖的函数领域,以及最能满足这些需求的模块。
关键: [W] = 包含在 LuaForWindows? 中。[K] = 包含在 Kepler[1] 中。[A] = ANSI C。[L] = 纯 Lua 实现(无 C)
- 基本数据结构,实用函数
- PenLight?[2]? [主要为 L] - 表格/列表/集合/映射操作、字符串函数、实用函数、I/O 实用函数、函数式编程、列表推导、文件路径解析、命令行解析(另请参见 标准库) - (文档良好,但设计在 200906 时处于不断变化中)。
- 操作系统/系统
- 注意:其中一些需要 C 中的平台支持。
- 文件系统操作:文件系统操作
- 文件路径名称操作(例如,类似于 boost 文件系统 [3]) - 请参见 文件系统操作
- 命令行解析 (命令行解析 - 哪一个?)
- 日期/时间 - 哪一个?
- 网络/套接字:LuaSocket? [W|K] - 质量=?,实用性=高(其他?)
- 多任务 (多任务 - 哪一个?)
- 操作系统特定(例如 POSIX / Win32) - 哪些?lposix [4] ?
- 外部函数接口 (FFI) - 这些可以与非 Lua 代码交互,极大地扩展了 Lua 的功能
- 注意:这些通常需要 C 中的平台支持。
- Lua->C:Alien [W]
- Lua->Python:LunaticPython [W-计划中](注意:目前为 LGPL)
- Lua->Java: (哪一个?)
- Windows 特定:
- 解析/序列化/格式
- 注意:所有这些可能都可以在纯 Lua [L] 或(为了更高的效率)ANSI C [A] 中实现。
- 位运算 (位运算符 - 可能是 Bit
Op) - 应用:二进制文件/协议处理、算法、与 C API(例如 Alien)的接口。
- 结构体操作 - 结构体打包
- Unicode(哪一个?)
- PEG:LPeg [W|A] - 质量=高,实用性=高 - 应用:超越正则表达式的词法分析/解析
- 正则表达式库(lrexlib?MIT 许可证,但使用 BSD 正则表达式库(PCRE 或 Oniguruma)或 POSIX regex.h(许可证?))问题:[12]。考虑到 LPeg,这是必要的吗?)
- XML 解析(哪一个?LuaExpat??[W|K] MIT 许可证) - 请参阅 LuaXml
- JSON 解析 - JsonModules
- CSV 解析?(哪一个?) - LuaCsv
- Lua 解析:允许 Lua 解析自身具有理论和实践意义,包括构建编译器和源代码分析器。有许多不同的方法
- 包含在 MetaLua 中的 gg 和 mlp 解析模块。[L] mlp 将 Lua 源代码(可选地包含语法扩展)解析为 AST。它建立在 gg 之上,gg 可以解析更通用的语法(不仅仅是 Lua),并且也很有用。词法分析器基于 Yueliang。许多 Lua 源代码分析工具和编译器重新实现使用 mlp。AST 设计/接口经过精心设计,并在完整的 MetaLua 应用程序中使用。许多用户进行了测试。它是在 Lua 中实现的,这很方便,但不太可能是最快的解析器。
- Leg [5] 可能是另一个候选者。Leg 用于 Shake [6] 单元测试框架。Leg 基于 LPeg(见上文),因此它应该很有效率。Leg 似乎没有生成定义明确的 AST(如 MetaLua)。一个不错的扩展是让它生成 MetaLua 风格的 AST 以保持一致性(这可以在 [LuaFish] 中包含的类似 LPeg 解析器中完成)。
- 另一种方法是使用 Lua 自己的词法分析器代码(llex.c),例如使用 lhf 的库 [7][8]。
- 对于其他内容,请参阅 LuaGrammar。
- 编码
- 压缩/解压缩 - 请参见 CompressionAndArchiving
- ZIP 文件读写 (LuaZip?? [W|K] - 只读 ZIP。MIT 许可,但使用 zzpiblib [zziplib.sourceforge.net] 库,该库采用双重 MPL/LGPL 许可) - 应用:提取 LuaRocks 档案,系统管理 (例如压缩日志文件/提取档案),压缩虚拟文件系统 (例如,可能存储在 ZIP 档案中的模块,并使用自定义搜索器函数加载),读取基于 ZIP 的格式 (例如 OpenOffice? 文档)。
- zlib 读写 (LuaZlib?? [/luazlib/]) - 应用 [9])
- Lua 对象持久化 - PlutoLibrary
- 加密 - CryptographyStuff
- 注意:所有这些可能都可以在纯 Lua [L] 或(为了更高的效率)ANSI C [A] 中实现。
- 摘要
- MD5: (MD5? [W|K] [A-C99?] MIT 许可。也支持 DES) - 应用:验证档案完整性 (例如 LuaRocks),用于安全性的通用加密哈希 (例如存储密码哈希) 和 Web 应用。
- SHA1, CRC32 - 哪些?
- 通用唯一标识符 - UUID 生成
- 测试/调试/分析
- 模块部署 - LuaRocks [W-计划]
- 打包 - BinToCee 或相关模块?srlua [10]?
- 图形/多媒体 - 二级
- 注意:这些通常需要 C 中的平台支持。
- GUI 工具包 (图形用户界面工具包 - 哪个?IUP [W] 和 wxLua [W] ?) - 大尺寸?
- 图像处理 (哪个?Lua-GD? [W] CD? [W] 一个 cairo 模块?) (库和绑定 - 哪些?)
- OpenGL (库和绑定 - 哪个?)
- 声音/视频 (库和绑定 - 哪些?)
- 数据库 - 二级
- SQL: LuaSQL [W] - 质量=?, 用途=中等
- Web 应用 - 二级
- 数值/数学 - 第二层
- 其他 - 第二层?
- LuaJIT(可能是第一层)
- MetaLua(参见上面的 mlp 和 gg)
- RS232 串行通信 - 哪一个?参见 串行通信
模块级别
模块可以根据重要性或适用性分为多个级别。一个发行版可能包含较低级别,但可能不支持较高级别。
- 零层 - Lua 标准库和任何其他用 ANSI C 实现的模块
- 第一层 - 这些模块应该非常有用,质量高,体积小,许可证宽松,并且可以在相当数量的平台上运行(包括 POSIX 和 Win32)
- 第二层 - 这些模块可能只对某些类型的应用程序至关重要,并且体积较大
衡量特征
这些特性有助于确定将模块包含在标准库和发行版中的适当性。
- 有用性 - 如果一个模块在大量不同的应用程序中都需要,那么它就非常有用。例如,许多程序都需要非 ANSI 文件系统操作或按位操作。注意:即使模块的实现质量(定义如下)很低,它仍然可能非常有用。
- 实现质量 - 这指的是良好的接口设计和低错误数量(广泛的测试套件)。注意:某些发行版可能会对关键应用程序提供质量保证。
- 打包质量 - 这包括其他非功能性质量领域:文档、LuaRocks 规范包含、构建系统等。
- 许可证 - 例如 MIT 或其他。注意:某些发行版可能只限制自己使用 MIT 许可证(与 Lua 兼容),而其他发行版可能允许或不允许开源或专有库(例如 debian free/nonfree [11])
- 依赖项 - 操作系统依赖项、对系统库的依赖、编译器依赖项(例如 GCC/MSVC)以及实现语言(例如纯 Lua 或 C)。注意:Windows 发行版不会包含特定于 Linux 的模块,某些发行版可能会限制自己使用纯 Lua 模块或 ANSI C 模块。
- 大小 - 一些东西,比如 GUI 工具包,可能会使某些发行版过于臃肿。体积增加也会增加确保质量/测试的难度。一个体积小、功能强大的库比一个体积大、功能一般的库更受欢迎。
另请参见
- Lua 分发版 - 分发版可能包含许多这些模块
- 标准库 - 其他 Lua 库标准化工作
- 其他标准库(用于比较)
最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2011 年 2 月 22 日凌晨 2:48 GMT (差异)