なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2016/02/19)

2016/02/19分のコミットです。

CHANGELOGへの追加はありませんでした。


remove object hash cache

actionview/lib/action_view/lookup_context.rbの修正です。

DetailsKeyクラスからobject hashのcacheを削除しています。

     class DetailsKey #:nodoc:
        alias :eql? :equal?
 -      alias :object_hash :hash

 -      attr_reader :hash
        @details_keys = Concurrent::Map.new

        def self.get(details)
 @@ -71,10 +69,6 @@ def self.get(details)
        def self.clear
          @details_keys.clear
        end
 -
 -      def initialize
 -        @hash = object_hash
 -      end
      end

cacheしていても性能向上には繋がらない為、との事です。

コメントに記載されていたベンチマークは以下の通り。

require 'benchmark/ips'

class Foo
  alias :object_hash :hash
  attr_reader :hash
  def initialize
    @hash = object_hash
  end
end

class Bar
end

hash = {}
foo = Foo.new
bar = Bar.new
Benchmark.ips do |x|
  x.report("foo") { hash[foo] }
  x.report("bar") { hash[bar] }

  x.report("foo.hash") { foo.hash }
  x.report("bar.hash") { bar.hash }
end

__END__
[aaron@TC ruby (trunk)]$ ruby test.rb
Warming up --------------------------------------
                 foo   118.361k i/100ms
                 bar   118.637k i/100ms
Calculating -------------------------------------
                 foo      7.944M (± 3.1%) i/s -     39.769M
                 bar      7.931M (± 3.4%) i/s -     39.625M
[aaron@TC ruby (trunk)]$ ruby test.rb
Warming up --------------------------------------
                 foo   122.180k i/100ms
                 bar   120.492k i/100ms
            foo.hash   123.397k i/100ms
            bar.hash   119.312k i/100ms
Calculating -------------------------------------
                 foo      8.002M (± 4.2%) i/s -     39.953M
                 bar      8.037M (± 4.5%) i/s -     40.124M
            foo.hash      8.819M (± 3.9%) i/s -     44.053M
            bar.hash      7.856M (± 4.1%) i/s -     39.254M

move digest cache on to the DetailsKey object

actionview/lib/action_view/digestor.rbactionview/lib/action_view/lookup_context.rbの修正です。

ActionView::Digestorクラスで保持していた digest cacheをActionView::LookupContext::DetailsKeyクラスで保持するよう修正しています。

元々はActionView::Digestorクラスのクラス変数で保持していたのですが、その際DetailsKeyクラスのobjectのhash値をkeyとして利用していました。 ただ、objectのhash値はユニークではなく、keyが衝突した場合に解決する方法がありませんでした。

で、これをdigest cacheの値をActionView::LookupContext::DetailsKey自身で保持するようにし、確実にユニークになるよう対応したとの事です。


Remove github gems from the master bug report templates

bug report templatesの修正です。

Gemfileで、arelrack等のgemの指定にgithubのmasterブランチを使用していたのを、リリース済みのgemを使用するよう修正しています。


Fix master build

actionpack/test/controller/render_test.rbの修正です。

move digest cache on to the DetailsKey objectでクラス名の変更があったのですが、修正が漏れている箇所があったのを修正しています。


Use a semaphore to signal message availability

actioncable/test/client_test.rbの修正です。

messageを取得済みかどうか管理する変数にConcurrent::Eventを使用していたのをConcurrent::Semaphoreを使用するよう修正しています。

競合状態の管理の為にはそちらの方が楽なため、のようです。


partial pass over the API guide [ci skip]

rails guideのUsing Rails for API-only Applicationsの修正です。

guide全体の言い回し、グラマーの修正等をまとめて行っています。


Merge pull request #23525 from kamipo/remove_unused_require

activerecord/lib/active_record/connection_adapters/abstract_adapter.rbの修正です。

使用していないactive_support/core_ext/benchmarkのrequireを削除しています。


remove needless debug_exception_response_format config [ci skip]

rails guideのUsing Rails for API-only Applicationsの修正です。

設定する必要が無いdebug_exception_response_formatについての説明を削除しています。

config.api_onlytrueを設定した場合に、内部で自動的でdebug_exception_response_formatapiが設定され、明示的にconfigに指定する必要は無い為。


better docs for ActiveSupport::TestCase#assert_nothing_raised

activesupport/lib/active_support/test_case.rbのdocの修正です。

assert_nothing_raisedメソッドのdocのメソッドについての説明をよりわかりやすい内容に修正しています。


Dependencies clean up

activesupport/lib/active_support/dependencies.rbactivesupport/test/dependencies_test.rbの修正です。

ActiveSupport::Dependencies::WatchStack#new_constantsメソッド内のdocで、説明している変数名に誤りがあったのを修正、不要なnamespaceの指定を削除、不要なテストを削除等をまとめて行っています。