summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-05-31Improve performance of implicit type conversionwatson1978
To convert the object implicitly, it has had two parts in convert_type() which are 1. lookink up the method's id 2. calling the method Seems that strncmp() and strcmp() in convert_type() are slightly heavy to look up the method's id for type conversion. This patch will add and use internal APIs (rb_convert_type_with_id, rb_check_convert_type_with_id) to call the method without looking up the method's id when convert the object. Array#flatten -> 19 % up Array#+ -> 3 % up [ruby-dev:50024] [Bug #13341] [Fix GH-1537] ### Before Array#flatten 104.119k (± 1.1%) i/s - 525.690k in 5.049517s Array#+ 1.993M (± 1.8%) i/s - 10.010M in 5.024258s ### After Array#flatten 124.005k (± 1.0%) i/s - 624.240k in 5.034477s Array#+ 2.058M (± 4.8%) i/s - 10.302M in 5.019328s ### Test Code require 'benchmark/ips' class Foo def to_ary [1,2,3] end end Benchmark.ips do |x| ary = [] 100.times { |i| ary << i } array = [ary] x.report "Array#flatten" do |i| i.times { array.flatten } end x.report "Array#+" do |i| obj = Foo.new i.times { array + obj } end end git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58978 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-31add debug counters for local variable (lavr) access.ko1
* debug_counter.h: add the following counters: * lvar_get: counter for lvar get. * lvar_get_dynamic: counter for lvar get from upper frames. * lvar_set: coutner for lvar set. * lvar_set_dynamic: coutner for lvar set from upper frames. * lvar_set_slowpath: counter for lavr set using slowpath. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-31Makefile.sub: set ENABLE_SHARED [ci skip]nobu
* win32/Makefile.sub (LIBRUBY_LDSHARED): mswin build always enables shared. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-31common.mk: lldb [ci skip]nobu
* common.mk (lldb, lldb-ruby): add targets to debug with lldb. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58975 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-31lldb_cruby.py: eval outside framesnobu
* misc/lldb_cruby.py (lldb_rp): evaluate without frames when no process is running, and show error messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30* 2017-05-31svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30object.c: improve docsstomar
* object.c: [DOC] add an example for Object#yield_self that better illustrates its purpose; other small improvements. Reported by Vitaly Tatarintsev (ck3g). Patch by Marcus Stollsteimer. [Fix GH-1637] * object.c: [DOC] improve docs for Object#{itself,tap}. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30enum.c: check if reenterednobu
* enum.c (cmpint_reenter_check): extract from nmin_cmp and nmin_block_cmp. * enum.c (nmin_cmp): check if reentered before rb_cmpint. [Feature #13437] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30enum.c: rb_check_funcall_default for fallback valuenobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30test_rubyoptions.rb: ruby-runner sets $0 to install name nownobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30Improve performance of Enumerable#{sort_by,min_by,max_by,minmax_by}watson1978
This is totally same approach with r58964. enum.c (sort_by_cmp): use OPTIMIZED_CMP() to compare the objects instead of `<=>' method dispatching for Fixnum/Float/String object. enum.c (nmin_cmp): ditto. enum.c (min_by_i): ditto. enum.c (max_by_i): ditto. enum.c (minmax_by_i_update): ditto. enum.c (minmax_by_i): ditto. Enumerable#sort_by -> 51 % up Enumerable#min_by(n) -> 34 % up Enumerable#min_by -> 37 % up Enumerable#max_by(n) -> 61 % up Enumerable#max_by -> 40 % up Enumerable#minmax_by -> 67 % up [ruby-core:80689] [Bug #13437] [Fix GH-1584] ### Before Enumerable#sort_by 5.692k (± 2.2%) i/s - 28.611k in 5.028861s Enumerable#min_by(n) 8.496k (± 0.5%) i/s - 43.146k in 5.078394s Enumerable#min_by 8.678k (± 0.5%) i/s - 43.911k in 5.060128s Enumerable#max_by(n) 3.306k (± 3.0%) i/s - 16.562k in 5.014727s Enumerable#max_by 8.322k (± 2.8%) i/s - 42.400k in 5.099400s Enumerable#minmax_by 6.769k (± 2.6%) i/s - 34.100k in 5.041354s ### After Enumerable#sort_by 8.591k (± 3.0%) i/s - 43.316k in 5.046836s Enumerable#min_by(n) 11.489k (± 1.2%) i/s - 57.732k in 5.025504s Enumerable#min_by 11.835k (± 2.7%) i/s - 60.150k in 5.086450s Enumerable#max_by(n) 5.322k (± 1.1%) i/s - 26.650k in 5.008289s Enumerable#max_by 11.705k (± 0.6%) i/s - 59.262k in 5.062997s Enumerable#minmax_by 11.323k (± 1.3%) i/s - 57.018k in 5.036565s ### Test code require 'benchmark/ips' Benchmark.ips do |x| enum = (1..1000).to_a.to_enum x.report "Enumerable#sort_by" do enum.sort_by { |a| a } end x.report "Enumerable#min_by(n)" do enum.min_by(2) { |a| a } end x.report "Enumerable#min_by" do enum.min_by { |a| a } end x.report "Enumerable#max_by(n)" do enum.max_by(2) { |a| a } end x.report "Enumerable#max_by" do enum.max_by { |a| a } end x.report "Enumerable#minmax_by" do enum.minmax_by { |a| a } end end git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58968 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30add parameter names.ko1
* vm_core.h: add parameter names for rb_iseq_new*. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58967 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30Solaris 10 x86 raseis SEGVnaruse
http://rubyci.s3.amazonaws.com/unstable10x/ruby-trunk/log/20170527T221806Z.diff.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58966 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30Change max byte length of UTF-8 to 4 bytesduerst
In enc/utf_8.c, change maximum byte length of UTF-8 to 4 bytes (from 6) to conform to definition of UTF-8. This closes issue #13590. (This is a retry of r58954, after issue #13590 has been addressed.) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58965 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-30Improve performance of Range#{min,max}watson1978
range.c (range_min): use OPTIMIZED_CMP() to compare the objects instead of `<=>' method dispatching for Fixnum/Float/String object inside Range object. range.c (range_max): ditto. Range#min -> 34 % up Range#max -> 44 % up [ruby-core:80713] [Bug #13443] [Fix GH-1585] ### Before Range#min 8.428M (± 1.3%) i/s - 42.141M in 5.000952s Range#max 8.157M (± 1.3%) i/s - 40.852M in 5.009297s ### After Range#min 11.269M (± 1.2%) i/s - 56.388M in 5.004611s Range#max 11.764M (± 1.3%) i/s - 58.856M in 5.003820s ### Test code require 'benchmark/ips' Benchmark.ips do |x| x.report "Range#min" do |i| i.times { (1..100).min } end x.report "Range#max" do |i| i.times { (1..100).max } end end git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29* properties.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58963 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29Clean up a bit the Process.setpriority specseregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29Enable Process.setpriority for a single process on more platforms.eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58961 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29* 2017-05-30svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29Run in separate process/pgrp [Bug #13609]nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29Simplify, avoid extra exceptions and add test for concurrent mspec mkdir_peregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29rubyspec: Fix method redefinition warningk0kubun
ruby/spec/rubyspec/library/erb/run_spec.rb:63: warning: method redefined; discarding old main ruby/spec/rubyspec/library/erb/result_spec.rb:53: warning: previous definition of main was here ruby/spec/rubyspec/library/erb/run_spec.rb:76: warning: method redefined; discarding old main1 ruby/spec/rubyspec/library/erb/result_spec.rb:67: warning: previous definition of main1 was here ruby/spec/rubyspec/library/erb/run_spec.rb:81: warning: method redefined; discarding old main2 ruby/spec/rubyspec/library/erb/result_spec.rb:72: warning: previous definition of main2 was here git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29test/erb/test_erb.rb: Fix unused variable warningk0kubun
ruby/test/erb/test_erb.rb:575: warning: assigned but unused variable - foo git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58956 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29revert r58954 temporarilyduerst
Revert change to maximum of 4 bytes for UTF-8 characters at r58954 temporarily. This failed spec at https://travis-ci.org/ruby/ruby/builds/237086017, but it is totally unclear why. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58955 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29Change max byte length of UTF-8 to 4 bytesduerst
In enc/utf_8.c, change maximum byte length of UTF-8 to 4 bytes (from 6) to conform to definition of UTF-8. This closes issue #13590. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29fix up r58952nobu
* spec/mspec/lib/mspec/helpers/fs.rb (Object#mkdir_p): rescue File.stat when the target does not exist. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58953 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29fix race conditionnobu
* spec/mspec/lib/mspec/helpers/fs.rb (Object#mkdir_p): fix race condition when multi_exec. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29tool/runruby.rb: exec ruby-runnernobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29ruby-runner.c: replace argv[0]nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-29default.mspec: remove useless flagsnobu
* spec/default.mspec: removed -I options for useless or non- existent paths from flags. there is no library scripts and .ext directory in the source directory. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28suppress warning: ambiguous first argument; put parentheses or a space even ↵naruse
after `-' operator Introduced at r58905 http://rubyci.s3.amazonaws.com/ubuntu/ruby-trunk/log/20170526T153003Z.diff.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28Revert "Update to ruby/spec@2a047c8"naruse
This reverts commit 2531a1013b56a030f99ea4c2ee36e66dbf38a855. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28* properties.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58946 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28* 2017-05-29svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28Revert r58939 and r58942naruse
This reverts following commits because it breaks mswinci * Update to ruby/spec@2a047c8 * Update to ruby/spec@ca32ae2 see also the result: http://rubyci.org/logs/mswinci.japaneast.cloudapp.azure.com/vc12-x64/ruby-trunk/log/20170528T140014Z.fail.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28lldb_cruby.py: constants from the targetnobu
* misc/lldb_cruby.py (lldb_init): get constants from ruby_dummy_gdb_enums in the target. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28Update to ruby/spec@ca32ae2eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28* properties.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28Add tool to pull latest mspec/spec when commits have been synchronizederegon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28Update to ruby/spec@2a047c8eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28ruby.c: file in load_file argumentnobu
* ruby.c (load_file): move opened file to an argument, to reduce open/close calls in the near future. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28ruby.c: shrink ruby_cmdline_options_tnobu
* ruby.c (ruby_cmdline_options_t): reordered members and turned simple flags into bit fields to reduce the size (136->104 on LP64). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28test/ruby/test_io.rb: adjust CPU usage check to 10%normal
I miscalculated for r58934, since we sleep 100ms, and the worst possible case is 100 Hz in the kernel meaning we only have 10ms resolution. So, we need to increase our CPU percentage to >= 10% for this. This should be more than enough for our CI machines which have 300 Hz kernels [ruby-core:81429]: http://ci.rvm.jp/results/trunk-test@sasada-8core/1495942555 * test/ruby/test_io.rb (test_copy_stream_no_busy_wait): override default percentage git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28process.c: Use getrusage(2) in Process.timesk0kubun
if getrusage(2) is available, to improve precision of Process.times and its user like lib/benchmark.rb. On macOS, since getrusage(2) has better precision than times(3), they are much improved like: * Before Process.times => #<struct Process::Tms utime=0.56, stime=0.35, cutime=0.04, cstime=0.03> puts Benchmark.measure { "a" * 1_000_000_000 } 0.340000 0.310000 0.650000 ( 0.674025) * After Process.times => #<struct Process::Tms utime=0.561899, stime=0.35076, cutime=0.046483, cstime=0.038929> puts Benchmark.measure { "a" * 1_000_000_000 } 0.343223 0.310037 0.653260 ( 0.674025) On Linux, since struct rusage from getrusage(2) is used instead of struct tms from times(2), they are slightly improved like: * Before Process.times => #<struct Process::Tms utime=0.43, stime=0.11, cutime=0.0, cstime=0.0> puts Benchmark.measure { "a" * 1_000_000_000 } 0.120000 0.040000 0.170000 ( 0.171621) * After Process.times => #<struct Process::Tms utime=0.432, stime=0.116, cutime=0.0, cstime=0.0> puts Benchmark.measure { "a" * 1_000_000_000 } 0.124000 0.048000 0.172000 ( 0.171621) [ruby-dev:49471] [Feature #11952] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-28tests: increase CPU percentage threshold for assert_cpu_usage_lownormal
When sleeping for the tick rate of 100ms (defined in thread_pthread.c) as we do in test/ruby/test_io.rb (test_copy_stream_no_busy_wait), it may not be possible to measure with <= 10ms resolution on 100HZ systems (CONFIG_HZ in the Linux kernel). So increase the threshold to 15ms (10ms + 5ms slack for slow systems). * test/lib/test/unit/assertions.rb (assert_cpu_usage_low): increase pct default value [ruby-core:81427] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58934 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27* properties.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58933 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27* remove trailing spaces.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27Update to ruby/spec@2795010eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27Update to ruby/mspec@6c95759eregon
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-27* properties.svn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e