<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/include/ruby/backward.h, branch v4.0.2</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>Move RBIMPL_ATTR_DEPRECATED_* macros to the appropriate header file</title>
<updated>2025-12-08T02:47:39+00:00</updated>
<author>
<name>Kazuki Yamaguchi</name>
<email>k@rhe.jp</email>
</author>
<published>2025-12-07T05:51:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=be882278f22444e7d27db091bbd5f8bf63e882c2'/>
<id>be882278f22444e7d27db091bbd5f8bf63e882c2</id>
<content type='text'>
Move these macros from include/ruby/backward.h to
include/ruby/internal/attr/deprecated.h, alongside the other similar
macros.

include/ruby/internal/intern/vm.h cannot currently use them because
include/ruby/backward.h is included too late.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Move these macros from include/ruby/backward.h to
include/ruby/internal/attr/deprecated.h, alongside the other similar
macros.

include/ruby/internal/intern/vm.h cannot currently use them because
include/ruby/backward.h is included too late.
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "Finer-grained inline constant cache invalidation"</title>
<updated>2022-03-25T11:29:09+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2022-03-25T11:29:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=69967ee64eac9ce65b83533a566d69d12a6046d0'/>
<id>69967ee64eac9ce65b83533a566d69d12a6046d0</id>
<content type='text'>
This reverts commits for [Feature #18589]:
* 8008fb7352abc6fba433b99bf20763cf0d4adb38
  "Update formatting per feedback"
* 8f6eaca2e19828e92ecdb28b0fe693d606a03f96
  "Delete ID from constant cache table if it becomes empty on ISEQ free"
* 629908586b4bead1103267652f8b96b1083573a8
  "Finer-grained inline constant cache invalidation"

MSWin builds on AppVeyor have been crashing since the merger.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commits for [Feature #18589]:
* 8008fb7352abc6fba433b99bf20763cf0d4adb38
  "Update formatting per feedback"
* 8f6eaca2e19828e92ecdb28b0fe693d606a03f96
  "Delete ID from constant cache table if it becomes empty on ISEQ free"
* 629908586b4bead1103267652f8b96b1083573a8
  "Finer-grained inline constant cache invalidation"

MSWin builds on AppVeyor have been crashing since the merger.
</pre>
</div>
</content>
</entry>
<entry>
<title>Finer-grained inline constant cache invalidation</title>
<updated>2022-03-24T16:14:38+00:00</updated>
<author>
<name>Kevin Newton</name>
<email>kddnewton@gmail.com</email>
</author>
<published>2021-11-24T15:31:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=629908586b4bead1103267652f8b96b1083573a8'/>
<id>629908586b4bead1103267652f8b96b1083573a8</id>
<content type='text'>
Current behavior - caches depend on a global counter. All constant mutations cause caches to be invalidated.

```ruby
class A
  B = 1
end

def foo
  A::B # inline cache depends on global counter
end

foo # populate inline cache
foo # hit inline cache

C = 1 # global counter increments, all caches are invalidated

foo # misses inline cache due to `C = 1`
```

Proposed behavior - caches depend on name components. Only constant mutations with corresponding names will invalidate the cache.

```ruby
class A
  B = 1
end

def foo
  A::B # inline cache depends constants named "A" and "B"
end

foo # populate inline cache
foo # hit inline cache

C = 1 # caches that depend on the name "C" are invalidated

foo # hits inline cache because IC only depends on "A" and "B"
```

Examples of breaking the new cache:

```ruby
module C
  # Breaks `foo` cache because "A" constant is set and the cache in foo depends
  # on "A" and "B"
  class A; end
end

B = 1
```

We expect the new cache scheme to be invalidated less often because names aren't frequently reused. With the cache being invalidated less, we can rely on its stability more to keep our constant references fast and reduce the need to throw away generated code in YJIT.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Current behavior - caches depend on a global counter. All constant mutations cause caches to be invalidated.

```ruby
class A
  B = 1
end

def foo
  A::B # inline cache depends on global counter
end

foo # populate inline cache
foo # hit inline cache

C = 1 # global counter increments, all caches are invalidated

foo # misses inline cache due to `C = 1`
```

Proposed behavior - caches depend on name components. Only constant mutations with corresponding names will invalidate the cache.

```ruby
class A
  B = 1
end

def foo
  A::B # inline cache depends constants named "A" and "B"
end

foo # populate inline cache
foo # hit inline cache

C = 1 # caches that depend on the name "C" are invalidated

foo # hits inline cache because IC only depends on "A" and "B"
```

Examples of breaking the new cache:

```ruby
module C
  # Breaks `foo` cache because "A" constant is set and the cache in foo depends
  # on "A" and "B"
  class A; end
end

B = 1
```

We expect the new cache scheme to be invalidated less often because names aren't frequently reused. With the cache being invalidated less, we can rely on its stability more to keep our constant references fast and reduce the need to throw away generated code in YJIT.
</pre>
</div>
</content>
</entry>
<entry>
<title>Mark `rb_clear_constant_cache` as internal use only</title>
<updated>2022-01-20T04:54:37+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2022-01-13T02:48:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=59a91f229b17d9664df6ff78d7aa4e13a88cdb63'/>
<id>59a91f229b17d9664df6ff78d7aa4e13a88cdb63</id>
<content type='text'>
In the past, many internal functions are declared in intern.h
under include/ruby directory, because there were no headers for
internal use.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In the past, many internal functions are declared in intern.h
under include/ruby directory, because there were no headers for
internal use.
</pre>
</div>
</content>
</entry>
<entry>
<title>Flush deprecation declarations for versions older than 3.0</title>
<updated>2021-12-30T09:52:04+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2021-12-30T09:52:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=8727161fcf51a3d9157755f410fc3af68bcd29f0'/>
<id>8727161fcf51a3d9157755f410fc3af68bcd29f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>include/ruby/backward.h: skip doxygen</title>
<updated>2021-09-10T11:00:06+00:00</updated>
<author>
<name>卜部昌平</name>
<email>shyouhei@ruby-lang.org</email>
</author>
<published>2021-09-08T08:02:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4702b59f2151b5d32a1b799a9580ea0870c886d4'/>
<id>4702b59f2151b5d32a1b799a9580ea0870c886d4</id>
<content type='text'>
There is nothing interesting here. [ci skip]
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is nothing interesting here. [ci skip]
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed missing NORETURN on rb_mod_const_missing</title>
<updated>2020-12-31T03:30:13+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2020-12-31T03:30:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=62450e0acf844510808f18d219aaf7da936b5b58'/>
<id>62450e0acf844510808f18d219aaf7da936b5b58</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Defined RBIMPL_ATTR_DEPRECATED_INTERNAL</title>
<updated>2020-12-31T03:23:29+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2020-12-31T03:23:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4b4dc0fac7a8145396fe1c1693edbbcbf5ab2c2b'/>
<id>4b4dc0fac7a8145396fe1c1693edbbcbf5ab2c2b</id>
<content type='text'>
Get rid of duplicate attributes, which may be warned or ignored
except for the first.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Get rid of duplicate attributes, which may be warned or ignored
except for the first.
</pre>
</div>
</content>
</entry>
<entry>
<title>Replaced deprecation macros</title>
<updated>2020-12-30T14:11:09+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2020-12-30T11:56:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=0284e7ca62e55c160c84d3471e64765e612788ec'/>
<id>0284e7ca62e55c160c84d3471e64765e612788ec</id>
<content type='text'>
* DECLARE_DEPRECATED_FEATURE with RBIMPL_ATTR_DEPRECATED_SINCE
* DECLARE_DEPRECATED_INTERNAL_FEATURE with RBIMPL_ATTR_INTERNAL
And moved function declarations outside both.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* DECLARE_DEPRECATED_FEATURE with RBIMPL_ATTR_DEPRECATED_SINCE
* DECLARE_DEPRECATED_INTERNAL_FEATURE with RBIMPL_ATTR_INTERNAL
And moved function declarations outside both.
</pre>
</div>
</content>
</entry>
<entry>
<title>RUBY_SHOW_COPYRIGHT_TO_DIE: flip the default</title>
<updated>2020-08-27T06:04:00+00:00</updated>
<author>
<name>卜部昌平</name>
<email>shyouhei@ruby-lang.org</email>
</author>
<published>2020-07-22T02:30:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=1035a3b202ee86bf2b0a1d00eefcfff0d7ab9f6b'/>
<id>1035a3b202ee86bf2b0a1d00eefcfff0d7ab9f6b</id>
<content type='text'>
Commit 7aab062ef3772c7e8e50fc872a1647918c76dbba says:

&gt; ruby_show_version() will no longer exits the process, if
&gt; RUBY_SHOW_COPYRIGHT_TO_DIE is set to 0.  This will be the default in
&gt; the future.

3.0 is a good timing for that "future".
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 7aab062ef3772c7e8e50fc872a1647918c76dbba says:

&gt; ruby_show_version() will no longer exits the process, if
&gt; RUBY_SHOW_COPYRIGHT_TO_DIE is set to 0.  This will be the default in
&gt; the future.

3.0 is a good timing for that "future".
</pre>
</div>
</content>
</entry>
</feed>
