问题标签 [lua]

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 回答
588 浏览

optimization - Lua 挑战:你能提高 fannkuch 实现的性能吗?

Lua 是目前最快的脚本语言,对于某些程序来说,它并不比 C/C++ 慢多少(与 pidgits 1:1 相当),但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。

其中之一是 fannkuch 测试(对微小整数序列的索引访问),它的得分是可怕的 1:148

那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。

0 投票
9 回答
4039 浏览

optimization - Lua 挑战:你能提高 mandelbrot 实现的性能吗?

状态:到目前为止,最佳答案的程序执行时间是原始程序的 33%!但可能还有其他方法可以优化它。


Lua 目前是最快的脚本语言,但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。

其中之一是 mandelbrot 测试(生成 Mandelbrot 设置便携式位图文件 N=16,000),它的得分是可怕的 1:109(多核)或 1:28(单核)

由于速度的 Delta 非常大,因此这是一个很好的优化候选者。另外我敢肯定,那些知道 Mike Pall 是谁的人可能会认为不可能进一步优化这个,但这是明显错误的。任何做过优化的人都知道,总是有可能做得更好。此外,我确实设法通过一些调整获得了一些额外的性能,所以我知道它是可能的 :)

那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。

编辑:为此设置赏金以使挑战更有趣。

0 投票
1 回答
364 浏览

optimization - Lua 挑战:你能提高谱范数实现的性能吗?

Lua 是目前最快的脚本语言,对于某些程序来说,它并不比 C/C++ 慢多少(与 pidgits 1:1 相当),但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。

其中之一是谱范数测试(使用幂法 N=5,500 的特征值),它的得分是可怕的 1:148

那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。

0 投票
7 回答
13057 浏览

scripting - 开始 Lua 脚本

我正处于被迫学习 Lua 的阶段,所以你对我如何做到这一点有什么建议吗?除了 PHP,我对任何其他脚本语言都没有太多经验。

那么,关于“Head start Lua”页面的一些建议?

编辑

作为精彩教程页面的补充,您能否建议我可以制作的任何“程序”来帮助我学习 Lua?想象一下,我想学习 C++ 中的指针,我会创建一个链接列表。我想接触 Lua 的基础知识,但同时对相当高级的东西持开放态度。

0 投票
8 回答
3062 浏览

scripting - 什么时候使用像 Lua 这样的嵌入式脚本语言比较好

我玩了大约 2 年的魔兽世界,我对用于编写插件的 Lua 非常好奇。由于到目前为止我所读到的关于 Lua 的内容是“快速”、“轻便”和“这很棒”,我想知道如何以及何时使用它。

您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么?

0 投票
2 回答
1748 浏览

c++ - 如何将用 swig 包装的 c++ 类的实例推送到 lua 堆栈上?

我有一个用 swig 包装的类,并用 lua 注册。我可以在 lua 脚本中创建此类的实例,并且一切正常。

但是假设我有一个在我的 C++ 代码中创建的类的实例,并调用了 new X,并且我有 la lua_state L,其中有一个我想调用的函数,它接受一个参数,一个 X 的实例......我如何调用该函数。这是(一些)有问题的代码(我省略了错误处理的东西):

主文件

主菜单.lua

目前,我发现可以工作的只是从 swig 生成的 cpp 文件中公开一些功能,然后调用它。由于几个原因,这很糟糕......如果我有多个模块并且我不得不更改 swig 文件中的默认链接规范(使用 -DSWIGRUNTIME=),它将无法工作。

我将以下内容添加到 main.cpp

它得到一个指向模块的指针,然后是指向类型的指针,然后调用 swigs 函数来注册它。不得不挖掘一个不应该是人类可读的文件(所以它在文件的顶部说)而且只是混乱,这是一件不合理的事情!(但它确实有效!)

当然,有更好的方法来完成我正在尝试做的事情。

PS 从高级 pov 我想要的是让 lua 不引用由 GuiInst 中的对象工厂创建的 Gui 组件,以防我遇到这个错误。这是我第一次向脚本语言公开功能,除了一些非常简单(和非 swig)的 python 模块,所以我准备接受建议。

感谢您的任何建议!


RBerteig 对评论的回应

当 swig 运行以防止 lua 构造它的实例时,GuiInst 的构造函数是 #defined 私有的,所以这对我不起作用。我试图阻止的是以下(在lua中):

它将调用“g=new GuiButton”,然后将其注册到 GuiRegionVertical(由于各种原因需要存储一个指针),然后调用“delete g”,并且 GuiRegionVertical 留下了一个指向 g 的悬空指针。

我怀疑真正需要发生的是 GuiRegionVertical::Add(GuiButton*) 应该增加 GuiButton* 的引用计数,然后 GuiRegionVertical 的析构函数应该减少其所有内容的引用计数,尽管我不确定这应该如何痛饮就完事了。

这将消除对私有构造函数、Gui 对象工厂和讨厌的外部对象的需要。

我要解决这个错误吗?

谢谢。

0 投票
15 回答
81463 浏览

lua - 如何按值复制 Lua 表?

最近我写了一些 Lua 代码,比如:

显然,这不是我想要做的,因为变量包含对匿名表的引用,而不是 Lua 中表本身的值。这在Programming in Lua中有明确规定,但我忘记了。

所以问题是我应该写什么而不是copy = a获取值的副本a

0 投票
4 回答
2518 浏览

lua - 低级 Lua 解释器

有没有办法以比标准“lua_pcall”函数调用更细粒度的级别从 C/C++ 程序运行 Lua 代码?理想情况下,我希望能够遍历一个低级字节码指令列表(假设它有这样的东西)并一个接一个地运行它们,这样我就可以编写自己的调度程序,它对事情的控制不仅仅是运行从头到尾一个完整的 Lua 函数。

我想这样做的原因是因为我希望实现 Lua 代码可以调用的 C 函数,这将导致程序等到某个(可能是冗长的)动作完成后再继续执行。在典型的 Lua 脚本中会有很大比例的此类函数调用,因此在操作完成后重写它以使用回调的想法并不实际。

0 投票
4 回答
34312 浏览

lua - 如何在 Lua 中获取哈希表中的键数?

我真的必须遍历表中的项目来获取键的数量吗?

0 投票
12 回答
132292 浏览

list - 在 Lua 列表中搜索项目

如果我有这样的项目列表:

如何检查“橙色”是否在此列表中?

在 Python 中,我可以这样做:

Lua中是否有等价物?