XNUMX年間の開発を経て
メイン
- 実験的な
サポート パターンマッチング (パターンマッチング ) 指定されたオブジェクトを反復処理し、パターン一致がある場合に値を割り当てます。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
end - 対話型計算 irb (REPL、Read-Eval-Print-Loop) のシェルに、readline 互換ライブラリを使用して実装された複数行編集の可能性が追加されました。
書き直す ルビで書かれています。 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}) # OK
def foo(**kw); 終わり; foo(**{key: 42}) # OKdef foo(h, **kw); 終わり; foo(キー: 42) #警告
def foo(h, キー: 42); 終わり; foo(キー: 42) #警告
def foo(h, **kw); 終わり; foo({key: 42}) # OK
def foo(h, キー: 42); 終わり; foo({key: 42}) # OKdef 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) # OKdef foo(opt={}); 終わり; foo( key: 42 ) # OK
def foo(h, **nil); 終わり; foo(key: 1) #ArgumentError
def foo(h, **nil); 終わり; foo(**{key: 1}) # ArgumentError
def foo(h, **nil); 終わり; foo("str" => 1) # ArgumentError
def foo(h, **nil); 終わり; foo({key: 1}) # OK
def foo(h, **nil); 終わり; foo({"str" => 1}) # OKh = {}; 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 } # like [1, 2, 3].each { |i| 私を置きます }
- 初期値のない範囲の実験的なサポート。
ary[..3] # ary[0..3] rel.where(sales: ..100) に類似
- 各要素の出現回数をカウントする Enumerable#tally メソッドが追加されました。
["a", "b", "c", "b"].tally
#=> {"a"=>1、"b"=>2、"c"=>1} - 「self」リテラルを使用したプライベート メソッド呼び出しが許可される
デフフー
end
プライベート:foo
self.foo - 遅延 (Enumerator::Lazy) 列挙から通常の列挙を生成する Enumerator::Lazy#eager メソッドを追加しました。
a = %w(フーバーバズ)
e = a.lazy.map {|x| x.upcase }.map {|x| ×+「!」 }。熱心な
p e.class #=> 列挙子
e.map {|x| ×+「?」 } #=> [“FOO!?”、“BAR!?”、“BAZ!?”] - Ruby 言語でのアプリケーションのパフォーマンスを大幅に向上させることができる実験的な JIT コンパイラーの開発が続けられています。 Ruby で提案されている JIT コンパイラは、まず C コードをディスクに書き込み、その後外部 C コンパイラを呼び出して機械語命令を生成します (GCC、Clang、および Microsoft VC ++ がサポートされています)。 新しいバージョンでは、必要に応じてインライン デプロイメント、コンパイル中の最適化モードの選択的適用、「--jit-min-calls」のデフォルト値が 5 から 10000 に増加、および「--jit-max-cache」のメソッドが実装されています。 1000から100まで。
- CGI.escapeHTML、Monitor、MonitorMixin のパフォーマンスが向上しました。
- Module#name、true.to_s、false.to_s、および nil.to_s は、指定されたオブジェクトに対して変更されていない文字列が返されることを保証します。
- RubyVM::structSequence#to_binary メソッドによって生成されるバイナリ ファイルのサイズが削減されました。
- 組み込みコンポーネントの更新バージョンを含む
バンドラー 2.1.2、RubyGems 3.1.2、
RACC 1.4.15、
CSV 3.1.2、REXML 3.2.3、
RSS0.2.8、
文字列スキャナー 1.0.3; - ライブラリは基本パッケージから外部 gem パッケージに移動されました
CMath (cmath gem)、
Scanf (スキャンフジェム)、
シェル(貝殻宝石)、
シンクロナイザー (同期ジェム)、
ThreadsWait (thwait gem)、
E2MM (e2mmap gem)。 - デフォルトの stdlib モジュールは、rubygems.org で公開されています。
基準、
cgi、
代表者、
ゲットトップロング、
ネットポップ、
ネットSMTP、
オープン3、
ストア、
シングルトン。 モニターモジュールがrubygems.orgに移動されない
観察者、
タイムアウト、
トレーサー、
嫌い、
yaml は、ruby-core にのみ同梱されます。 - Ruby をビルドするには、C99 標準をサポートする C コンパイラが必要になりました。
出所: オープンネット.ru