Issue #16837 has been updated by shyouhei (Shyouhei Urabe).


nobu (Nobuyoshi Nakada) wrote in #note-10:
> As `str` is an argument variable and `RUBY3_CONSTANT_P(str)` is always false here,

Well, thank you pointing this out.  As I wrote in `include/ruby/3/constant_p.h`, you can apply `__builtin_constant_p` to an inline function argument.  I thought that `RUBY3_CONSTANT_P(str)` is not always false.  However https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html says:

> You may use this built-in function in either a macro or an inline function. However, if you use it in an inlined function and pass an argument of the function as the argument to the built-in, GCC never returns 1 when you call the inline function with a string constant or ...

In this `ruby3_str_new_cstr()`'s particular case, the argument is a string.  There is no chance.  This is in fact wrong.  We have to fix.

----------------------------------------
Feature #16837: Can we make Ruby 3.0 as fast as Ruby 2.7 with the new assertions?
https://bugs.ruby-lang.org/issues/16837#change-85453

* Author: k0kubun (Takashi Kokubun)
* Status: Open
* Priority: Normal
----------------------------------------
## Problem
How can we make Ruby 3.0 as fast as (or faster than) Ruby 2.7?

### Background
* Split ruby.h https://github.com/ruby/ruby/pull/2991 added some new assertions
* While it has been helpful for revealing various bugs, it also made some Ruby programs notably slow, especially Optcarrot https://benchmark-driver.github.io/benchmarks/optcarrot/commits.html

## Possible approaches
I have no strong preference yet. Here are some random ideas:

* Optimize the assertion code somehow
* Enable the new assertions only on CIs, at least ones in hot spots
  * Not sure which places have large impact on Optcarrot yet
* Make some other not-so-important assertions CI-only to offset the impact from new ones
* Provide .so for an assertion-enabled mode? (ko1's idea)

I hope people will comment more ideas in this ticket.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>