494 Commits

Author SHA1 Message Date
Tanaka Akira
fa17cb75a1 [doc] update Enumerable document.
- Enhance document about #size method for Enumerable and Enumerator
- add an Enumerator example for Enumerable#drop_while
2025-04-22 01:49:41 +09:00
Nobuyoshi Nakada
c218862d3c
Fix style [ci skip] 2025-04-19 22:02:10 +09:00
Tanaka Akira
ad69f4ddff [doc] update {Enumerator,Enumerable}#size document.
at Code Party RubyKaigi 2025.
2025-04-18 21:10:18 +09:00
NARUSE, Yui
bbf873521a Add description about edge cases of Enumerable#size
[Bug #21152]
2025-04-16 16:55:38 +09:00
Vincent Ollivier
f719b889a1 [DOC] Fix grep_v description 2025-01-31 15:41:56 +09:00
Nobuyoshi Nakada
b176d4f52e
[Bug #21008] Normalize before sum to float
After switching to `Float`-mode when summing `Numeric` objects,
normalization for `Float` is still needed.
2025-01-07 11:38:51 +09: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
Alan Wu
11e7ab79de
Remove 1 allocation in Enumerable#each_with_index (#11868)
* Remove 1 allocation in Enumerable#each_with_index

Previously, each call to Enumerable#each_with_index allocates 2
objects, one for the counting index, the other an imemo_ifunc passed
to `self.each` as a block.

Use `struct vm_ifunc::data` to hold the counting index directly to
remove 1 allocation.

* [DOC] Brief summary for usages of `struct vm_ifunc`
2024-10-11 10:22:44 -04:00
Alan Wu
5f3e9f185d [DOC] Mention that Enumerable#each_with_index calls self.each 2024-10-10 12:32:47 -04:00
Peter Zhu
f56be4286f [DOC] Add pound sign before all <=> methods 2024-10-03 09:28:13 -04:00
BurdetteLamar
f1a7966187 [DOC] Rationalize aliases in What's Here 2024-08-30 22:26:50 -04:00
BurdetteLamar
76ccd1df37 [DOC] Tweaks for Enum#tally 2024-08-21 15:56:59 -04:00
Yusuke Endoh
e1238a1fab Enumerable#all?: Stop optimizing when a given block is not optimizable
This is a follow up to 182822683f86c8f8d63b05765addf5a04d112aa2.

Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
2024-07-11 12:28:23 +09:00
Yusuke Endoh
182822683f Use rb_block_call2 for some Enumerable methods
Enumerable#all?, #any?, #one?, and #none? do not use yielded arguments
as an Array. So they can use rb_block_call2 to omit array allocatoin.

Enumerable#find does not have to immediately accept yielded arguments as
an Array. It can delay array allocation until the predicate block
returns truthy.

(TODO: Enumerable#count and #find_all seem to be optimizable as well.)
2024-07-10 13:00:47 +09:00
Dave Thomas
a5cb8c8c5b
[DOC] rewrite inject doc (#10009)
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Dennis Dashkevich <dskecse@gmail.com>
2024-05-06 13:51:44 +09:00
Peter Zhu
436191abe0 Replace assert with RUBY_ASSERT in enum.c
assert does not print the bug report, only the file and line number of
the assertion that failed. RUBY_ASSERT prints the full bug report, which
makes it much easier to debug.
2024-02-12 15:07:47 -05:00
Nobuyoshi Nakada
50520cc193
[DOC] Missing comment markers 2023-09-27 16:18:05 +09:00
Burdette Lamar
8c5b9ebf71
[DOC] Improve doc guide compliance (#8221) 2023-08-15 14:43:58 -04:00
Joshua Young
4bdb61b665
[DOC] Fix missing word in a comment 2023-07-30 01:02:20 +09:00
Nobuyoshi Nakada
a5e1d549b5 [DOC] Mention the edge case of any?/all? 2023-06-01 21:44:53 +09:00
Burdette Lamar
d62ae18797
[DOC] Link fix (#7862) 2023-05-26 09:20:18 -04:00
nekoyama32767
87217f26f1
[Feature #19643] Direct primitive compare sort for Array#sort_by
In most of case `sort_by` works on primitive type.
Using `qsort_r` with function pointer is much slower than compare data directly.

I implement an intro sort which compare primitive data directly for `sort_by`.
We can even afford an O(n) type check before primitive data sort.
It still go faster.
2023-05-20 19:40:27 +09:00
BurdetteLamar
3b239d2480 Remove (newly unneeded) remarks about aliases 2023-02-19 14:26:34 -08:00
zverok
976cc3852b [DOC] Return *args to Enumerable method definitions 2023-02-19 22:32:52 +02:00
Daniel Colson
e69b91fae4 Introduce BOP_CMP for optimized comparison
Prior to this commit the `OPTIMIZED_CMP` macro relied on a method lookup
to determine whether `<=>` was overridden. The result of the lookup was
cached, but only for the duration of the specific method that
initialized the cmp_opt_data cache structure.

With this method lookup, `[x,y].max` is slower than doing `x > y ?
x : y` even though there's an optimized instruction for "new array max".
(John noticed somebody a proposed micro-optimization based on this fact
in https://github.com/mastodon/mastodon/pull/19903.)

```rb
a, b = 1, 2
Benchmark.ips do |bm|
  bm.report('conditional') { a > b ? a : b }
  bm.report('method') { [a, b].max }
  bm.compare!
end
```

Before:

```
Comparison:
         conditional: 22603733.2 i/s
              method: 19820412.7 i/s - 1.14x  (± 0.00) slower
```

This commit replaces the method lookup with a new CMP basic op, which
gives the examples above equivalent performance.

After:

```
Comparison:
              method: 24022466.5 i/s
         conditional: 23851094.2 i/s - same-ish: difference falls within
error
```

Relevant benchmarks show an improvement to Array#max and Array#min when
not using the optimized newarray_max instruction as well. They are
noticeably faster for small arrays with the relevant types, and the same
or maybe a touch faster on larger arrays.

```
$ make benchmark COMPARE_RUBY=<master@5958c305> ITEM=array_min
$ make benchmark COMPARE_RUBY=<master@5958c305> ITEM=array_max
```

The benchmarks added in this commit also look generally improved.

Co-authored-by: John Hawthorn <jhawthorn@github.com>
2022-12-06 12:37:23 -08:00
S-H-GAMELINKS
1f4f6c9832 Using UNDEF_P macro 2022-11-16 18:58:33 +09:00
Kouhei Yanagita
f982a26374 [DOC] Fix typo in Enumerable#slice_before 2022-10-19 09:14:50 +09:00
Peter Zhu
a24c607e30 [DOC] Fix formatting issue in Enumerable 2022-08-08 09:26:07 -04:00
Peter Zhu
efb91ff19b Rename rb_ary_tmp_new to rb_ary_hidden_new
rb_ary_tmp_new suggests that the array is temporary in some way, but
that's not true, it just creates an array that's hidden and not on the
transient heap. This commit renames it to rb_ary_hidden_new.
2022-07-26 09:12:09 -04:00
Takashi Kokubun
5b21e94beb Expand tabs [ci skip]
[Misc #18891]
2022-07-21 09:42:04 -07:00
Burdette Lamar
8038d5e40a
Revert flawed doc for slice_after, slice_when, and chunk_while (#5952)
Restores doc for the methods that were cited in https://bugs.ruby-lang.org/issues/18765.
2022-05-28 14:20:00 -05:00
Colin Hart
9e8841e592
Simplify example code for Enumerable#each_with_object 2022-04-25 12:32:29 -07:00
Burdette Lamar
f918f6e4e7
[DOC] Repair format and links in What's Here sections (#5711)
* Repair format and links in What's Here for Comparable and Array

* Repair format for What's Here in enum.c
2022-03-25 10:52:06 -05:00
Jeremy Evans
8f1c69f27c Raise ArgumentError when calling Enumberable#inject without block or arguments
Previously, this would work as expected if the enumerable contained
0 or 1 element, and would raise LocalJumpError otherwise. That
inconsistent behavior is likely to lead to bugs.

Fixes [Bug #18635]
2022-03-23 07:55:49 -07:00
Peter Zhu
a32e5e1b97 [DOC] Use RDoc link style for links in the same class/module
I used this regex:

(?<=\[)#(?:class|module)-([A-Za-z]+)-label-([A-Za-z0-9\-\+]+)

And performed a global find & replace for this:

rdoc-ref:$1@$2
2022-02-07 09:52:06 -05:00
Nobuyoshi Nakada
32a0d9dd4b
Prefer the dedecated conversion function 2022-01-08 12:49:39 +09:00
Burdette Lamar
6326112e16
Enhanced RDoc for Enumerable (#5393)
A little more about the classes that include or extend Enumerable.
2022-01-04 18:39:07 -06:00
Jeremy Evans
a5cff7cc5d Make Enumerable#each_cons return object if over size
This behavior changed in dfb47bbd17c3c2b8ce17dbafaf62df023b0224b2,
but only for normal exit, not for early exit.  Fix it for early
exit as well.

While here, fix example code in documentation so that it doesn't
indicate that the method returns nil.
2021-11-16 19:31:35 -08:00
Jeremy Evans
e83c02a768 Delegate keywords from Enumerable#to_a to #each
Fixes [Bug #18289]
2021-11-05 06:22:14 -09:00
TSUYUSATO Kitsune
dfb47bbd17
Fix Enumerable#each_cons and Enumerable#each_slice to return a receiver
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
2021-10-25 12:13:44 +09:00
Nobuyoshi Nakada
4fb71575e2
[DOC] Fix code markup [ci skip]
Code markup in RDoc must not be concatenated with anothr word.
2021-10-25 01:04:51 +09:00
Burdette Lamar
7caeead36f
Accommondate earlier reviews of RDoc for Enumerable (#4943) 2021-10-06 19:06:17 -05:00
Burdette Lamar
fb122042e0
Enhanced RDoc for Enumerable (#4941)
Treated:

    #sum
    #uniq
    #compact
2021-10-06 15:51:49 -05:00
Burdette Lamar
abd473928e
Enhanced RDoc for Enumerable (#4938)
Treats:

    #slice_after
    #slice_when
    #chunk_while
2021-10-05 18:57:06 -05:00
Burdette Lamar
279b2b5b60
Enhanced RDoc for Enumerable#slice_before (#4932)
* Enhanced RDoc for Enumerable#slice_before

* Enhanced RDoc for Enumerable#slice_before
2021-10-05 10:52:51 -05:00
Burdette Lamar
8dc546b6b6
Enhanced RDoc for Enumerable#chunk (#4930) 2021-10-04 10:41:12 -05:00
S.H
dc9112cf10
Using NIL_P macro instead of == Qnil 2021-10-03 22:34:45 +09:00
Burdette Lamar
8c10fd2583
Enhanced RDoc for Enumerable (#4922)
Treated:

    #drop
    #drop_while
    #cycle
2021-10-01 17:51:39 -05:00
Burdette Lamar
27d9935d51
Enhanced RDoc for Enumerable (#4918)
Treats:

    #zip
    #take
    #take_while
2021-10-01 13:44:28 -05:00