六年來,Ruby一直遵循每年圣誕節期間新發布一個主版本的傳統。去年12月25日,Ruby 2.5.0發布。
Ruby 2.5.0主要是給出了多個性能相關的改進,其中最顯著的改進是從字節碼中移除了所有追蹤指令,這使性能上提高了5%到10%。最初,添加追蹤指令是為了支持TracePoint。但是在很多情況下,TracePoint并未使用,只是增添了開銷?,F在,Ruby轉而支持動態指令技術(dynamic instrumentation)。其它一些性能相關的改進包括:以參數形式傳遞代碼塊(Block)的性能提高了三倍,從模板生成ERB代碼的性能提高了兩倍。一些Ruby內建函數的性能也得到了改進,其中包括Array#concat、String#concat和Enumerable#sort_by等,以及用于多線程的Mutex類。
除了一些性能上的改進,現在Struct.new支持創建接受關鍵詞參數的類,do/end代碼塊可以直接與ensure/rescue/else控制流一并使用。
在對軟件庫的支持上,Ruby 2.5.0將一些標準軟件庫提升到缺省軟件包(Gems)中,其中包括了cmath、csv、date、dbm、etc、fcntl、fiddle、fileutils、gdbm、ipaddr、scanf、sdbm、stringio、strscan、webrick、zlib等。同時,2.5.0內建了廣為使用的pp命令,在程序中不再需要明確指明require pp,這是Ruby程序中最常出現的一行命令。
Ruby開發人員現在可以選擇逆序輸出堆棧跟蹤(Stacktrace)信息。這樣,堆棧跟蹤中的重大錯誤消息顯示在前面,而非最后顯示。但是該特性是實驗性的,可能會在隨后的版本中移除。
Ruby 2.5.0還支持分支和方法覆蓋度量,可以在代碼執行期間對不同的方法和分支調用做更好的性能測試。
Ruby 2.5.0完全禁用了頂層常量查找(Constant Lookup),會給出一個警告,而非錯誤。新版本中添加了yield self,用于在自身的上下文中回調一個指定的代碼塊(譯者注:語法糖)。不同于也是返回一個代碼塊的tap命令,該語法在對象鏈(Chaining)中十分有用。
Ruby 2.5.0可在官方網站下載。
查看英文原文: Ruby 2.5.0 Overview