zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    [sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
    环境迁移 小记
    linux下安装oracle遇到的问题
    正向代理与反向代理
    文件夹与SVN脱离关系
    shell 脚本中$$,$#,$?
    在MySQL中单列索引和联合索引的区别
    Java中Map、HashMap、LinkedHashMap、TreeMap的区别
    Error、Exception与RuntimeException的区别
    设计模式--单例模式
  • 原文地址:https://www.cnblogs.com/Fallever/p/13946534.html
Copyright © 2011-2022 走看看