From add2486165b4b94c8122f264fa0184ac877550c8 Mon Sep 17 00:00:00 2001 From: Max Bernstein Date: Tue, 15 Sep 2026 16:53:57 -0400 Subject: [PATCH 1/2] Add struct new micro benchmark Benchmark allocating, writing, and reading fields --- benchmarks.yml | 4 ++++ benchmarks/struct-new-no-escape.rb | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 benchmarks/struct-new-no-escape.rb diff --git a/benchmarks.yml b/benchmarks.yml index bc13b841..e6749e7b 100644 --- a/benchmarks.yml +++ b/benchmarks.yml @@ -256,6 +256,10 @@ str_concat: category: micro single_file: true ractor: true +struct-new-no-escape: + desc: instantiate new struct objects with fields in a loop to test allocation and escape analysis performance + category: micro + single_file: true structaref: desc: structaref tests the performance of getting Struct members category: micro diff --git a/benchmarks/struct-new-no-escape.rb b/benchmarks/struct-new-no-escape.rb new file mode 100644 index 00000000..baf6f891 --- /dev/null +++ b/benchmarks/struct-new-no-escape.rb @@ -0,0 +1,17 @@ +require_relative '../harness/loader' + +Point = Struct.new(:x, :y) + +def test + p = Point.new(1, 2) + p.x + p.y +end + +run_benchmark(100) do + i = 0 + while i < 1_000_000 + test + i += 1 + end +end + From a537b9abb1abcb1b5f335c7bdbbcab6bb142d17a Mon Sep 17 00:00:00 2001 From: Max Bernstein Date: Tue, 15 Sep 2026 17:42:25 -0400 Subject: [PATCH 2/2] Update benchmarks/struct-new-no-escape.rb Co-authored-by: Takashi Kokubun --- benchmarks/struct-new-no-escape.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/struct-new-no-escape.rb b/benchmarks/struct-new-no-escape.rb index baf6f891..1a45269f 100644 --- a/benchmarks/struct-new-no-escape.rb +++ b/benchmarks/struct-new-no-escape.rb @@ -14,4 +14,3 @@ def test i += 1 end end -