[#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:123083] [Ruby Feature#21553] Remove opt_aref_with and opt_aset_with instructions

From: "k0kubun (Takashi Kokubun) via ruby-core" <ruby-core@...>
Date: 2025-08-27 03:22:46 UTC
List: ruby-core #123083
Issue #21553 has been updated by k0kubun (Takashi Kokubun).


ref: [Bug #9382], commit:58f800a278b8b70463f4afdbb23a918d8ab441ff

----------------------------------------
Feature #21553: Remove opt_aref_with and opt_aset_with instructions
https://bugs.ruby-lang.org/issues/21553#change-114394

* Author: tenderlovemaking (Aaron Patterson)
* Status: Closed
----------------------------------------
Hi,

I'd like to remove the `opt_aref_with` and `opt_aset_with` instructions.  I think they are fairly rare these days.  Removing them will simplify the YARV compiler, the JIT compilers, and fix an issue with warnings.

For background, these instructions are used with code like `foo["bar"]`, but only when the string literal isn't frozen:

```
> ./miniruby --dump=insns -e'foo["bar"]'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,10)>
0000 putself                                                          (   1)[Li]
0001 opt_send_without_block                 <calldata!mid:foo, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0003 opt_aref_with                          "bar", <calldata!mid:[], argc:1, ARGS_SIMPLE>
0006 leave
```

Enabling frozen string literals will use `putobject` with `opt_aref`:

```
> ./miniruby --dump=insns --enable=frozen-string-literal  -e'foo["bar"]'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,10)>
0000 putself                                                          (   1)[Li]
0001 opt_send_without_block                 <calldata!mid:foo, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0003 putobject                              "bar"
0005 opt_aref                               <calldata!mid:[], argc:1, ARGS_SIMPLE>[CcCr]
0007 leave
```

The optimization avoids duping the string if the receiver happens to be a hash.  I tested this with YJIT benchmarks and didn't see any impact.  To be sure, I checked the lobsters benchmark to find uses of this instruction, and I found it was only used 4 times during any particular request which explained why removing the instruction didn't impact runtime performance.

Also, removing these instructions fixes a bug where a "chilled string warning" won't show up.

For example:

```ruby
class Foo
  def self.[](x)= x.gsub!(/hello/, "hi")
end

Foo["hello world"]
```

I would expect to see a "chilled string" warning with this code, but no warning shows up.  Removing these instructions makes the warning show up as expected.


I sent a patch to remove the instructions here: https://github.com/ruby/ruby/pull/14336



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


In This Thread

Prev Next