前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >luajit缺点_luajit和lua区别

luajit缺点_luajit和lua区别

作者头像
全栈程序员站长
发布2022-11-08 17:47:22
8480
发布2022-11-08 17:47:22
举报
文章被收录于专栏:全栈程序员必看

作者:paintsnow 链接:https://www.zhihu.com/question/49144449/answer/123116906 来源:知乎 著作权归作者所有,转载请联系作者获得授权。

其实我是不主张在开发时就用LuaJIT的,因为这样会把人养懒…… 因为JIT的强大性能,掩盖了太多代码中的低效实现,反而最后想要提升性能已经不可能了==

回到正题,我的建议是,如果使用luajit,就全部都使用, 即使在不支持jit的IOS平台上,你也应该使用禁用掉jit功能的LuaJIT,而不是原版lua

如果要将现有代码迁移至LuaJIT,我建议您看一下下面的内容。

LuaJIT和lua的兼容性是有的,而且问题非常之多,在我的DontStarveLuaJIT系列文章中有两篇提到了多处不同: 饥荒游戏扫雷笔记(一)|脚本引擎篇——LuaJIT的救赎(合集) – paintsnow的文章 – 知乎专栏 饥荒游戏扫雷笔记(二) | 脚本引擎篇——偷懒的高温陷阱 – paintsnow的文章 – 知乎专栏

如果不想看原文,我大概总结一下: 1. string HASH策略不一样,导致表的遍历顺序不一样。(你不应该让程序逻辑依赖于表的遍历顺序) 2. 表的[0]索引的实现不一样,LuaJIT会放在array part,而lua则在hash part,导致遍历顺序不一样(使用pairs或者next)。 3. string的转义符处理策略不一样,对于”\abcdef”这样的字符串,lua会把不能形成有效转义序列的字符串拆开,也就是这里的\和a都会出现在最终的字符串里。而LuaJIT会报错,因为没有\a这个转义符。 4. LuaJIT新增加了不少转义符,像\u{1234}来表示unicode字符。 5. LuaJIT新增加了自己的库函数,例如ffi等。使用它们后将不再会保持与原版lua的兼容性。 6. LuaJIT和lua5.2及以后的版本不支持arg这个语法糖来代表{…},因此旧代码迁移到luaJIT会有这样的问题。 7. LuaJIT会有一些限制,比如说一个函数内最多定义的常量个数,函数最多的参数个数之类的。这些上限一般都比lua的上限要小,所以有些过于复杂的代码能在lua中跑但是在LuaJIT中会引起编译错误。有的限制可以调整luaJIT代码中的常量来提高,但是像“函数内最多定义的常量个数”由于指令格式的限制,想到突破需要新增指令,需要对LuaJIT比较熟悉才能做到;否则就像我文章中提到的那样针对某些情况绕过去。(通常会发生在序列化数据表的地方) 8. @唐艺洋 提到的,luaJIT内存上限为4G 9. LuaJIT中使用table.unpack(table.pack(1, 2, 3, nil, 5))将得到1, 2, 3而不是1, 2, 3, nil, 5 10. 想到了再续

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185120.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月6日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档