summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-07-31Update object.cAaron Patterson
Co-Authored-By: Takashi Kokubun <takashikkbn@gmail.com>
2019-08-01* expand tabs.git
2019-07-31Add a specialized instruction for `.nil?` callsAaron Patterson
This commit adds a specialized instruction for called to `.nil?`. It is about 27% faster than master in the case where the object is nil or not nil. In the case where an object implements `nil?`, I think it may be slightly slower. Here is a benchmark: ```ruby require "benchmark/ips" class Niller def nil?; true; end end not_nil = Object.new xnil = nil niller = Niller.new Benchmark.ips do |x| x.report("nil?") { xnil.nil? } x.report("not nil") { not_nil.nil? } x.report("niller") { niller.nil? } end ``` On Ruby master: ``` [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 429.195k i/100ms not nil 437.889k i/100ms niller 437.935k i/100ms Calculating ------------------------------------- nil? 20.166M (± 8.1%) i/s - 100.002M in 5.002794s not nil 20.046M (± 7.6%) i/s - 99.839M in 5.020086s niller 22.467M (± 6.1%) i/s - 112.111M in 5.013817s [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 449.660k i/100ms not nil 433.836k i/100ms niller 443.073k i/100ms Calculating ------------------------------------- nil? 19.997M (± 8.8%) i/s - 99.375M in 5.020458s not nil 20.529M (± 7.0%) i/s - 102.385M in 5.020689s niller 21.796M (± 8.0%) i/s - 108.110M in 5.002300s [aaron@TC ~/g/ruby (master)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 402.119k i/100ms not nil 438.968k i/100ms niller 398.226k i/100ms Calculating ------------------------------------- nil? 20.050M (±12.2%) i/s - 98.519M in 5.008817s not nil 20.614M (± 8.0%) i/s - 102.280M in 5.004531s niller 22.223M (± 8.8%) i/s - 110.309M in 5.013106s ``` On this branch: ``` [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 468.371k i/100ms not nil 456.517k i/100ms niller 454.981k i/100ms Calculating ------------------------------------- nil? 27.849M (± 7.8%) i/s - 138.169M in 5.001730s not nil 26.417M (± 8.7%) i/s - 131.020M in 5.011674s niller 21.561M (± 7.5%) i/s - 107.376M in 5.018113s [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 477.259k i/100ms not nil 428.712k i/100ms niller 446.109k i/100ms Calculating ------------------------------------- nil? 28.071M (± 7.3%) i/s - 139.837M in 5.016590s not nil 25.789M (±12.9%) i/s - 126.470M in 5.011144s niller 20.002M (±12.2%) i/s - 98.144M in 5.001737s [aaron@TC ~/g/ruby (specialized-nilp)]$ ./ruby compil.rb Warming up -------------------------------------- nil? 467.676k i/100ms not nil 445.791k i/100ms niller 415.024k i/100ms Calculating ------------------------------------- nil? 26.907M (± 8.0%) i/s - 133.755M in 5.013915s not nil 25.319M (± 7.9%) i/s - 125.713M in 5.007758s niller 19.569M (±11.8%) i/s - 96.286M in 5.008533s ``` Co-Authored-By: Ashe Connor <kivikakk@github.com>
2019-08-01make inline functions from macros.Koichi Sasada
2019-07-31use hash_ar_table_set() directlyKoichi Sasada
2019-07-31HASH_ASSERT() respects HASH_DEBUGKoichi Sasada
2019-08-01check hash_hint is different.Koichi Sasada
2019-07-31File.realpath can raise ENOTDIRKoichi Sasada
2019-07-31Revert "Let prev EP move"Aaron Patterson
This reverts commit e352445863588b90f7af6cdf6c1b6dc432ee33ab. This is breaking CI and I'm not sure why yet, so I'll revert for now.
2019-08-01* 2019-08-01git
2019-07-31Let prev EP moveAaron Patterson
This commit allows the previos EP pointer to move, then updates its location
2019-07-31run single spec [ci skip]Nobuyoshi Nakada
2019-07-31test/ruby/test_hash.rb: remove a unused vribleYusuke Endoh
to suppress a warning
2019-07-31lib/bundler/shared_helpers.rb: remove require "rubygems"Yusuke Endoh
Because it causes circular require.
2019-07-31Split in two spec examplesBenoit Daloze
2019-07-31Attempt to fix Hash#rehash specBenoit Daloze
2019-07-31Fix `Leaked thread`Kazuhiro NISHIYAMA
Sometimes `Leaked thread: Rinda::TestRingServer#test_ring_server_ipv6_multicast` happens because `Rinda::TupleSpace#start_keeper` runs after stopping `@keeper`.
2019-07-31delete a check on bad assumption.Koichi Sasada
If object was modified, but there is a case that hash values (#hash) are same between before modified and after modified objects.
2019-07-31check SystemStackErrorKoichi Sasada
This recursive iteration test can cause SystemStackError so check it correctly.
2019-07-31backtrace can be nil.Koichi Sasada
Surprisingly, on SystemStackError#backtrace can return nil.
2019-07-31Revert "add debug code"Koichi Sasada
This reverts commit e83ec207cd5fda973c41d6629d8504b515522b12.
2019-07-31test/ruby/test_float.rb: suppress an overflow warningYusuke Endoh
``` warning: Float 0xf.fp10000000000000... out of range ```
2019-07-31add debug codeKoichi Sasada
2019-07-31test/ruby/test_io.rb (test_binmode_pipe): close all pipes explicitlyYusuke Endoh
to suppress the leak checker.
2019-07-31test/rdoc/test_rdoc_rubygems_hook.rb: suppress deprecation warningYusuke Endoh
2019-07-31test/ruby/test_file_exhaustive.rb: suppress method-redefined warningYusuke Endoh
2019-07-31move macro to internal.h for documentation.Koichi Sasada
13e84d5c0a changes enum to macro, but the flags usage information are lost in internal.h. It should be same place with other flags information.
2019-07-31test/rubygems/test_gem_remote_fetcher.rb: suppress deprecation warningsYusuke Endoh
2019-07-31Moved RHASH_LEV_MASK and turned into a macroNobuyoshi Nakada
Get rid of "ISO C restricts enumerator values to range of 'int'" error.
2019-07-31* expand tabs.git
2019-07-31Use 1 byte hint for ar_table [Feature #15602]Koichi Sasada
On ar_table, Do not keep a full-length hash value (FLHV, 8 bytes) but keep a 1 byte hint from a FLHV (lowest byte of FLHV). An ar_table only contains at least 8 entries, so hints consumes 8 bytes at most. We can store hints in RHash::ar_hint. On 32bit CPU, we use 4 entries ar_table. The advantages: * We don't need to keep FLHV so ar_table only consumes 16 bytes (VALUEs of key and value) * 8 entries = 128 bytes. * We don't need to scan ar_table, but only need to check hints in many cases. Especially we don't need to access ar_table if there is no match entries (in many cases). It will increase memory cache locality. The disadvantages: * This technique can increase `#eql?` time because hints can conflicts (in theory, it conflicts once in 256 times). It can introduce incompatibility if there is a object x where x.eql? returns true even if hash values are different. I believe we don't need to care such irregular case. * We need to re-calculate FLHV if we need to switch from ar_table to st_table (e.g. exceeds 8 entries). It also can introduce incompatibility, on mutating key objects. I believe we don't need to care such irregular case too. Add new debug counters to measure the performance: * artable_hint_hit - hint is matched and eql?#=>true * artable_hint_miss - hint is not matched but eql?#=>false * artable_hint_notfound - lookup counts
2019-07-31remove RHash::iter_lev.Koichi Sasada
iter_lev is used to detect the hash is iterating or not. Usually, iter_lev should be very small number (1 or 2) so `int` is overkill. This patch introduce iter_lev in flags (7 bits, FL13 to FL19) and if iter_lev exceeds this range, save it in hidden attribute. We can get 1 word in RHash. We can't modify frozen objects. Therefore I added new internal API `rb_ivar_set_internal()` which allows us to set an attribute even if the target object is frozen if the name is hidden ivar (the name without `@` prefix).
2019-07-31File.exists? is deprecated.Hiroshi SHIBATA
2019-07-31Uninstall ntlm-http and plist for failure of osx test.Hiroshi SHIBATA
It contains too old configuration that is autorequire. It will be removed at the RubyGems 3.1.0.
2019-07-31[rubygems/rubygems] Partly reverted be962ca0c411f3b4bcfebfb6e714c78cbad12775Hiroshi SHIBATA
* `Gem::ConfigMap` is still used by Bundler. * `Gem::RubyGemsVersion` is also still referred by the old gems. https://github.com/rubygems/rubygems/commit/249c3ff44f
2019-07-31[rubygems/rubygems] Skip integration test for rake package task.Hiroshi SHIBATA
https://github.com/rubygems/rubygems/commit/ca8afc01a3
2019-07-31[rubygems/rubygems] Initialize '@ran_rake' correctly, so we don't have to ↵bronzdoc
set it up later and cause confusion https://github.com/rubygems/rubygems/commit/6ec3ba983c
2019-07-31[rubygems/rubygems] Remove extension 'double pipe equals' assigment since is ↵bronzdoc
not needed anymore https://github.com/rubygems/rubygems/commit/930de86a24
2019-07-31[rubygems/rubygems] Move 'build_for' to handle extension type before the ↵bronzdoc
extension is used https://github.com/rubygems/rubygems/commit/2a32c5ef0a
2019-07-31[rubygems/rubygems] Do not pass +build_dir+ argument to build_errorbronzdoc
https://github.com/rubygems/rubygems/commit/107fea3432
2019-07-31[rubygems/rubygems] Remove useless param +build_dir+bronzdoc
https://github.com/rubygems/rubygems/commit/0402974149
2019-07-31[rubygems/rubygems] Drop support for 'gem env packageversion'bronzdoc
https://github.com/rubygems/rubygems/commit/be962ca0c4
2019-07-31[rubygems/rubygems] Improve `rake package` test error messageDavid Rodríguez
https://github.com/rubygems/rubygems/commit/be962ca0c4
2019-07-31[rubygems/rubygems] Get `rake package` testedDavid Rodríguez
https://github.com/rubygems/rubygems/commit/006cdd4084
2019-07-31[rubygems/rubygems] Generate a licenses.rb file with correct styleDavid Rodríguez
https://github.com/rubygems/rubygems/commit/469fceeb2f
2019-07-31[rubygems/rubygems] Enable `Layout/AlignArray` copDavid Rodríguez
https://github.com/rubygems/rubygems/commit/1ea674d8f7
2019-07-31[rubygems/rubygems] Enable `Layout/EmptyLinesAroundAccessModifier`David Rodríguez
https://github.com/rubygems/rubygems/commit/41b1cebc33
2019-07-31[rubygems/rubygems] Remove warning: shadowing outer local variable - specbronzdoc
https://github.com/rubygems/rubygems/commit/70c5c17a5f
2019-07-31[rubygems/rubygems] Make error code a constant and remove TODO commentbronzdoc
https://github.com/rubygems/rubygems/commit/3d6c7c92e4
2019-07-31[rubygems/rubygems] Move default specifications dir definition out of ↵Vít Ondruch
BasicSpecification. This was never the right place. The method got there just by evolution, not by design. Move it within default methods, where it suits better. Since this method is presumably used just internally, it should be safe to deprecate it and remove later. https://github.com/rubygems/rubygems/commit/0c0dd9458a