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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM