Skip to content
  • Jean Boussier's avatar
    9e9f1d93
    Precompute embedded string literals hash code · 9e9f1d93
    Jean Boussier authored
    
    
    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 f77618c1) [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: default avatarÉtienne Barrié <etienne.barrie@gmail.com>
    9e9f1d93
    Precompute embedded string literals hash code
    Jean Boussier authored
    
    
    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 f77618c1) [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: default avatarÉtienne Barrié <etienne.barrie@gmail.com>
Loading