ルビー2.7.0安定したリリース:パターンマッチングの導入、小型GC、REPLを改善

Rubyの2.7.0の安定版のクリスマスの日にリリースされ、このリリースの多くの新機能とパフォーマンスの向上を導入し、最も注目すべきは次のとおりです。

  • パターンマッチング(パターンマッチング)
  • REPLの改善
  • コンパクトGC(コンパクションGC)
  • 位置パラメータとキーワード引数の分離

パターンマッチング(実験)

パターンマッチングは、一致パターン場合は、指定されたオブジェクトを横断し、その値を割り当てることができ、実験段階ではまだ広く使用されている関数型プログラミング言語の特性である  [機能#14912]

require "json"

json = <<END
{
  "name": "Alice",
  "age": 30,
  "children": [{ "name": "Bob", "age": 2 }]
}
END

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age #=> 2
end

この機能の具体的な詳細は、以下を参照してください  パターンマッチングを-フィーチャー新規のRuby 2.7に

REPLの改善

今結合IRBインタラクティブな環境では、純粋なRubyの実装と裏装材readlineの互換性裏装材でサポートされている複数行の編集を、サポートしています。また、RDOCの統合を提供します。IRBでは、参照は、特定のクラスまたはモジュールメソッドに表示することができます。さらに、ソース線、およびコアクラスbinding.irbオブジェクトの試験結果は、現在色分けで表示されて表示されます。

コンパクトGC(コンパクションGC)

コンパクトGCは、断片化されたメモリ空間を最適化することができます。Rubyは、プログラムが高いメモリ使用量及びスローダウンし、その結果、メモリの断片化につながる可能性がありマルチスレッド。あなたが少数のページを使用することができますし、ヒープ牛に、より親しみやすいかもしれので、ヒープ、ヒープ内のこの圧縮機能アクティブなオブジェクトを圧縮するGC.compactの方法を導入しました。

位置パラメータとキーワード引数の分離

自動変換パラメータ及び位置パラメータキーワードが(非推奨)廃止とマークされ、自動変換3は、Rubyに除去されます。[機能#14183]

  • 最後の引数としてハッシュ法を渡す、または引数には、キーワードを渡されていない場合は、警告がスローされます。キーワードのパラメータとして扱われることを継続する必要がある場合は、警告を回避し、ルビー3に適切な動作を確保するために2つのアスタリスクを追加する必要があります。
  def foo(key: 42); end; foo({key: 42})   # warned
  def foo(**kw);    end; foo({key: 42})   # warned
  def foo(key: 42); end; foo(**{key: 42}) # OK
  def foo(**kw);    end; foo(**{key: 42}) # OK
  • ハッシュ法を渡すと、メソッドにキーワード引数を受け入れますが、十分な位置パラメータを提供していない場合は、キーワードのパラメータが最後のパラメータの位置とみなされ、警告がスローされます。適切な動作を保証するために、ルビー3に警告し、ハッシュオブジェクトを回避するために、パッケージのパラメータを設定します。
  def foo(h, **kw); end; foo(key: 42)      # warned
  def foo(h, key: 42); end; foo(key: 42)   # warned
  def foo(h, **kw); end; foo({key: 42})    # OK
  def foo(h, key: 42); end; foo({key: 42}) # OK
  • この方法は、渡されたキーワードのパラメーターを受け入れますが、キーワード部門(スプラット)がないと、求心性および非記号記号のキーの両方が含まれている場合、そのハッシュが分割されますが、警告がスローされます。あなたはルビー3の通常動作することを確認するために呼び出すときは、2つの別々のハッシュを渡す必要があります。
  def foo(h={}, key: 42); end; foo("key" => 43, key: 42)   # warned
  def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
  def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
  • キーワードは、キーワードは、位置パラメータとして扱われたときにキーワードが方法が、着信コールを受け入れない場合は、警告がスローされていないが存在します。この動作は、Ruby 3で作業していきます。
  def foo(opt={});  end; foo( key: 42 )   # OK
  • メソッドのサポート任意のパラメータが渡された場合は、非記号もキーワード引数として許可されます。[機能#14183]
  def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
  • **nil キーワードのパラメーターを受け入れない標識法のためのメソッド定義に使用を許可されています。キーワード例外ArgumentErrorがスローされますこれらのメソッドを呼び出すためのパラメータを  [機能#14183]
  def foo(h, **nil); end; foo(key: 1)       # ArgumentError
  def foo(h, **nil); end; foo(**{key: 1})   # ArgumentError
  def foo(h, **nil); end; foo("str" => 1)   # ArgumentError
  def foo(h, **nil); end; foo({key: 1})     # OK
  def foo(h, **nil); end; foo({"str" => 1}) # OK
  • 方法は、キーワードセグメンテーション(スプラット)は、キーワードを着信受け入れていない空の空のハッシュとして扱われることを継続しません、ハッシュパラメータとして必要でない限り、空であり、このような状況は警告をスローします。位置パラメータとして渡されたハッシュへの二重のアスタリスクを削除します。[機能#14183]
  h = {}; def foo(*a) a end; foo(**h) # []
  h = {}; def foo(a) a end; foo(**h)  # {} and warning
  h = {}; def foo(*a) a end; foo(h)   # [{}]
  h = {}; def foo(a) a end; foo(h)    # {}

あなたは「非推奨の警告警告(非推奨の警告)」を無効にしたい場合は、コマンドラインパラメータを使用する-W:no-deprecatedか、追加しWarning[:deprecated] = falseたコードに。

その他の注目すべき新機能

  • 基準オペレータの方法、.:実験的な機能が追加されます。機能#12125#13581を備えています

  • 実験的にデフォルトのパラメータブロックパラメータの特性として番号を追加しました。機能#4475

  • ヘッドレスの範囲を実験的に追加しました。それはあまり便利の無限の範囲を持っていないかもしれませんが、それは、DSLの開発のために非常に有用であるが。機能#14799

  ary[..3]  # identical to ary[0..3]
  rel.where(sales: ..100)
  • 追加されました  Enumerable#tally、それは各要素が出現する回数を計算します。
  ["a", "b", "c", "b"].tally
  #=> {"a"=>1, "b"=>2, "c"=>1}
  def foo
  end
  private :foo
  self.foo
  • 新しいです  Enumerator::Lazy#eagerこれは、非怠惰なイテレータを生成します。[機能#15901]
  a = %w(foo bar baz)
  e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
  p e.class               #=> Enumerator
  p e.map {|x| x + "?" }  #=> ["FOO!?", "BAR!?", "BAZ!?"]

パフォーマンスの改善

  • JIT [実験]

    • 最適化仮説が失敗した場合に、JITコードが最適化コードの低い程度に再コンパイルされてもよいです。

    • 方法(メソッド)は(純粋な)純粋に機能的であると考えられる場合には、この方法を用いて最適化されます。この最適化方法はまだ実験的な、多くの方法は、純粋に機能的であるとは考えられないです。

    • --jit-min-calls デフォルトは5〜10,000に調整しました。

    • --jit-max-cache デフォルトは000から100に調整しました。

  • #To_sシンボルモジュール#名true.to_s false.to_s  和 nil.to_s`今常にフリーズ(凍結された)文字列を返します。返される文字列は常に等しいと指定されたオブジェクトです。[実験]  [機能#16150]

  • CGI.escapeHTML パフォーマンスが促進されました。GH-2226

バージョン2.6のその他の重要な変更以来

  • いくつかの標準ライブラリが更新されました
    • バンドラー2.1.0.pre.1
    • RubyGemsの3.1.0.pre.1
    • CSV 3.1.2(NEWS
    • コル1.4.15
    • REXML 3.2.3(NEWS
    • RSS 0.2.8(NEWS
    • StringScanner 1.0.3
    • ライブラリーのオリジナルバージョンのないいくつかの他にも更新されています。
  • 今、ブロック方法があれば、呼び出し、  Proc.new および  proc 警告ブロックを生成しません。

  • lambda 場合は、メソッド呼び出しブロックがない場合はブロックエラーが発生します。

  • 11.0.0から12.0.0へのアップデートの絵文字とUnicodeバージョン。[機能#15321]

  • バージョン12.1.0へのUnicodeのアップデート、新しい解決のためのサポートを追加「とするために」U + 32FFの。[機能#15195]

  • Date.jisx0301Date#jisx0301 そして  Date.parse 新JIS X 0301のリリースまで、日本の非公式の拡張機能として、新たな統治のためのサポートを示します。[機能#15742]

  • C99サポートするコンパイラのニーズ  [その他#15347]  :方言の使用について*具体的な情報を参照してくださいhttps://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99

参照  NEWSの  か、  ログを提出  ビューの詳細に。

ダウンロード

  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.bz2

    SIZE: 14703381
    SHA1: b54f4633174dbc55db77d9fd6d0ef90cc35503af
    SHA256: 7aa247a19622a803bdd29fdb28108de9798abe841254fe8ea82c31d125c6ab26
    SHA512: 8b8dd0ceba65bdde53b7c59e6a84bc6bf634c676bfeb2ff0b3604c362c663b465397f31ff6c936441b3daabb78fb7a619be5569480c95f113dd0453488761ce7
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz

    SIZE: 16799684
    SHA1: 6f4e99b5556010cb27e236873cb8c09eb8317cd5
    SHA256: 8c99aa93b5e2f1bc8437d1bbbefd27b13e7694025331f77245d0c068ef1f8cbe
    SHA512: 973fc29b7c19e96c5299817d00fbdd6176319468abfca61c12b5e177b0fb0d31174a5a5525985122a7a356091a709f41b332454094940362322d1f42b77c9927
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.xz

    SIZE: 11990900
    SHA1: 943c767cec037529b8e2d3cc14fc880cad5bad8d
    SHA256: 27d350a52a02b53034ca0794efe518667d558f152656c2baaf08f3d0c8b02343
    SHA512: dd5690c631bf3a2b76cdc06902bcd76a89713a045e136debab9b8a81ff8c433bbb254aa09e4014ca1cf85a69ff4bcb13de11da5e40c224e7268be43ef2194af7
  • https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.zip

    SIZE: 20571744
    SHA1: fbebdd3a2a641f9a81f7d8db5abd926acea27e80
    SHA256: 8bf2050fa1fc76882f878fd526e4184dc54bd402e385efa80ef5fd3b810522e0
    SHA512: 5060f2dd3bfd271ef255b17589d6d014260d7ec2d97b48112b717ee01c62fe125c3fe04f813e02d607cea3f0a2a812b14eb3a28d06c2551354dfeff5f4c3dd6b

それをプログラミングRubyの2.7を使用してお楽しみください!

おすすめ

転載: www.oschina.net/news/112338/ruby-2-7-0-released