Ruby プログラミング言語 2.7.0 のリリース

XNUMX年間の開発を経て 公開済み 解放する ルビー2.7.0は、プログラム開発の効率が高く、Perl、Java、Python、Smalltalk、Eiffel、Ada、Lisp の優れた機能を組み込んだ動的オブジェクト指向プログラミング言語です。 プロジェクト コードは、BSD (「2 条項 BSDL」) および「Ruby」ライセンスに基づいて配布されます。これは、GPL ライセンスの最新バージョンを指し、GPLv3 と完全な互換性があります。 Ruby 2.7 は、計画された開発プロセスの一環として作成される 2 番目のメジャー リリースであり、機能強化に 3 年間の時間を確保し、XNUMX ~ 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 を介して表示されるコードを含む行と、基本クラス オブジェクトの検査結果が色付きで強調表示されます。

    Ruby プログラミング言語 2.7.0 のリリース

  • メモリ領域をデフラグできるコンパクト ガベージ コレクタ (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}) # OK

    def 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}) # OK

    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) # OK

    def 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}) # OK

    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 } # 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

コメントを追加します