summaryrefslogtreecommitdiff
path: root/ruby_parser.c
diff options
authorJean Boussier <[email protected]>2024-04-08 12:04:01 +0200
committerJean Boussier <[email protected]>2024-05-28 07:32:41 +0200
commit9e9f1d9301b05604d475573ddd18d6bf5185466c (patch)
treef21078b5fee9ad5afc2f25d3f1b625f5468e3687 /ruby_parser.c
parent1376881e9afe6ff673f64afa791cf30f57147ee2 (diff)
Precompute embedded string literals hash code
With embedded strings we often have some space left in the slot, which we can use to store the string Hash code. It's probably only worth it for string literals, as they are the ones likely to be used as hash keys. We chose to store the Hash code right after the string terminator as to make it easy/fast to compute, and not require one more union in RString. ``` compare-ruby: ruby 3.4.0dev (2024-04-22T06:32:21Z main f77618c1fa) [arm64-darwin23] built-ruby: ruby 3.4.0dev (2024-04-22T10:13:03Z interned-string-ha.. 8a1a32331b) [arm64-darwin23] last_commit=Precompute embedded string literals hash code | |compare-ruby|built-ruby| |:-----------|-----------:|---------:| |symbol | 39.275M| 39.753M| | | -| 1.01x| |dyn_symbol | 37.348M| 37.704M| | | -| 1.01x| |small_lit | 29.514M| 33.948M| | | -| 1.15x| |frozen_lit | 27.180M| 33.056M| | | -| 1.22x| |iseq_lit | 27.391M| 32.242M| | | -| 1.18x| ``` Co-Authored-By: Étienne Barrié <[email protected]>
Diffstat (limited to 'ruby_parser.c')
-rw-r--r--ruby_parser.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/ruby_parser.c b/ruby_parser.c
index 1dcdfd8e79..98541fc597 100644
--- a/ruby_parser.c
+++ b/ruby_parser.c
@@ -921,7 +921,7 @@ rb_parser_build_script_lines_from(rb_parser_ary_t *lines)
VALUE
rb_str_new_parser_string(rb_parser_string_t *str)
{
- VALUE string = rb_enc_interned_str(str->ptr, str->len, str->enc);
+ VALUE string = rb_enc_literal_str(str->ptr, str->len, str->enc);
rb_enc_str_coderange(string);
return string;
}