Commit graph

42502 commits

Author SHA1 Message Date
svn
7a35ffeccd * 2016-02-26
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 23:23:31 +00:00
tenderlove
4102031164 Reduce system calls by activating the did_you_mean gem.
Activating the gem puts the gem on the load path, where simply requiring
the file will search every gem that's installed until it can find a gem
that contains the `did_you_mean` file.

Calling RubyGems' `require` will search each installed gem until it can
find one that contains the file it should require.  This means that the
more gems you have installed, the longer it can take to require that
gem.

To see this in action, lets compare the number of `stat` calls for a
"bare require" vs the number of `stat` calls for a require that follows
a gem activation by using these two programs:

```
[aaron@TC rubygems (master)]$ cat req_dym.rb
begin
  require 'did_you_mean'
rescue LoadError
end
[aaron@TC rubygems (master)]$ cat gem_dym.rb
begin
  gem 'did_you_mean'
  require 'did_you_mean'
rescue Gem::LoadError, LoadError
end
```

The first program just requires the `did_you_mean` gem, where the second
one activates the gem, then requires it.  We can count the number of
`stat` calls using `dtrace`:

```
[aaron@TC rubygems (master)]$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
[aaron@TC rubygems (master)]$ sudo dtrace -q -n 'syscall::stat*:entry { printf("%s\n", copyinstr(arg0)); }' -c`rbenv which ruby`" --disable-did_you_mean req_dym.rb" | wc -l

dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
     283
[aaron@TC rubygems (master)]$ sudo dtrace -q -n 'syscall::stat*:entry { printf("%s\n", copyinstr(arg0)); }' -c`rbenv which ruby`" --disable-did_you_mean gem_dym.rb" | wc -l

dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
      13
```

The "bare require" version does over 10x the number of stat calls
compared to the "gem, then require" version.  Of course the number for
the first one depends on the number of gems you have installed that sort
before the `did_you_mean` gem.

Lets also look at trunk Ruby:

```
[aaron@TC rubygems (master)]$ ruby -v
ruby 2.4.0dev (2016-02-25 trunk 53940) [x86_64-darwin15]
[aaron@TC rubygems (master)]$ sudo dtrace -q -n 'syscall::stat*:entry { printf("%s\n", copyinstr(arg0)); }' -c`rbenv which ruby`" --disable-did_you_mean req_dym.rb" | wc -l

dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
    2325
[aaron@TC rubygems (master)]$ sudo dtrace -q -n 'syscall::stat*:entry { printf("%s\n", copyinstr(arg0)); }' -c`rbenv which ruby`" --disable-did_you_mean gem_dym.rb" | wc -l

dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 826: syscall::stat64:entry): invalid user access in action #1 at DIF offset 24
     685
```

This change will reduce the number of `stat` calls on trunk Ruby too,
but since this installation doesn't have the `did_you_mean` gem,
RubyGems is still reading every gem spec file so that it can raise a
`Gem::LoadError` exception with a nice error message.  If we can modify
RubyGems a little, it may be possible to drop the number of stat calls
even on a Ruby installation that doesn't have the `did_you_mean` gem.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 23:23:30 +00:00
nobu
5fa5b50e58 eval_error.c: constify
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 12:36:25 +00:00
nobu
37d6a4dd99 eval_error.c: remove warn_printf
* eval_error.c (warn_printf): remove.

* eval_error.c (error_pos_str): return error position string,
  split from error_pos.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 12:36:24 +00:00
duerst
7feb182a08 * enc/unicode/case-folding.rb: Adding possibility for debugging output
for TitleCase table in casefold.h.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 10:04:59 +00:00
usa
92e0377ed4 * test/ruby/test_process.rb (test_execopts_open_chdir_m17n_path): it's originally for Windows. should not ignore on the platform.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 09:54:11 +00:00
nobu
aa40518b44 eval_error.c: error position format
* eval_error.c (error_print): use same error position format when
  no backtrace too.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53919 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 07:22:01 +00:00
