问题标签 [luajit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5467 浏览

memory - Lua表内存?

这可能是一个奇怪的问题,但是当我在填满 1400 万多个项目后最终出现内存错误时,我的好奇心占了上风。

Lua 表是否有某种设置的内存限制,或者它是否有点动态?我认为 Lua 本身通常会分配这么多内存,当内存用完时会抛出错误,但这只是一个疯狂的猜测。有谁肯定知道吗?谢谢。

0 投票
1 回答
292 浏览

c++ - 是否可以在单线程应用程序中的多个 lua_State 之间共享一个表?

我在一个 Lua 脚本中有一个表,我想与其他 Lua 脚本共享,这些脚本加载到不同的 lua_State 中,因此他们可以调用该表中的方法。有可能这样做吗?

0 投票
2 回答
4901 浏览

c++ - 如何静态构建和链接 LuaJIT (VS 2013)

前提:我希望我的 C++ 应用程序不依赖于任何东西Microsoft Visual C++ redistributable,这样我就可以发送开箱即用的可执行文件。

我首先要做的是:将运行时库切换到Multithread (/MT)fromDLL Multithread (/MD)以避免需要msvcr110.dll(VS 2013 不应该需要 120 版本,因为它是编译器版本?)。为此,我还必须重新编译我正在使用的另一个库,它与相同的运行时库一起使用,并且有效。我有我的 .exe,它可以在任何地方运行而不会出现问题(或者我不知道,哈哈)。

然后我添加了一些使用 LuaJIT 的功能。msvcbuild.bat我已经通过包提供的LuaJIT 构建了它,它就像一个魅力,但现在我的可执行文件需要msvcr110.dll运行。我想这是因为 LuaJIT 是用 /MD 标志编译的,但我想知道是否有合适的方法来做我想做的事。

0 投票
1 回答
2510 浏览

security - 使用 LuaJIT 编写脚本并选择性地沙盒化 FFI

在尝试并见证了将 Lua 和 LuaJIT 集成到我的游戏引擎中令人难以置信的轻松之后,我确信这就是我想要使用的脚本语言。我想将它用于我的 AI、单位描述、地图触发器等。(尽可能真的)。这个问题不仅适用于gamedev,我可以想象创建一个可以加载外部脚本的脚本编辑器或窗口管理器(例如:带有python和包控制的崇高文本)

但是现在我遇到了一个难题:我真的很欣赏LuaJIT FFI提供的绑定到我的引擎的易用性,但我不想让 FFI 自由支配例如地图作者。通过 FFI(当 JITted 时)进行 lua-to-c 调用的惊人速度也是我真正想要的。

所以理想情况下,我会编写自己的包装 Lua 文件,使用 FFI 绑定到我的引擎,并导出一个不错的模块供地图作者和模组制作者使用。我的替代方法是编写一个香草 lua 模块,这是可能的,但更麻烦和更慢。

编译 luajit 时我无法禁用 FFI,因为显然我想自己使用它,但我看不到如何在每个脚本或每个模块的基础上限制 FFI。显然,FFI 需要在我加载模块的 lua_State 中处于活动状态(之后我无法开始加载用户修改的脚本)。那我该怎么办?甚至可能吗?

编辑:在我看来,理想的工作流程是:

  1. 打开lua状态
  2. 加载所有模块(luaL_openlibs()),FFI 也被预加载
  3. 加载使用 FFI 的我的 .lua 模块(这是引擎绑定,它们是受信任的文件,因此它们可以使用 FFI)
  4. 禁用选择本机模块和功能:os,ffi,...(这是缺少的步骤)
  5. 执行用户提供的脚本(这些是不受信任的,我不希望他们访问 FFI)
  6. 可选:寻找一种方法来重新加载 lua 模块以实现快速编辑周期,这将涉及重新启用 FFI 和其他模块。(也不知道怎么做

注意:我知道这仍然不是一个完美的(甚至是好的沙盒),正如 Mike Pall 在他的一些邮件中已经指出的那样,但我仍然不想让地图作者访问 FFI。

0 投票
1 回答
197 浏览

lua - 如果没有可迭代的内容,lua 迭代器工厂应该返回什么

我正在实现一个 lua 迭代器,我想知道迭代器工厂(创建用于迭代可迭代对象的闭包的函数,参见list_iterhttp://www.lua.org/pil/7.1.html 应该返回没有什么可迭代的情况。

例如,假设我将实现一个列表类型,而我的列表对象根本没有任何条目。因此,我假设 只是从未访问过的主体...,并且脚本执行继续进行,就好像什么也没发生一样。for i in myiterator do ... end

目前我回来了nil,Lua(jit) 抱怨attempt to call a nil value. 如果我不返回返回值,也会发生同样的情况。

0 投票
1 回答
435 浏览

lua - 带有 C API 的 luajit 模式

我从 LUAJIT 开始。

LUAJIT 具有设置模式的功能

有没有办法获得实际模式?

谢谢

0 投票
1 回答
2099 浏览

lua - LuaJIT,如何将 cdata 转换为 userdata?

我想使用 LuaJIT,因为它能够在 Lua 中创建结构和数组。但是我使用数据的函数需要存储数据的用户数据或字符串(不是字符串表示形式,仅用作容器)。

但是通过api我看不到这是否可能。是吗?

谢谢。

0 投票
1 回答
652 浏览

c - Lua (LuaJit) 和 C 中的对象生命周期

我使用LuaJit来扩展一个普通的 C 应用程序(使用 Lua C API)。宿主应用程序确实为我在 Lua 中为其编写包装器的许多对象管理内存。

现在我希望能够从 lua 函数中删除对象,即实现一个删除函数。我想用下面的问题大纲来说明手头的问题。

基本上我的 lua 用户数据结构看起来像这样。

whereobj_db_index是本地对象数据库的索引。使用 Lua C API,我创建了一个 lua 函数query_object(...),它基于此用户数据检索 lua 元表,并提供用于管理 db 对象的 API。

我现在计划my_db_object:delete()在元表 API 中引入一个方法。可以通过用另一个成员变量覆盖变量或设置另一个成员变量:delete()来使其无效。然而问题是,所有对已删除对象的引用都应该失效。考虑这个 lua 代码:my_db_object0

现在我想知道如何解决这个潜在的冲突。两个主要问题是:

  • 无效的obj_db_index可能是无效的索引。这实际上可能已经被代码捕获了,所以它不是很漂亮但还可以

  • 删除后,索引可能会被重用,当其他引用仍然使用旧索引时,这可能会导致细微的错误。

有什么策略来解决这个问题?

我的想法可能有点费时,但如果删除,这将是可以的:

  • 我可以对用户数据对象执行一些自省吗?就像迭代所有具有相同类型的用户数据对象以便在my_db_index触发删除时失效
0 投票
1 回答
8802 浏览

nginx - 如何检查 nginx 是否使用 LuaJit 而不是 Lua?

我安装http-lua-module了 nginx,制作了一个运行良好的脚本,但现在我想确保nginx 使用LuaJit而不是Lua(因为我的研究表明 LuaJit 更快)。

我添加到.bushrc这些代码行:

我还重新编译了 nginx,现在我只想确保它使用 LuaJit。

0 投票
1 回答
505 浏览

windows-phone-8 - Does windows phone8 sdk support c lua and luajit

I am willing to develop wp8 games and preparing to use cocos2d-x wp8 version. I want to use lua script as my main dev language, however I am not sure is wp8 sdk allow me to do that. I did some google work myself, but only find some lua c# stuff. Can any guru tell me can I use lua and its c api or even luajit on wp8 sdk. Thanks for every tip!