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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js数组拼接的四种方法[通俗易懂]

    js数组拼接的四种方法[通俗易懂]vara=[1,2,3,4,5,6];varb=["foo","bar","fun"];最终的结果是:[1,2,3,4,5,6,"foo","bar","fun"]方法1:concatc=a.concat(b);c是新数组,此时内存使用有,c,a,b三个数组。方法2:

    2022年6月14日
    40
  • embedding实现_embedded option

    embedding实现_embedded option假设词汇量为100万个时的CBOW模型如下,输入层和输出层存在100万个神经元。下面两个问题导致耗时严重。问题一、输入层的one-hot表示和权重矩阵的乘积。one-hot表示占用内存过多,计算one-hot表示与权重矩阵的乘积,需要花费大量时间。问题二、中间层和权重矩阵的乘积以及Softmax层的计算。需要大量的计算,花费大量时间。解决问题一:计算one-hot表示矩阵和权重矩阵的乘积,其实就是将权重矩阵的某个特定的行取出来。如下图所示。Embedding层

    2025年9月26日
    7
  • git从远程分支拉取代码_git更新分支下的代码

    git从远程分支拉取代码_git更新分支下的代码查看远程所有分支$gitbranch-a创建分支gitbranch[branchname]需要注意,创建分支时,不会有什么提示。新建分支并切换到指定分支gitcheckout-bmasterorigin/mastergitcheckout-b本地分支名origin/远程分支名拉取远程分支代码gitpullorigin/master使用上面的命令可以创建分支名并且关联到远程的分支,但是远程分支存在gitpush多次,发现关联分支的本地代码不是最新的,

    2026年2月6日
    2
  • phpstorm2021.3.2激活(在线激活)3月最新在线激活[通俗易懂]

    phpstorm2021.3.2激活(在线激活)3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    57
  • st7789 旋转_玩转 ESP32 + Arduino(二十八) TFT_eSPI库驱动ST7789

    我们用到的库TFT_eSPI一.硬件接线这里我们使用了中景园的ST7789一般屏幕的引脚定义如下:接线:我们直接用VSPI接线ESP32引脚ST7789引脚功能GNDGND接地3V3VCC电源(VCLK)18SCLSPI时钟线(VMOSI)23SDASPI主出从入线26RES复位引脚27DC数据/命令选择线(VCS0)5CSSPI片选线没接BLK背光控制线如何在TFT_eSPI中设置引脚??…

    2022年4月9日
    1.1K
  • keil_lic.exe注册机使用

    keil_lic.exe注册机使用第一步:以管理员身份运行keil5第二步:打开File中的LicenseManagement第三步:复制CID第四步:选择对应的Target为ARM,粘贴CID,复制生成的注册码第五步:将注册码粘贴到这,就ok了百度云网盘:链接:https://pan.baidu.com/s/1OqQmbpIQvqtHv2TFAp7a_Q提取码:l3v6希望能帮到各位朋友…

    2022年6月10日
    264

发表回复

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

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