a seven
a seven
这是不得以而为之的办法。 dream big
就1楼的方案 专门看了一下 luaL_traceback 的源码 发现效率低的原因有2个 1 字符串格式化 字符串连接 这些操作 2 5.3之后 为了读取 文件返回表时 函数字段名称 递归了package.loaded里所有的表 去匹配相同函数值的字段名 导致效率低下 所以针对这2个问题 去掉一些无用信息 就遍历调用栈 取关键信息进行哈希 节省字符串格式化/连接 这些操作 就可以极大的提高 获取调用栈哈希值 信息的效率。 应该还是可行性的 等后面有空的时候我再实际操作一个版本试试。
异步创建的表 混合 同步创建的表 一起作为key 进行遍历 产生的异步 确实可能存在,但是情况还是会比较少的, 大部分情况下 是在同步环境下 创建的表对象 需要在同步的情况下进行pairs 仅仅为满足这个需求。 当然最安全的情况 就是分2个虚拟机 用中间代码进行交互。 但是会带来使用上的负担 影响便捷性
thanks, I hope to support debugging in a Win32 environment in the future, even in interpreted mode.
必须 require("jass.runtime").handle_level = 0 否则 大于0的配置 acb将 魔兽的handle 绑定到 lua的表对象上面, 跟lua gc绑定到一起了, 如果有本地玩家, 异步的ui事件 或者按键事件 就会导致 有异步对象引用 就会导致引用计数异步 就会掉线, 这是个没有考虑好的设计。
字符串的问题 根据ydwe的版本来决定, 如果是ydwe1.32版本的话, 字符串自身也有分配个gchash id 用来pairs遍历的, 如果异步产生字符串 也会导致pairs顺序异步。 而1.31的方案则不同 问题有很多细节 我不想赘述了。
>  盲测了一波 除了魔兽内部对数据包处理卡(延迟)爆表外没发现异步 (kk编辑器, 2个玩家) > > > 特效的地址用了空字符串,返回的特效id=nil > > 用空字符串("")创建特效不会返回null/nil > > ~顺便嘴一下魔兽的异步99.99%来源是 tag(yd的定义是objectid_64)被异步创建/删除了 _(省略约30字的详细信息)_ 基本上 hook + log 一下魔兽的相关函数就能得知哪里异步了~ 你要确保技能cd小于0.1秒, 并且不会卡在施法前摇的阶段, 然后开连点器 异步点击事件的时候发布一次 施法一次 就知道了。
其实现在魔兽lua脚本引擎 因为有了许多掉线的因素存在 变得十分的不稳定, 非常轻易的掉线, 但凡你用lua写地图 第一张图必定会遭遇掉线的问题, 这么多年下来见怪不怪了, 你说的handle引用计数异步只是其中一个因素, 还有更多的, pairs顺序,本地玩家或异步事件里修改了数据,甚至还有 带视野+地形纹波会导致地形坐标z轴异步, 甚至我还遇到了非常奇怪的 窗口化跟全屏的浮点数不一致 写一张地图 动则几万行lua脚本 找一个位置犹如大海捞针。
因此我有了设计新的引擎的规避掉线的想法,而且写了这么多年的lua 我其实不太喜欢lua, 所以新的引擎采用其他语言方案,保证性能 内存 异步 安全方面都做了针对性的处理 新的引擎我已经封闭式开发写了2年了 由于现在的环境不是很愿意对外公开。
> 这个世界发展那么快,不要这几十年前的东西上吊死了。多看看外面的世界多美好。 至少我们还有兴趣, 乐此不疲。