问题标签 [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.
optimization - Lua 挑战:你能提高 fannkuch 实现的性能吗?
Lua 是目前最快的脚本语言,对于某些程序来说,它并不比 C/C++ 慢多少(与 pidgits 1:1 相当),但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。
其中之一是 fannkuch 测试(对微小整数序列的索引访问),它的得分是可怕的 1:148
那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。
optimization - Lua 挑战:你能提高 mandelbrot 实现的性能吗?
状态:到目前为止,最佳答案的程序执行时间是原始程序的 33%!但可能还有其他方法可以优化它。
Lua 目前是最快的脚本语言,但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。
其中之一是 mandelbrot 测试(生成 Mandelbrot 设置便携式位图文件 N=16,000),它的得分是可怕的 1:109(多核)或 1:28(单核)
由于速度的 Delta 非常大,因此这是一个很好的优化候选者。另外我敢肯定,那些知道 Mike Pall 是谁的人可能会认为不可能进一步优化这个,但这是明显错误的。任何做过优化的人都知道,总是有可能做得更好。此外,我确实设法通过一些调整获得了一些额外的性能,所以我知道它是可能的 :)
那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。
编辑:为此设置赏金以使挑战更有趣。
optimization - Lua 挑战:你能提高谱范数实现的性能吗?
Lua 是目前最快的脚本语言,对于某些程序来说,它并不比 C/C++ 慢多少(与 pidgits 1:1 相当),但是 Lua 在一些针对 C/C++ 的基准测试中得分非常低。
其中之一是谱范数测试(使用幂法 N=5,500 的特征值),它的得分是可怕的 1:148
那么如何优化它(当然,与任何优化一样,您必须测量您的实现以确保它更快)。并且你不能为此改变 Lua 的 C 核心,或者使用 LuaJit,它是关于寻找优化 Lua 弱点之一的方法。
scripting - 开始 Lua 脚本
我正处于被迫学习 Lua 的阶段,所以你对我如何做到这一点有什么建议吗?除了 PHP,我对任何其他脚本语言都没有太多经验。
那么,关于“Head start Lua”页面的一些建议?
编辑
作为精彩教程页面的补充,您能否建议我可以制作的任何“程序”来帮助我学习 Lua?想象一下,我想学习 C++ 中的指针,我会创建一个链接列表。我想接触 Lua 的基础知识,但同时对相当高级的东西持开放态度。
scripting - 什么时候使用像 Lua 这样的嵌入式脚本语言比较好
我玩了大约 2 年的魔兽世界,我对用于编写插件的 Lua 非常好奇。由于到目前为止我所读到的关于 Lua 的内容是“快速”、“轻便”和“这很棒”,我想知道如何以及何时使用它。
您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么?
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 对象工厂和讨厌的外部对象的需要。
我要解决这个错误吗?
谢谢。
lua - 如何按值复制 Lua 表?
最近我写了一些 Lua 代码,比如:
显然,这不是我想要做的,因为变量包含对匿名表的引用,而不是 Lua 中表本身的值。这在Programming in Lua中有明确规定,但我忘记了。
所以问题是我应该写什么而不是copy = a
获取值的副本a
?
lua - 低级 Lua 解释器
有没有办法以比标准“lua_pcall”函数调用更细粒度的级别从 C/C++ 程序运行 Lua 代码?理想情况下,我希望能够遍历一个低级字节码指令列表(假设它有这样的东西)并一个接一个地运行它们,这样我就可以编写自己的调度程序,它对事情的控制不仅仅是运行从头到尾一个完整的 Lua 函数。
我想这样做的原因是因为我希望实现 Lua 代码可以调用的 C 函数,这将导致程序等到某个(可能是冗长的)动作完成后再继续执行。在典型的 Lua 脚本中会有很大比例的此类函数调用,因此在操作完成后重写它以使用回调的想法并不实际。
lua - 如何在 Lua 中获取哈希表中的键数?
我真的必须遍历表中的项目来获取键的数量吗?
list - 在 Lua 列表中搜索项目
如果我有这样的项目列表:
如何检查“橙色”是否在此列表中?
在 Python 中,我可以这样做:
Lua中是否有等价物?