Lua 5.4引入的新变动

Lua 5.4引入的新变动


  • 新的分代模式垃圾回收 (new generational mode for garbage collection)

在分代模式下,收集器频繁进行次要收集,仅遍历最近创建的对象。如果在次要收集之后对内存的使用仍然超出限制,则收集器将进行一次世界停止的主要收集,该遍历将遍历所有对象。分代模式使用两个参数:次要乘数和主要乘数。
次要乘数控制次要收集的频率。对于次要乘数x,当内存增长到前一个主要集合之后使用的内存大x%时,将进行新的次要集合。例如,对于20的乘数,当内存使用量比上一个主要收集之后的使用量大20%时,收集器将进行次要收集。默认值为20;默认值为20。最大值为200。
主乘数控制主集合的频率。对于主乘数x,当内存增长到前一个主集合之后使用的内存大x%时,将进行新的主集合。例如,对于100的乘数,当内存使用量大于上一次收集之后的两倍时,收集器将进行主收集。预设值为100;最大值为1000。

分代模式垃圾回收对以Lua为主的项目是有好处的,分代的机制能减少对不需要回收对象的遍历,提升垃圾回收的速度.
  • to-be-closed特性 (to-be-closed variables)

    Lua引入了新的语法——特性,我觉得这在Lua的变动中是最新鲜的部分,特性可以让对象具有更加特别的行为,期待Lua后续的更新中带来更多的特性.
    to-be-closed特性是让lua的对象具有终结器一样的功能,当变量超出访问范围后即会触发其__close元方法.

        do 
            local  obj<close> = xxxx 
        end
        -- 当 obj 不可访问时就会调用其 __close 原方法
    

    云风关于to-be-closed特性的介绍

  • 局部常量 (const variables)

    const特性使变量在声明后不可以再次改变其值.对Lua这样的语言,引入这个特性感觉只是性能上的考虑.
    const特性变量是编译器变量

          VCONST,  /* compile-time <const> variable;
              info = absolute index in 'actvar.arr'  */
    
    
        do 
            local my_value<const> = xxxx
            -- 其后无法再对my_value 赋值
        end
    
  • userdata可以有多个user values(userdata can have multiple user values)

    对于只用Lua写逻辑的人,不太清楚这个变动的影响

  • math.random新的实现 (new implementation for math.random)

    Lua现在基于[xoshiro256]算法实现快速的伪随机数生成(https://en.wikipedia.org/wiki/Xorshift#xoshiro256)
    更加可靠的随机算法,对游戏有好处,之前Lua虚拟机每次重启后随机出来的值都是一样的

    Lua 5.3的随机:

    Lua5.3的随机

    现在Lua 5.4 每次随出来的就是不一样的

  • 警告系统 (warning system)

    通过warn(msg1,...)发出一条警告信息,按照惯例,以 @开头的单条消息旨在作为控制消息,它是警告系统本身的消息.特别地,标准的Lua warning 函数,
    特别是,Lua中的标准警告功能会识别控制消息“ @off”,以停止发出警告,并识别“ @on”,以(重新)开始发出警告;它忽略未知的控制消息。

    > warn("@on") 
    > warn("2020年只剩下40天啦!时间: ",os.date() )         
    Lua warning: 2020年只剩下40天啦!时间: 11/08/20 23:29:34
    > warn("@off") 
    > 
    
  • 关于函数参数和返回值的Debug信息(debug information about function arguments and returns)

    (略)

  • 整数“for”循环的新语义 (new semantics for the integer 'for' loop)

    (没看到这个啥意思)

  • string.gmatch 新增了一个可选的init参数 (optional 'init' argument to 'string.gmatch')

  • close特性引入的新函数 (new functions 'lua_resetthread' and 'coroutine.close')

  • 字符串到数字的强制转换转移到字符串库中(string-to-number coercions moved to the string library)

  • 缩小内存块时分配功能失败(allocation function allowed to fail when shrinking a memory block)

  • string.format的新格式(new format '%p' in 'string.format')

  • utf8库最多接受代码点到2^21(utf8 library accepts codepoints up to 2^31)

原文地址:https://www.cnblogs.com/Fallever/p/13946534.html