svn
06751e43a3 * 2016-02-25
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 04:42:17 +00:00
nobu
1d58184308 eval_error.c: colon in message
* eval_error.c (error_pos): include a clone after the position.

* eval_error.c (error_print, error_handle): do not print a colon
  if the error position is unavailable.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-25 04:42:16 +00:00
svn
35f40f5347 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53916 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 13:32:02 +00:00
duerst
f1f48e6103 * include/ruby/oniguruma.h: Rearranging flag assignments and making
space for titlecase indices; adding additional macros to add or
  extract titlecase index; adding comments for better documentation.
* enc/unicode.c: Moving some macros to include/ruby/oniguruma.h;
  activating use of titlecase indices.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53915 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 13:32:01 +00:00
akr
169b867fbf * random.c (limited_rand): Add a specialized path for the limit fits in 32 bit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 12:30:20 +00:00
nobu
d4819da611 parse without $.
* io.c (rb_io_gets_internal): read one line from an IO without
  setting ARGF.lineno.

* parse.y (lex_io_gets): use rb_io_gets_internal not to affect
  $. global variable.

* ruby.c (load_file): no longer reset $.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 08:21:04 +00:00
nobu
43f7eacdac parse.y: hide compile_option
* parse.y (parser_set_compile_option_flag): hide compile_option
  hash from ObjectSpace.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 02:42:40 +00:00
nobu
0cd34e9639 vm_method.c: for hidden object
* vm_method.c (rb_method_basic_definition_p): methods of hidden
  objects cannot be overridden, return TRUE.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53911 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 02:38:43 +00:00
nobu
53ec85b5b4 numeric.c: micro optimizations
* numeric.c (flo_to_s, rb_fix2str): use rb_usascii_str_new instead
  of rb_usascii_str_new_cstr, when the length can be calculated.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 02:20:45 +00:00
svn
7c14876b2f * 2016-02-24
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 16:51:44 +00:00
headius
c8b9021004 * test/ruby/test_exception.rb: fix bad spawn argument (multiple
args in single) in test_thread_signal_location.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 16:51:43 +00:00
duerst
1cc579cb00 * enc/unicode/case-folding.rb, casefold.h: Outputting actual titlecase
data (new table, with indices from other tables).
* enc/unicode.c: Ignoring titlecase data indices for the moment.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53906 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 12:53:10 +00:00
nobu
3c0bb8d6f4 iseq.h: remove trailing comma
* iseq.h (iseq_mark_ary_index): get rid of trailing comma and name
  the magic number for iseq_mark_ary_create.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 07:59:17 +00:00
duerst
8aa8847b7c * enc/unicode/case-folding.rb, casefold.h: Reading casing data from
SpecialCasing.txt.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 06:21:55 +00:00
headius
0a0d452588 Bump up timeout for slower-starting implementations/platforms.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-23 02:03:37 +00:00
headius
073cbf20a0 * test/ruby/test_math.rb: use 64 bits in test_override_bignum_to_f
to ensure it's a bignum on all impls.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 23:23:10 +00:00
headius
4a147572a2 * test/ruby/test_math.rb: override tests must always put to_f back
Conflicts:
	test/ruby/test_math.rb

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 23:22:56 +00:00
svn
c06dd1ea72 * 2016-02-23
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 23:22:39 +00:00
headius
9386ecf9b6 * test/psych/test_emitter.rb: test_resizing_tags missing
start_stream call, caused strict parsers like on JRuby to err.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 23:22:39 +00:00
nobu
b0d81c1073 ruby.c: remove unnecessary context
* ruby.c (process_options): remove unnecessary context.
  rb_parser_append_print and rb_parser_while_loop just append some
  nodes and do not depend on the context.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 14:54:31 +00:00
