Age | Commit message (Collapse) | Author |
|
If it will not use special variables (like $1, $&, $`...),
it can improve the performance by using Regexp#match? instead of Regexp#=~.
Because Regexp#=~ will generate the objects to special variables by pattern matching.
This patch will replace Regexp#=~ without special variables to Regexp#match?.
(Excludes https://github.com/ruby/ruby/blob/trunk/ext/pathname/lib/pathname.rb#L144-L153)
[Fix GH-1836] [ruby-core:86093] [Bug #14599]
## Environment
* OS : Ubuntu 17.10
* Compiler : gcc version 7.2.0
* CPU : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
* Memory : 16 GB
## TL;DR
| Before | After | Speed up
--------------------------- | ------ | ------ | --------
Pathname#absolute? | 142836 | 198487 | 39.0%
Pathname#cleanpath | 60706 | 79415 | 30.8%
Pathname#root? | 603806 | 759157 | 25.7%
Pathname#absolute? | 142592 | 197859 | 38.8%
Pathname#each_filename | 115600 | 152982 | 32.3%
Pathname#ascend | 50494 | 63606 | 26.0%
Pathname#+ | 100550 | 130372 | 29.7%
Pathname#join | 46673 | 60994 | 30.7%
Pathname#relative_path_from | 28362 | 37494 | 32.2%
## Before
```
Calculating -------------------------------------
Pathname#absolute? 142.836k (± 0.1%) i/s - 722.304k in 5.056884s
Pathname#cleanpath 60.706k (± 0.1%) i/s - 306.764k in 5.053305s
Pathname#root? 603.806k (± 0.3%) i/s - 3.062M in 5.071696s
Pathname#absolute? 142.592k (± 0.1%) i/s - 720.846k in 5.055301s
Pathname#each_filename
115.600k (± 0.1%) i/s - 586.818k in 5.076292s
Pathname#ascend 50.494k (± 0.1%) i/s - 255.301k in 5.056049s
Pathname#+ 100.550k (± 0.1%) i/s - 509.630k in 5.068433s
Pathname#join 46.673k (± 0.1%) i/s - 236.433k in 5.065696s
Pathname#relative_path_from
28.362k (± 0.0%) i/s - 143.728k in 5.067640s
```
## After
```
Calculating -------------------------------------
Pathname#absolute? 198.487k (± 0.1%) i/s - 995.665k in 5.016272s
Pathname#cleanpath 79.415k (± 0.1%) i/s - 404.406k in 5.092344s
Pathname#root? 759.157k (± 0.0%) i/s - 3.800M in 5.005072s
Pathname#absolute? 197.859k (± 0.1%) i/s - 995.720k in 5.032494s
Pathname#each_filename
152.982k (± 0.1%) i/s - 775.555k in 5.069607s
Pathname#ascend 63.606k (± 0.0%) i/s - 320.862k in 5.044560s
Pathname#+ 130.372k (± 0.1%) i/s - 660.856k in 5.068991s
Pathname#join 60.994k (± 0.1%) i/s - 305.068k in 5.001626s
Pathname#relative_path_from
37.494k (± 0.4%) i/s - 189.124k in 5.044146s
```
## Benchmark code
```ruby
require 'pathname'
require 'benchmark/ips'
Benchmark.ips do |x|
root = Pathname.new('/')
path1 = Pathname.new('/path/to/some/file1.rb')
path2 = Pathname.new('/path/to/some/file2.rb')
x.report("Pathname#absolute?") do
path1.absolute?
end
x.report("Pathname#cleanpath") do
Pathname.new('/path/to/some/file.rb').cleanpath
end
x.report("Pathname#root?") do
path1.root?
end
x.report("Pathname#absolute?") do
path1.absolute?
end
x.report("Pathname#each_filename") do
path1.each_filename { |file| }
end
x.report("Pathname#ascend") do
path1.ascend { |path| }
end
x.report("Pathname#+") do
path1 + path2
end
x.report("Pathname#join") do
path1.join("../file3.rb")
end
x.report("Pathname#relative_path_from") do
path1.relative_path_from(root)
end
end
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* parse.y: use tSP same as ripper instead of tSPACE.
[ruby-core:86080] [Bug #14597]
* ext/ripper/eventids2.c: tSP is defined in ripper.c now.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Nishiyama. [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/date/date_core.c (offset_to_sec, d_lite_plus): check
conversion results, to get rid of infinite recursion.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/openssl/extconf.rb: on Windows search winsock library
always, regardless pkg-config. direct use of winsock is not
region of OpenSSL. [ruby-core:85895] [Bug #14568]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62633 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Improving code like r62590. See r62529 for details.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/date/date_core.c (f_cmp): check comparison failure.
* ext/date/date_core.c (d_lite_step): deal with the comparison
result more defensively. [ruby-core:85796] [Bug #14549]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Also, as it's in the middle of the list of 4 arguments, 3rd and 4th arguments
(trim_mode, eoutvar) are changed to keyword arguments.
Old ways to specify arguments are deprecated and warned now.
bin/erb: deprecate -S option.
We'll remove all of deprecated ones at Ruby 2.7+.
enc/make_encmake.rb: stopped using deprecated interface
ext/etc/mkconstants.rb: ditto
ext/socket/mkconstants.rb: ditto
sample/ripper/ruby2html.rb: ditto
spec/ruby/library/erb/defmethod/def_erb_method_spec.rb: ditto
spec/ruby/library/erb/new_spec.rb: ditto
test/erb/test_erb.rb: ditto
test/erb/test_erb_command.rb: ditto
tool/generic_erb.rb: ditto
tool/ruby_vm/helpers/dumper.rb: ditto
tool/transcode-tblgen.rb: ditto
lib/rdoc/erbio.rb: ditto
lib/rdoc/generator/darkfish.rb: ditto
[Feature #14256]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Fixes: r62450 (commit 1aaeeb326e754c5c5db83fbf35f780f729a9dfed)
("long long is a C99ism")
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62453 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
so SIZEOF_LONG_LONG is not always available.
We have to check its defined?-ness before using.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/socket/lib/socket.rb (Addrinfo#connect_internal): make
protected for Addrinfo#connect_to, instead of private and send.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62449 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Init functions are called only once, cache is useless.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
clang 5.+ (tested clang 7.0.0) seems to be attempting division-by-zero
and giving a very large number for static args to rb_funcall.
* include/ruby/ruby.h (rb_varargs_bad_length): relax check for clang
* ext/-test-/funcall/funcall.c: renamed from passing_block.c
define extra_args_name function
* test/-ext-/funcall/test_funcall.rb: new test
[ruby-core:85266] [Bug #14425]
From: Eric Wong <e@80x24.org>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62116 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/openssl/lib/openssl/buffering.rb (do_write, puts): output
methods should not be affected by the input record separator.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
to raise error when it fails.
[Feature 14386] [GH-1795]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/socket/init.c (rsock_raise_socket_error): on Windows, encode
error messages from wide characters to the default encodings.
[ruby-core:84972] [Bug #14384]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/socket/getaddrinfo.c (ai_errlist): used only if gai_strerror
is missing.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
It fails when baseruby is old.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61994 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61992 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
To avoid the unspecified behavior (the evaluation order of arguments).
In `$$ = foo(bar(), baz());`, it is unspecified which `bar` or `baz` is
called earlier.
This commit changes the code to `v1=bar(); v2=baz(); $$ = foo();`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61991 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
I thought this trick was needed because the result of var_field was
passed to different arguments, as follows:
```
$1 = var_field(p, $1);
$$ = backref_assign_error(p, $1, $1, &@$);
```
Currently the DSL supports that one result is passed to one argument.
However, after the refactoring, I found that `backref_assign_error`
uses only one `$1`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/ripper/tools/dsl.rb (DSL#initialize): define `p` for `struct
parser_params *p`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/ripper/tools/dsl.rb (DSL#method_missing): expand ID
constnats without parentheses.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61975 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/ripper/tools/dsl.rb (DSL.const_missing): define to expand
Qnil and Qundef as-is.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/ripper/tools/dsl.rb (DSL#generate): indent after surrounding
by braces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61965 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
I think that they are not used.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
`foo!(...)` means Ripper event, and `foo(...)` means C function/macro
call. This is for fail-safe; if I forget `!` accidentally, it would
fail to compile, instead of wrongly adding a new Ripper event.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Instead of `_foo`. This makes it useful to do word boundary search of
the editor.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
It was replaced with `/*% ripper[brace]: ... %*/`
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
Currently, parse.y actions are hard to read and write because the code
has double meaning (for core parser and for ripper). I think that, if
it is easy to write ripper's code shortly and simply, the double meaning
trick is not needed.
For the sake, this change adds a simple DSL for ripper's code. For
example, in parse.y, we can write:
/*% ripper: stmts_add(stmts_new, void_stmt) %*/
instead of:
$$ = dispatch2(stmts_add, dispatch0(stmts_new),
dispatch0(void_stmt));
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/win32/lib/win32/resolv.rb: call rb_w32_osid instead of
direct GetVersionExA API.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
NODE_FOR was used both for "for"-statement itself and for
multi-assignment of for-statement (for x, y, in...end).
This change separates the two purposes, NODE_FOR for the former, and
newly introduced NODE_FOR_MASGN for the latter.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* test/-ext-/ast/test_ast.rb: Add tests for Node
code locations. This file tests
1. There are no Node whose code location is default
value (#test_not_cared)
2. There are no Node whose children's code locations
exceed parent's code location (#test_ranges)
* ext/-test-/ast/ast.c, ext/-test-/ast/extconf.rb:
Define AST module to help tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* test/-ext-/win32/test_console_attr.rb (reverse_video): fix test
when reverse video is set.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
* ext/socket/raddrinfo.c (parse_numeric_port): necessary
regardless of GETADDRINFO_EMU.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
because of r61712 and r61713
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61725 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|