[#122900] [Ruby Bug#21529] Deprecate the /o modifier and warn against using it — "jpcamara (JP Camara) via ruby-core" <ruby-core@...>

Issue #21529 has been reported by jpcamara (JP Camara).

10 messages 2025/08/03

[#122925] [Ruby Feature#21533] Introduce `Time#am?` and `Time#pm?` — "matheusrich (Matheus Richard) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNTMzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG1hdGhldXNyaWNoIChNYXRoZXVzIFJp

10 messages 2025/08/06

[#122932] [Ruby Bug#21534] ppc64le Ractor ractor_port_receive aborted (core dumped) — "jaruga (Jun Aruga) via ruby-core" <ruby-core@...>

Issue #21534 has been reported by jaruga (Jun Aruga).

12 messages 2025/08/07

[#122953] [Ruby Bug#21540] prism allows `foo && return bar` when parse.y doesn't — "Earlopain (Earlopain _) via ruby-core" <ruby-core@...>

Issue #21540 has been reported by Earlopain (Earlopain _).

12 messages 2025/08/12

[#122964] [Ruby Feature#21543] Point ArgumentError to the call site — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #21543 has been reported by mame (Yusuke Endoh).

8 messages 2025/08/14

[#122969] [Ruby Feature#21545] `#try_dig`: a dig that returns early if it cannot dig deeper — "cb341 (Daniel Bengl) via ruby-core" <ruby-core@...>

Issue #21545 has been reported by cb341 (Daniel Bengl).

10 messages 2025/08/15

[#122987] [Ruby Bug#21547] SEGV after 2083fa commit — "watson1978 (Shizuo Fujita) via ruby-core" <ruby-core@...>

Issue #21547 has been reported by watson1978 (Shizuo Fujita).

10 messages 2025/08/20

[#123042] [Ruby Feature#21550] Ractor.sharable_proc/sharable_lambda to make sharable Proc object — "ko1 (Koichi Sasada) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNTUwIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtvMSAoS29pY2hpIFNhc2FkYSkuDQoN

16 messages 2025/08/21

[#123122] [Ruby Feature#21556] Add true? and false? methods to NilClass, TrueClass, FalseClass, and String — "Phalado (Raphael Cordeiro) via ruby-core" <ruby-core@...>

Issue #21556 has been reported by Phalado (Raphael Cordeiro).

9 messages 2025/08/29

[#123146] [Ruby Bug#21559] Unicode normalization nfd -> nfc -> nfd is not reversible — "tompng (tomoya ishida) via ruby-core" <ruby-core@...>

Issue #21559 has been reported by tompng (tomoya ishida).

8 messages 2025/08/31

[ruby-core:123026] [Ruby Feature#21532] Define most of Pathname in Ruby code

From: "akr (Akira Tanaka) via ruby-core" <ruby-core@...>
Date: 2025-08-21 12:58:21 UTC
List: ruby-core #123026
Issue #21532 has been updated by akr (Akira Tanaka).


Ok.  Merge it.

----------------------------------------
Feature #21532: Define most of Pathname in Ruby code
https://bugs.ruby-lang.org/issues/21532#change-114336

* Author: Eregon (Benoit Daloze)
* Status: Open
* Assignee: Eregon (Benoit Daloze)
----------------------------------------
There was discussion in #17473 and before to define most of Pathname in Ruby code and not in the C extension.

I have made a PR to achieve that: https://github.com/ruby/pathname/pull/57
I would like to merge it soon to avoid conflicts.

Once upon a time, Pathname was pure-Ruby: https://github.com/ruby/ruby/blob/95bc02237635d3fe42532bfe53038257575cee75/lib/pathname.rb

This PR goes back to that, and reuses that original Ruby code, but keeps the C extension implementation of `<=>` and `sub` as those two are significantly faster.
The other Pathname methods are actually faster in Ruby than in C, because all these methods just do `rb_funcall()` and `rb_ivar_get()` and those in C code have no inline cache, but the corresponding method calls and `@path` have inline caches in Ruby code.
https://railsatscale.com/2023-08-29-ruby-outperforms-c/ is an explanation of that.

Therefore having Pathname defined in Ruby seems a clear win for many reasons:
* Much clearer implementation, so easier to read what the code does
* Easier to maintain
* Safer (no risk of accessing out of bounds memory or e.g. passing the wrong number of arguments to `rb_funcall`)
* Significantly faster, because of these inline caches (more details in https://github.com/ruby/pathname/pull/57#issue-3234862768):

| Speedup (this branch / master) | ruby 3.4.2 | ruby 3.4.2 + YJIT |
| --- | --- | --- |
| `Pathname.new(".")` | 1.02x | 1.19x |
| `Pathname#directory?` | 1.03x | 1.06x |
| `Pathname#to_s` | 1.85x | 2.38x |

* Better for JITs as they can optimize this, notably `...` vs the C extension being a blackbox
* Works on JRuby (which does not support C extensions)
* Works on TruffleRuby (some Ruby C API functions that the extension uses are not supported on TruffleRuby)



-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- [email protected]
 To unsubscribe send an email to [email protected]
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/


In This Thread