| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
https://github.com/ruby/date/commit/ea3644a7c4
|
|
|
|
| |
https://github.com/ruby/date/commit/71c35b4054
|
|
|
|
| |
https://github.com/ruby/date/commit/3f666fa882
|
|
|
|
| |
https://github.com/ruby/date/commit/3bfed83ce7
|
|
|
|
| |
https://github.com/ruby/date/commit/945e26e243
|
|
|
|
| |
https://github.com/ruby/date/commit/7fe2bd5f94
|
|
|
|
| |
https://github.com/ruby/date/commit/a45f8f03c9
|
|
|
|
| |
https://github.com/ruby/date/commit/7afd9d4615
|
|
|
|
| |
https://github.com/ruby/io-console/commit/441528e3eb
|
|
|
|
| |
https://github.com/ruby/io-wait/commit/940ba319d3
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an object becomes "too complex" (in other words it has too many
variations in the shape tree), we transition it to use a "too complex"
shape and use a hash for storing instance variables.
Without this patch, there were rare cases where shape tree growth could
"explode" and cause performance degradation on what would otherwise have
been cached fast paths.
This patch puts a limit on shape tree growth, and gracefully degrades in
the rare case where there could be a factorial growth in the shape tree.
For example:
```ruby
class NG; end
HUGE_NUMBER.times do
NG.new.instance_variable_set(:"@unique_ivar_#{_1}", 1)
end
```
We consider objects to be "too complex" when the object's class has more
than SHAPE_MAX_VARIATIONS (currently 8) leaf nodes in the shape tree and
the object introduces a new variation (a new leaf node) associated with
that class.
For example, new variations on instances of the following class would be
considered "too complex" because those instances create more than 8
leaves in the shape tree:
```ruby
class Foo; end
9.times { Foo.new.instance_variable_set(":@uniq_#{_1}", 1) }
```
However, the following class is *not* too complex because it only has
one leaf in the shape tree:
```ruby
class Foo
def initialize
@a = @b = @c = @d = @e = @f = @g = @h = @i = nil
end
end
9.times { Foo.new }
``
This case is rare, so we don't expect this change to impact performance
of most applications, but it needs to be handled.
Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Count how many "variations" each class creates. A "variation" is a a
unique ordering of instance variables on a particular class. This can
also be thought of as a branch in the shape tree.
For example, the following Foo class will have 2 variations:
```ruby
class Foo ; end
Foo.new.instance_variable_set(:@a, 1) # case 1: creates one variation
Foo.new.instance_variable_set(:@b, 1) # case 2: creates another variation
foo = Foo.new
foo.instance_variable_set(:@a, 1) # does not create a new variation
foo.instance_variable_set(:@b, 1) # does not create a new variation (a continuation of the variation in case 1)
```
We will use this number to limit the amount of shapes that a class can
create and fallback to using a hash iv lookup.
Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
|
|
|
|
|
|
|
| |
* Remove `require 'io/wait'` as it's part of core now.
* Update ruby specs using version gates.
* Add note about why it's conditional.
|
| |
|
|
|
|
| |
They don't actually have a class.
|
|
|
|
|
|
| |
Fixed https://github.com/ruby/date/issues/83
https://github.com/ruby/date/commit/9731a3e732
|
|
|
|
| |
https://github.com/ruby/syslog/commit/a92b55b638
|
|
|
|
| |
https://github.com/ruby/readline-ext/commit/7af996f24b
|
|
|
| |
See d2166c09b08fc1 and #6036 for more context.
|
|
|
|
| |
https://github.com/ruby/date/commit/6bb6d3a810
|
|
|
|
|
|
|
| |
RDoc does not consider preprocessor conditionals, but equally uses
both documents of `#if` and `#else` sides.
https://github.com/ruby/openssl/commit/ea0a112a0c
|
|
|
|
|
| |
https://github.com/ruby/ruby/commit/6d8f396f37350b7aa9c85a097929f54a0939448b
https://github.com/ruby/ruby/commit/c8b3bd45cc3cae93ae701333202416838ee6a00c
|
|
|
|
|
|
| |
documentation
(https://github.com/ruby/openssl/pull/559)
Adds back missing constant description on the documentation.
|
|
|
|
|
|
| |
LibreSSL 3.6 added support for HKDF in EVP. Enable this in ossl_kdf.c.
https://github.com/ruby/openssl/commit/9bdd39a7e2
|
|
|
|
|
|
|
|
| |
For some reasons, plaintext may be empty string.
ref https://www.rfc-editor.org/rfc/rfc9001.html#section-5.8
https://github.com/ruby/openssl/commit/953592a29e
|
|
|
|
|
|
|
|
| |
LibreSSL 3.4 added EVP_DigestSign() and EVP_DigestVerify(). Use them
when available to prepare for the addition of Ed25519 support in
LibreSSL 3.7.
https://github.com/ruby/openssl/commit/475b2bf766
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
We forgot about that one, it's quite useful to see which capacity
we started from.
|
|
|
|
| |
https://github.com/ruby/date/commit/b7a8229041
|
|
|
|
|
|
|
|
|
| |
Remove all shipped files and require path on JRuby until we can
add JRuby's extension to the gem.
Temporary workaround for #48
https://github.com/ruby/date/commit/94c3becef2
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
https://github.com/ruby/etc/commit/5cac138538
|
|
|
|
| |
https://github.com/ruby/stringio/commit/e62b9d78d3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I see several arguments in doing so.
First they use a non trivial amount of memory, so for various memory
profiling/mapping tools it is relevant to have visibility of the space
occupied by shapes.
Then, some pathological code can create a tons of shape, so it is
valuable to have a way to have a way to observe shapes without having
to compile Ruby with `SHAPE_DEBUG=1`.
And additionally it's likely much faster to dump then this way than
to use `RubyVM::Shape`.
There are however a few open questions:
- Shapes can't respect the `since:` argument. Not sure what to do when
it is provided. Would probably make sense to not dump them.
- Maybe it would make more sense to have a separate `ObjectSpace.dump_shapes`?
- Maybe instead `dump_all` should take a `shapes: false` argument?
Additionally, `ObjectSpace.dump_shapes` is added for the use case of
debugging the evolution of the shape tree.
|
|
|
|
| |
https://github.com/ruby/stringio/commit/5ba853d6ff
|
|
|
|
| |
https://github.com/ruby/psych/commit/bdf20e6042
|
| |
|
| |
|
|
|
|
| |
https://github.com/ruby/bigdecimal/commit/25a75c2033
|
|
|
|
| |
https://github.com/ruby/zlib/commit/f1ce5e3e8d
|
|
|
|
| |
https://github.com/ruby/win32ole/commit/e4a1f3a2bf
|