
Issue #20604 has been updated by shyouhei (Shyouhei Urabe). Status changed from Open to Rejected This is NG. Some OSes (if I remember correctly it was Arch when we found this) ship clang and g++ combination. They happen to have -O3 in common but not everything. It was a wrong idea first place for us to share $optflags. There's nothing we can do here. Please specify $CXXFLAGS individually. ---------------------------------------- Bug #20604: Performance regression in C++ extensions due to lack of optimization flags by default since Ruby 2.7 https://bugs.ruby-lang.org/issues/20604#change-109099 * Author: ntkme (Natsuki Natsume) * Status: Rejected * ruby -v: ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I found a significant performance regression in `sassc` gem when comparing Ruby 2.6 and later, that the extension is running more than 10x slower. I have tracked it down to this commit: https://github.com/ruby/ruby/commit/733aa2f8b578d03bbcb91d2f496b01e3b990c7e8 This commit removed all default CXXFLAGS from RbConfig that were previously set, including `$optflags`, which has `-O3`. Many of the C++ extensions like sassc use extconf/mkmf to compile, and they have assumed optflags are already set for CXXFLAGS. Without `-O3` as part of the default, the extensions are compiled without any optimizations and thus become extremely slow. It is difficult for a regular user to find out the reason of the slowness, nor to say figuring out how to override CXXFLAGS for a native extension. I'm not sure what was the reason of the change, but I think we should at least set `$optflags` in CXXFLAGS by default. -- https://bugs.ruby-lang.org/