2022年6月10日15:33:34
luajit开发文档中文版(一)下载和安装
luajit开发文档中文版(二)LuaJIT扩展
luajit开发文档中文版(三)FAQ 常见问题
luajit开发文档wiki中文版(二) LuaJIT 扩展
luajit开发文档wiki中文版(三)性能调优和测试
luajit开发文档wiki中文版(四) LuaJIT 内部结构
luajit开发文档wiki中文版(五) 系统集成
luajit开发文档wiki中文版(六) LuaJIT 开发
常见问题 (FAQ)
-
问:我在哪里可以了解更多关于 LuaJIT 和 Lua 的信息?
-
- LuaJIT 邮件列表专注于与 LuaJIT 相关的主题。
- LuaJIT wiki收集有关 LuaJIT的社区资源。
- 有关 Lua 本身的新闻可以在 Lua 邮件列表中找到。邮件列表档案值得查看有关 LuaJIT 的旧帖子。
- Lua.org主站点有完整 的语言文档以及关于 Lua 的书籍和论文的链接。
- 社区管理的Lua Wiki 包含有关不同主题的信息。
-
问:我在哪里可以了解更多关于 LuaJIT 使用的编译器技术的信息?
- 请使用以下 Google Scholar 搜索找到相关论文: 搜索: Trace Compiler 搜索: JIT Compiler 搜索: Dynamic Language Optimizations 搜索: SSA Form 搜索: Linear Scan Register Allocation 以下是 LuaJIT 中的创新功能 列表. 而且,您知道,阅读源代码当然是获得启蒙的唯一途径。
-
问:为什么我会收到此错误:“尝试索引全局 'arg'(一个 nil 值)”?
问:切换到 LuaJIT 后,我的 vararg 函数失败!
- LuaJIT 兼容 Lua 5.1 语言标准。它不支持Lua 5.0 中老式 vararg 函数的隐式 arg参数。 请将您的代码转换为 Lua 5.1 可变参数语法 。
-
问:为什么会出现这个错误:“bad FPU precision”?
问:我在初始化 Direct3D 后出现了奇怪的行为。
问:加载 Delphi DLL 后,某些 FPU 操作崩溃。
- DirectX/Direct3D(最高版本 9)默认将 x87 FPU 设置为单精度模式。这违反了 Windows ABI 并干扰了许多程序的运行——LuaJIT 也受到了影响。请确保在初始化 Direct3D 时始终使用 D3DCREATE_FPU_PRESERVE标志。 Direct3D 版本 10 或更高版本不再显示此行为。也可以考虑使用旧版本测试您的应用程序。 类似地,Borland/Delphi 运行时修改 FPU 控制字并启用 FP 异常。当然,这也违反了 Windows ABI。请查看 Delphi 文档以了解 Set8087CW 方法。
-
问:有时 Ctrl-C 无法停止我的 Lua 程序。为什么?
- 中断信号处理程序设置了一个 Lua 调试钩子。但这被编译的代码忽略了。如果你的程序在一个紧密的循环中运行并且永远不会回退到解释器,那么调试钩子永远不会运行并且不能抛出“中断!” 错误。 您必须按 Ctrl-C 两次才能停止您的程序。这类似于它在 Lua 解释器下的 C 函数中运行。
-
问:使用pairs()
的表迭代不会产生相同的顺序?
- Lua 语言标准明确 未定义 表迭代的顺序。 不同的 Lua 实现或版本可能对其他相同的表使用不同的顺序。构建表的不同方式也可能导致不同的顺序。 由于提高了 VM 安全性,LuaJIT 2.1 甚至可以在单独的 VM 调用或新的字符串键被实习时使用不同的顺序。 如果您的程序依赖于确定性顺序,那么它就有一个错误。重写它,因此它不依赖于密钥顺序。或者,如果必须,对表键进行排序。
-
问:Lua 代码可以安全地沙盒化吗?
- 也许对于 Lua 的一个极其受限的子集,如果你无情地检查你提供给不受信任代码的每一个接口函数。 尽管 Lua 提供了一些沙盒功能( setfenv() ,钩子),但即使对于 Lua 核心库,也很难做到这一点。当然,您还需要检查任何扩展库。还有一些库本质上是不安全的,例如 FFI 库 。Lua Wiki和Wikipedia 上的更多阅读材料。 相关地,加载不受信任的字节码是不安全的! 使用恶意制作的字节码使 Lua 或 LuaJIT VM 崩溃是微不足道的。这是众所周知的,并且没有故意进行字节码验证,因此请不要报告有关它的错误。检查load*()函数的 模式 参数 以禁用字节码的加载。一般来说,唯一有希望的方法是在进程级别而不是 VM 级别沙箱 Lua 代码。
-
问:Lua 到处跑。为什么 LuaJIT 不支持我的 CPU?
- 因为它是一个编译器——它需要生成本机机器代码。这意味着代码生成器必须移植到每个架构。而且快速解释器是用汇编程序编写的,也必须移植。这是一项艰巨的任务。安装文档 显示了支持 的架构。 基于足够的用户需求和架构的市场相关性,可能会采用其他架构。需要赞助来开发港口本身,整合它并在积极发展的分支机构中持续维护它。