luajit缺点_luajit和lua区别

luajit缺点_luajit和lua区别作者:paintsnow链接:https://www.zhihu.com/question/49144449/answer/123116906来源:知乎著作权归作者所有,转载请联系作者获得授权。其实我是不主张在开发时就用LuaJIT的,因为这样会把人养懒……因为JIT的强大性能,掩盖了太多代码中的低效实现,反而最后想要提升性能已经不可能了==回到正题,我的建议是,如果

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

作者: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.net/185120.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月6日 下午11:36
下一篇 2022年10月6日 下午11:36


相关推荐

  • scikit-learn : LARS[通俗易懂]

    scikit-learn : LARS[通俗易懂]LARS正则化斯坦福大学的BradleyEfron,TrevorHastie,IainJohnstone和RobertTibshirani发现了LARS(LeastAngleRegression,最小角回归)它借用了威廉·吉尔伯特·斯特朗(WilliamGilbertStrang)介绍过的高斯消元法(Gaussianelimination)的灵感。背景LARS是一种回归手段,适

    2022年6月24日
    33
  • 达梦数据库备份实操「建议收藏」

    达梦数据库备份实操「建议收藏」达梦数据库备份方式:物理备份,逻辑备份物理备份 冷备:(dmap服务打开的状态下,数据库是关闭的) 热备:(dmap服务一定是打开的,数据库是打开的,数据库要开归档) 逻辑备份 导入导出:dexpdimp 集群:数据守护(dw),DSC(RAC) 达梦支持第三方的备份工具:如第三方备份一体机备份首先要开归档 SQL>alterdatabasemount;#mo…

    2022年5月14日
    42
  • 智谱AI董事长刘德兵简介|刘德兵擅长领域|刘德兵演讲主题|刘德兵最新动态

    智谱AI董事长刘德兵简介|刘德兵擅长领域|刘德兵演讲主题|刘德兵最新动态

    2026年3月12日
    3
  • vmware虚拟机怎么设置上网「建议收藏」

    vmware虚拟机怎么设置上网「建议收藏」点击物理主机2-右键点击属性找到ipv43 在设置vmware虚拟机 4-在使用命令ifconfig 查看虚拟机的ip里面含有 inetaddrip 就是现在虚拟机的IP地址5-在使用XShell 链接该ip地址 就可以链接的…

    2022年5月19日
    43
  • 免费拿走Vivado2017.4安装包及其license(附带安装教程)

    免费拿走Vivado2017.4安装包及其license(附带安装教程)免费拿走Vivado2017.4安装包及其license(附带安装教程)安装包下载地址:添加链接描述license:在文尾。。。安装教程:1.双击安装包文件夹中的xsetup文件2.运行安装:点击next。。3.三个IAgree都选上。。4.选择第二个,包含VIVADO设计的所有部件。。5.选择功能,一般选默认就好。。6.选择安装路径,保证容量足够即可,路径名不要出现非法字符。。7.点击Install,开始安装。。8.开始后,等几分钟,中间会跳出一两个安装确认,都点

    2022年7月26日
    96
  • foreach遍历list删除元素一定会报错?

    list集合平常自以为用的非常熟了,原来只是用add()方法熟练而已,碰到remove一报错就彻底暴露了自己的短板啦。来,给list集合删除某些元素,先上一段代码:   1)报错啦   Listlist=newArrayList();list.add(“1”);list.add(“2”);list.add(“3”)

    2022年4月6日
    98

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号