kazu
f42d2ca85a fix a typo [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 11:00:38 +00:00
duerst
4ca9138bac * enc/unicode/case-folding.rb, casefold.h: Adding flag for title-case,
not yet operational.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 09:34:34 +00:00
duerst
5470ce8206 * enc/unicode/case-folding.rb, casefold.h: Fixed bug that avoided inclusion
of compatibility characters in uppper-/lower-case mappings.
  (with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53890 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 09:17:43 +00:00
svn
cdc5ac2e1e * 2016-02-22
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 07:15:57 +00:00
nobu
010752631b vm_core.h: CoreDataFromValue
* vm_core.h (CoreDataFromValue): split as an expression from
  GetCoreDataFromValue, which can be a statement only.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 07:15:57 +00:00
nobu
1656b70c0e internal.h: shortcut macros
* internal.h (RRATIONAL_SET_{NUM,DEN}): shortcut macros for
  internal only.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-22 07:15:56 +00:00
nobu
f66f998241 vm.c (vm_cref_new0): adjust indent [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-21 10:42:40 +00:00
nobu
d463c492bc cgi/escape: Optimize CGI.unescape
* cgi/escape/escape.c: Optimize CGI.unescape performance by C ext
  for ASCII-compatible encodings.  [Fix GH-1250]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-21 04:57:57 +00:00
nobu
1b7109e11a cgi/escape: Optimize CGI.unescapeHTML
* cgi/escape/escape.c: Optimize CGI.unescapeHTML performance by C
  ext for ASCII-compatible encodings.  [Fix GH-1242]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-21 04:57:35 +00:00
svn
6b6b3689dd * 2016-02-21
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-21 04:52:05 +00:00
nobu
74758a583d NEWS: update [ci skip]
* NEWS: change of Symbol#match.  [Bug #11991]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-21 04:52:04 +00:00
nobu
ab86bab950 test_dir_m17n.rb: fix ASCII-8BIT env
* test/ruby/test_dir_m17n.rb (test_glob_encoding): get rid of
  conversion when LC_ALL=C and filesystem encoding is ASCII-8BIT.
  [ruby-core:73868] [Bug #12081]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53881 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-20 09:36:08 +00:00
normal
68d4d7e41f doc/extension.rdoc: update paths for defs/ directory
These files were moved in r19844

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-20 06:39:14 +00:00
nobu
7cb7b5f7f2 Fix Module#module_eval rdoc [ci skip]
* vm_eval.c (rb_mod_module_eval): [DOC] Fix documentation
  signature for Module#module_eval.  [Fix GH-1258]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53879 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-20 05:44:52 +00:00
nobu
27c7dfa7e7 Update README.md
* README.md: a few grammatical changes to the main Ruby README.md.
  [Fix GH-1259]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53878 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-20 05:41:20 +00:00
nobu
4f969f6eee dir.c: paths as UTF-8
* dir.c (push_pattern, push_glob): deal with read paths as UTF-8
  to stat later, on Windows as well as OS X.
  [ruby-core:73868] [Bug #12081]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53877 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-20 04:04:59 +00:00
svn
094cfc445b * 2016-02-20
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 16:54:09 +00:00
nobu
8790fdce57 object.c: fix error message
* object.c (rb_mod_const_get): make error message at uninterned
  string consistent with symbols.  [ruby-dev:49498] [Bug #12089]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53875 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 16:54:08 +00:00
nobu
3ad8210ce1 find.rb: raise with the name
* lib/find.rb (Find#find): raise with the given path name if it
  does not exist.  [ruby-dev:49497] [Bug #12087]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53874 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 14:38:28 +00:00
nobu
c7f815eed8 test/ruby: suppress runtime warnings
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 07:58:09 +00:00
nobu
41f4317f45 test/ruby: suppress parser warnings
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 07:48:02 +00:00
nobu
311b715483 test: use assert_not_*
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 07:45:58 +00:00
duerst
6286ff6301 * enc/unicode.c: Activated use of case mapping data in CaseUnfold_11 array.
(with Kimihito Matsui)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 03:45:32 +00:00