1303 Commits

Author SHA1 Message Date
Jean Boussier
2432ed8904 Further simplify common use case of NEWOBJ_OF
Only few objects need to pass the starting shape.
2026-04-28 11:11:29 +09:00
Jean Boussier
e4667e5109 Refactor NEWOB_OF for the common protected use case
Almost every objects are now WB protected, with just a few
exceptions, hence we can provide a much simpler interface.

It's also much easier to find the remaining unprotected objects.
2026-04-28 11:11:29 +09:00
Jean Boussier
c202bc08e1 Simplify NEWOBJ_OF and introduce EC_NEWOBJ_OF
We only very rarely have the execution context available, so
it's preferable to provide a simpler default macro.
2026-04-28 11:11:29 +09:00
Jean Boussier
e603aa0d2f Get rid of RGENGC_WB_PROTECTED_ARRAY
It has been the default for a very long time and there is no good reason to
disable it.
2026-04-28 09:39:07 +09:00
Jean Boussier
97c070c244 [DOC] Clarify array methods using eql?
[Bug #22013]

Up to a certain size, only `eql?` is used, but for larger arrays
a Hash is used an `#hash` becomes necessary.

We could consider always checking `#hash` for consistency, but
that would decrease performance.

At the very least we can clarify the documentation.
2026-04-25 12:59:05 +09:00
Jean Boussier
53099633e2 Make ruby_xfree_sized and ruby_xrealloc_sized public
[Feature #21861]
2026-04-01 08:10:07 +01:00
Nobuyoshi Nakada
b6e6ccc6c2
Make Data#initialize reject Integer keys 2026-03-24 14:39:14 +09:00
Peter Zhu
752c88bab3 [DOC] Fix hash style for Array#flatten 2026-02-09 21:21:34 -05:00
Peter Zhu
a4b28f14cc [DOC] Fix hash style for Array#flatten! 2026-02-09 21:21:34 -05:00
Max Bernstein
f96d106d3a Don't use cexpr 2026-02-09 19:28:04 -05:00
Max Bernstein
11c845efec ZJIT: Inline Primitives for Array#each 2026-02-09 19:28:04 -05:00
Max Bernstein
f96f84837d Replace ary_fetch_next with separate array iteration primitives 2026-02-09 19:28:04 -05:00
Peter Zhu
10b6d543f9 [DOC] Fix hash style in Array#to_h 2026-02-04 19:55:23 -05:00
Jean Boussier
91619f0230 gc.c: Verify provided size in rb_gc_impl_free
For now the provided size is just for GC statistics, but in the future
we may want to forward it to C23's `free_sized` and passing an incorrect
size to it is undefined behavior.
2026-01-29 23:32:04 +01:00
BurdetteLamar
21f8472e77 [DOC] Fix links in Array 2026-01-26 17:05:18 -05:00
Burdette Lamar
5230f835e8
[DOC] Harmonize #[] methods 2026-01-07 18:01:56 -05:00
Victor Shepelev
ec4ca91319
Small documentation adjustments for new/updated features (#15634)
* Document Range#to_set

* Update Thread#raise and Fiber#raise signatures and docs

* Add reference to String#strip to character_selectors.rdoc

* Update *nil docs when calling methods

* Enhance Array#find and #rfind docs

* Add a notice to Kernel#raise about cause:
2025-12-20 13:07:38 +02:00
Étienne Barrié
769c6a1c54 [DOC] Use Arrays in examples for Array#find 2025-12-17 21:22:39 -08:00
Étienne Barrié
bb0e42c5e7 Define Array#detect as an alias for Array#find
Otherwise Array#detect is Enumerable#detect while Array#find uses a
different more performant implementation.

[Feature #21678]
2025-12-15 10:52:43 -05:00
Kevin Newton
6147b69587 Array#rfind
Implement Array#rfind, which is the same as find except from the
other side of the Array. Also implemented Array#find (as opposed to
the generic one on Enumerable because it is significantly faster
and to keep the implementations together.

[Feature #21678]
2025-12-12 13:35:30 -05:00
Luke Gruber
a211abbcbd
Cache array length in rb_ary_join (#15362)
When all elements are strings, we never have to recalculate the length
of the array because there are no conversion methods that are called, so
the length will never change. This speeds up the fast path by ~10%.

```ruby
a = ["1"*10, "2"*10, "3"*10, "4"*10, "5"*10] * 10
10_000_000.times do
  a.join
end
```

```
hyperfine --warmup 1 'ruby ../ruby2/test.rb' './exe/ruby ../ruby2/test.rb'
Benchmark 1: ruby ../ruby2/test.rb
  Time (mean ± σ):      3.779 s ±  0.053 s    [User: 3.754 s, System: 0.017 s]
  Range (min … max):    3.715 s …  3.874 s    10 runs

Benchmark 2: ./exe/ruby ../ruby2/test.rb
  Time (mean ± σ):      3.411 s ±  0.038 s    [User: 3.387 s, System: 0.017 s]
  Range (min … max):    3.360 s …  3.472 s    10 runs

Summary
  ./exe/ruby ../ruby2/test.rb ran
    1.11 ± 0.02 times faster than ruby ../ruby2/test.rb
```
2025-12-02 17:35:53 -05:00
Nobuyoshi Nakada
f92ff9a86b
Remove an excess semicolon in a macro 2025-12-01 07:15:36 +09:00
Stan Lo
4cd6661e18
Reorganize page documentations (#15154)
Re-organize page docs
2025-11-27 20:12:24 +00:00
Peter Zhu
2380f69f68 Fix array allocation when slot size < 40 bytes
We need to allocate at least sizeof(struct RArray) when the array is
embedded on garbage collectors that support slot sizes less than 40 bytes.
2025-11-02 09:17:17 -05:00
Koichi Sasada
bc00c4468e use SET_SHAREABLE
to adopt strict shareable rule.

* (basically) shareable objects only refer shareable objects
* (exception) shareable objects can refere unshareable objects
  but should not leak reference to unshareable objects to Ruby world
2025-10-23 13:08:26 +09:00
Ricardo Trindade
42ba82424d Fix typo in comment in array#zip docs
Duplicate the was found in the documentation
2025-10-07 18:54:34 -04:00
Peter Zhu
2d57e9e2a1 Clear out memory for newly allocated array 2025-09-17 09:25:17 -04:00
Peter Zhu
5a946a5be2 Change order of RARRAY_AREF and ARY_SET_LEN in rb_ary_pop
We should access the last element first before we shrink the length of the
array.
2025-09-11 08:14:25 -04:00
Ethan
60ca525fce [DOC] Array#map! fix to indicate return is self 2025-08-09 11:10:51 +09:00
Ethan
4209ebb1e4 [DOC] Array#fill fix to indicate return is self
doc currently indicates the return value as `new_array` but then in the first sentence explains "always returns +self+ (never a new array)".
2025-08-09 11:10:51 +09:00
Jean Boussier
45a2c95d0f Reduce exposure of FL_FREEZE
The `FL_FREEZE` flag is redundant with `SHAPE_ID_FL_FROZEN`, so
ideally it should be eliminated in favor of the later.

Doing so would eliminate the risk of desync between the two, but
also solve the problem of the frozen status being global in namespace
context (See Bug #21330).
2025-06-24 11:29:39 +01:00
Zopolis4
915d027738 Fix typo (newsString -> new String) 2025-05-11 07:07:10 +09:00
Nobuyoshi Nakada
ce8f7da49e
[Bug #21304] Reload length and pointer after #hash method
The receiver can be modified during the method calls.
2025-05-04 12:40:33 +00:00
Yusuke Endoh
f3246ccebb Fix an ASAN error in Array#difference
[Bug #21303]
2025-05-04 02:20:42 +09:00
Samuel Williams
c13ac4d615 Assert the GVL is held when performing various rb_ functions.
[Feature #20877]
2025-04-14 18:28:09 +09:00
Nobuyoshi Nakada
d31c15d81f
[DOC] Reference to the idiom from Array#sort 2025-02-27 13:07:43 +09:00
Jean Boussier
9826047f01 Array#sort_by! return early if sorting is useless
`Array#sort!` does that check, but `#sort_by!` always tries to
sort, which is wasteful.
2025-02-13 11:38:02 +01:00
Peter Zhu
e603a420e9 [DOC] Fix call-seq consistency in Array
The documentation guide (https://docs.ruby-lang.org/en/master/contributing/documentation_guide_md.html#label-Calling+Sequence+-28for+methods+written+in+C-29)
says that the call-seq for instance methods should only include the method
name, no prepending `array.`.
2025-02-10 16:30:04 -05:00
Nobuyoshi Nakada
8dd0d63550
[Bug #21106] Remove the useless last iteration
When only one element remains, this simply swaps the first identical
element and has no actual effect.
2025-02-02 19:34:52 +09:00
BurdetteLamar
f349104259 [DOC] Tweaks for Array doc 2025-01-03 11:42:53 -05:00
Nobuyoshi Nakada
e433e6515e
[DOC] Exclude 'Class' and 'Module' from RDoc's autolinking 2025-01-02 12:36:06 +09:00
Nobuyoshi Nakada
b4ec22fe6c
[DOC] Exclude 'Method' from RDoc's autolinking 2025-01-02 12:23:49 +09:00
tomoya ishida
477c505ac0
[DOC] Fix output examples containing old Hash#inspect format
The inspect format was intentionally changed as an outcome of
[Bug #20433] [ruby-core:118668], but some documentation update
was missing, as [Bug #20962] pointed out. Update some output
examples that clearly use Hash#inspect.
2024-12-18 12:08:15 -05:00
Kouhei Yanagita
25602421fb [DOC] Fix the block parameter name in Array#zip 2024-12-18 11:00:36 +09:00
Burdette Lamar
50a67820fb
[DOC] Change arg names from n to count (#12288) 2024-12-17 10:55:43 -05:00
Stan Lo
211857f48f Fix incorrect rdoc-ref links in array.rb 2024-12-13 18:09:39 -05:00
Jean Boussier
5335b140ab array.c: Remove unused rb_ary_verify function 2024-12-05 09:16:31 +01:00
Jean Boussier
bf225feb26 Fix an off by one in rb_ary_resize
When setting len to X we only need to grow the array
if len is bigger than capa. If they're equal we don't need to
increase capacity.
2024-12-04 22:46:02 +01:00
BurdetteLamar
d588a1c880 Correct order of listed methods 2024-12-02 15:28:53 -05:00
BurdetteLamar
9db056f2ea [DOC] Tweaks for Array 2024-11-20 10:40:49 -05:00