經過一年的發展
主要的
- 實驗性的
支持 模式匹配 (模式匹配 ),它允許您迭代給定對象並在與模式匹配時分配一個值。case [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
PB #=> 1
pc #=> [2, 3] 結束情況 {a: 0, b: 1}
在{a:0,x:1}中
:不可用
在 {a: 0, b: var} 中
p var #=> 1
結束 - 交互式計算 irb(REPL、Read-Eval-Print-Loop)的 shell 現在具有多行編輯功能,使用 readline 兼容庫實現
換線 ,用 Ruby 編寫。 集成了 rdoc 支持,允許您查看 irb 中指定類、模塊和方法的參考信息。 提供通過 Binding#irb 顯示的代碼行的顏色突出顯示以及基類對象的檢查結果。 - 新增緊湊型垃圾收集器(Compaction GC),可以對某個區域的內存進行碎片整理,解決了一些多線程Ruby應用程序中出現的內存碎片導致的性能和內存消耗問題。 將對像打包到堆上
建議 GC.compact方法,可以減少使用的內存頁數並優化操作堆
CoW(寫時復制)。 -
實施 準備根據列表位置(“def foo(a,b,c)”)和關鍵字(“def foo(key: val)”)分隔參數。 基於關鍵字和位置的自動參數轉換已被棄用,並且在 Ruby 3.0 分支中將不再受支持。 具體來說,它已棄用使用最後一個參數作為關鍵字參數,將基於關鍵字的參數作為最後一個哈希參數傳遞,並將最後一個參數拆分為位置參數和關鍵字參數。def foo(鍵: 42); 結尾; foo({key: 42}) # 警告
def foo(**kw); 結尾; foo({key: 42}) # 警告
def foo(鍵: 42); 結尾; foo(**{key: 42}) # 好的
def foo(**kw); 結尾; foo(**{key: 42}) # 好的def foo(h, **kw); 結尾; foo(鍵: 42) #警告
def foo(h, 鍵: 42); 結尾; foo(key: 42) # 警告
def foo(h, **kw); 結尾; foo({key: 42}) # 好的
def foo(h, 鍵: 42); 結尾; foo({key: 42}) # 好的def foo(h={}, 鍵: 42); 結尾; foo("key" => 43, key: 42) #warned
def foo(h={}, 鍵: 42); 結尾; foo({"key" => 43, key: 42}) # 警告
def foo(h={}, 鍵: 42); 結尾; foo({"key" => 43}, key: 42) # 好的def foo(opt={}); 結尾; foo( key: 42 ) # 好
def foo(h, **nil); 結尾; foo(key: 1) # 參數錯誤
def foo(h, **nil); 結尾; foo(**{key: 1}) # 參數錯誤
def foo(h, **nil); 結尾; foo("str" => 1) # 參數錯誤
def foo(h, **nil); 結尾; foo({key: 1}) # 好的
def foo(h, **nil); 結尾; foo({"str" => 1}) # 好的h = {}; def foo(*a) 結束; foo(**h) # [] h = {}; def foo(a) 結束; foo(**h) # {} 和警告
h = {}; def foo(*a) 結束; foo(h) # [{}] h = {}; def foo(a) 結束; foo(h) # {} -
機會 默認情況下,塊參數使用編號變量名稱。[1, 2, 3].each { put @1 } # 就像 [1, 2, 3].each { |i| 放我 }
- 對沒有初始值的範圍的實驗支持。
ary[..3] # 與 ary[0..3] 相同 rel.where(銷售額: ..100)
- 新增 Enumerable#tally 方法,統計每個元素出現的次數。
[“a”,“b”,“c”,“b”].tally
#=> {“a”=>1,“b”=>2,“c”=>1} - 允許使用“self”文字調用私有方法
定義 foo
結束
私人:foo
self.foo - 添加了 Enumerator::Lazy#eager 方法以從惰性枚舉器 (Enumerator::Lazy) 生成常規枚舉。
a = %w(foo bar baz)
e = a.lazy.map {|x| x.upcase }.map {|x| x+“!” }。渴望的
p e.class #=> 枚舉器
p e.map {|x| x + “?” } #=> [“FOO!?”,“BAR!?”,“BAZ!?”] - 實驗性 JIT 編譯器的開發仍在繼續,它可以顯著提高 Ruby 語言應用程序的性能。 Ruby 的 JIT 編譯器首先將 C 代碼寫入磁盤,然後調用外部 C 編譯器生成機器指令(支持調用 GCC、Clang 和 Microsoft VC++)。 新版本實現了必要時內聯部署的方法,保證編譯時選擇性應用優化模式,“--jit-min-calls”默認值從5增加到10000,“--jit-max-”緩存”從1000到100 。
- 改進了 CGI.escapeHTML、Monitor 和 MonitorMixin 的性能。
- Module#name、true.to_s、false.to_s 和 nil.to_s 確保返回的字符串對於指定對象來說是未更改的。
- RubyVM::InstructionSequence#to_binary 方法生成的二進製文件的大小已減小;
- 內置組件的更新版本,包括
捆綁器 2.1.2、RubyGems 3.1.2、
拉克 1.4.15,
CSV 3.1.2、REXML 3.2.3、
RSS 0.2.8,
字符串掃描儀 1.0.3; - 庫從基礎發行版轉移到外部 gem 包
CMath(cmath gem),
Scanf(掃描寶石),
貝殼(貝殼寶石)
同步器(同步寶石),
ThreadsWait(思考寶石),
E2MM(e2mmap 寶石)。 - 默認的 stdlib 模塊發佈在 rubygems.org 上:
基準,
計算機圖形圖像處理,
代表
獲取選擇長,
網絡流行音樂,
網絡SMTP
打開3,
存儲庫,
單例。 監視器模塊未移至 rubygems.org
觀察者
暫停
示踪劑
烏里,
yaml,僅隨 ruby-core 提供。 - 現在構建 Ruby 需要支持 C99 標準的 C 編譯器。
來源: opennet.ru