summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-10-28ZJIT: Print percentage of GuardType failureMax Bernstein
2025-10-28ZJIT: Count GuardType instructionsMax Bernstein
We can measure how many we can remove by adding type information to C functions, etc.
2025-10-28ZJIT: Split frame_setup_teardown testsTakashi Kokubun
2025-10-28ZJIT: Move c_stack_slots to AssemblerTakashi Kokubun
2025-10-28ZJIT: Simplify Assembler constructorsTakashi Kokubun
2025-10-28ZJIT: Stop computing offset on gen_push_opndsTakashi Kokubun
Once we add register spill, the C stack will have not only spilled basic block params but also spilled VRegs. We won't know how many stack slots are used for spilled VRegs until alloc_regs, so you can't compute an offset as of writing LIR.
2025-10-28ZJIT: Allow ALLOC_REGS to have an odd number of regsTakashi Kokubun
2025-10-28ZJIT: Print unexpected operands on x86_64Takashi Kokubun
2025-10-28ZJIT: Call test again after profiling itTakashi Kokubun
It's a call_threshold: 2 test https://github.com/ruby/ruby/pull/14933#discussion_r2469731499
2025-10-28ZJIT: Specialize Array#pop for no argument case (#14933)Aiden Fox Ivey
Fixes https://github.com/Shopify/ruby/issues/814 This change specializes the case of calling `Array#pop` on a non frozen array with no arguments. `Array#pop` exists in the non-inlined C function list in the ZJIT SFR performance burndown list. If in the future it is helpful, this patch could be extended to support the case where an argument is provided, but this initial work seeks to elide the ruby frame normally pushed in the case of `Array#pop` without an argument.
2025-10-28ZJIT: Add IsBitNotEqual and inline BasicObject#!=Max Bernstein
2025-10-28ZJIT: Optimize Kernel#===Max Bernstein
2025-10-28ZJIT: Add BoxBool and remove CCall from BasicObject#==Max Bernstein
2025-10-28ZJIT: Use FnProperties::default()Max Bernstein
2025-10-28ZJIT: Allow both inlining and annotating propertiesMax Bernstein
2025-10-28ZJIT: Remove redundant annotationMax Bernstein
2025-10-28ZJIT: Inline Kernel#nil? and NilClass#nil?Max Bernstein
We can fully remove the CCall now.
2025-10-28Restore old version of Gem::Installer#install for default gems installationHiroshi SHIBATA
2025-10-28[ruby/rubygems] Simulate default gems manuallyHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/c3cc38c72c
2025-10-28[ruby/rubygems] Introduce default_spec_dir when it's not providedHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/e9bd59699c
2025-10-28[ruby/rubygems] Removed default bundler spec from specification directoryHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/6fbbde48e2
2025-10-28[ruby/rubygems] Added install_default_gem method for testingHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/81dbd42abf
2025-10-28[ruby/rubygems] Completely removed install_as_default featureHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/15e46a3a68
2025-10-28[ruby/rubygems] Deprecate --default optionHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/55745ee0f8
2025-10-28[ruby/rubygems] Make more shortly with https://rubyonrails.org/conductHiroshi SHIBATA
https://github.com/ruby/rubygems/commit/62ba34d6c9
2025-10-28[ruby/rubygems] Update new gem CoC and promptdysonreturns
Prompt wording "prefer safe, respectful, productive, and collaborative spaces" is copied verbatim from Ruby Community Conduct Guideline. https://github.com/ruby/rubygems/commit/6cdf5f6d8a
2025-10-28[ruby/json] Use Vector API in the Java ExtensionScott Myron
Overview This PR uses the [jdk.incubator.vector module](https://docs.oracle.com/en/java/javase/20/docs/api/jdk.incubator.vector/jdk/incubator/vector/package-summary.html) as mentioned in [issue #739](https://github.com/ruby/json/issues/739) to accelerate generating JSON with the same algorithm as the C extension. The PR as it exists right now, it will attempt to build the `json.ext.VectorizedEscapeScanner` class with a target release of `16`. This is the first version of Java with support for the `jdk.incubator.vector` module. The remaining code is built for Java 1.8. The code will attempt to load the `json.ext.VectorizedEscapeScanner` only if the `json.enableVectorizedEscapeScanner` system property is set to `true` (or `1`). I'm not entirely sure how this is packaged / included with JRuby so I'd love @byroot and @headius's (and others?) thought about how to potential package and/or structure the JARs. I did consider adding the `json.ext.VectorizedEscapeScanner` to a separate `generator-vectorized.jar` but I thought I'd solicit feedback before spending any more time on the build / package process. Benchmarks Machine M1 Macbook Air Note: I've had trouble modifying the `compare.rb` I was using for the C extension to work reliability with the Java extension. I'll probably spend more time trying to get it to work, but as of right now these are pretty raw benchmarks. Below are two sample runs of the real-world benchmarks. The benchmarks are much more variable then the C extension for some reason. I'm not sure if HotSpot is doing something slightly different per execution. Vector API Enabled ``` scott@Scotts-MacBook-Air json % ONLY=json JAVA_OPTS='--add-modules jdk.incubator.vector -Djson.enableVectorizedEscapeScanner=true' ruby -I"lib" benchmark/encoder-realworld.rb WARNING: Using incubator modules: jdk.incubator.vector == Encoding activitypub.json (52595 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 1.384k i/100ms Calculating ------------------------------------- json 15.289k (± 0.8%) i/s (65.41 μs/i) - 153.624k in 10.048481s == Encoding citm_catalog.json (500298 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 76.000 i/100ms Calculating ------------------------------------- json 753.787 (± 3.6%) i/s (1.33 ms/i) - 7.524k in 9.997059s == Encoding twitter.json (466906 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 173.000 i/100ms Calculating ------------------------------------- json 1.751k (± 1.1%) i/s (571.24 μs/i) - 17.646k in 10.081260s == Encoding ohai.json (20147 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 2.390k i/100ms Calculating ------------------------------------- json 23.829k (± 0.8%) i/s (41.97 μs/i) - 239.000k in 10.030503s ``` Vector API Disabled ``` scott@Scotts-MacBook-Air json % ONLY=json JAVA_OPTS='--add-modules jdk.incubator.vector -Djson.enableVectorizedEscapeScanner=false' ruby -I"lib" benchmark/encoder-realworld.rb WARNING: Using incubator modules: jdk.incubator.vector VectorizedEscapeScanner disabled. == Encoding activitypub.json (52595 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 1.204k i/100ms Calculating ------------------------------------- json 12.937k (± 1.1%) i/s (77.30 μs/i) - 130.032k in 10.052234s == Encoding citm_catalog.json (500298 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 80.000 i/100ms Calculating ------------------------------------- json 817.378 (± 1.0%) i/s (1.22 ms/i) - 8.240k in 10.082058s == Encoding twitter.json (466906 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 147.000 i/100ms Calculating ------------------------------------- json 1.499k (± 1.3%) i/s (667.08 μs/i) - 14.994k in 10.004181s == Encoding ohai.json (20147 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 2.269k i/100ms Calculating ------------------------------------- json 22.366k (± 5.7%) i/s (44.71 μs/i) - 224.631k in 10.097069s ``` `master` as of commit `https://github.com/ruby/json/commit/c5af1b68c582` ``` scott@Scotts-MacBook-Air json % ONLY=json ruby -I"lib" benchmark/encoder-realworld.rb == Encoding activitypub.json (52595 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 886.000 i/100ms Calculating ------------------------------------- json^C% scott@Scotts-MacBook-Air json % ONLY=json ruby -I"lib" benchmark/encoder-realworld.rb == Encoding activitypub.json (52595 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 1.031k i/100ms Calculating ------------------------------------- json 10.812k (± 1.3%) i/s (92.49 μs/i) - 108.255k in 10.014260s == Encoding citm_catalog.json (500298 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 82.000 i/100ms Calculating ------------------------------------- json 824.921 (± 1.0%) i/s (1.21 ms/i) - 8.282k in 10.040787s == Encoding twitter.json (466906 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 141.000 i/100ms Calculating ------------------------------------- json 1.421k (± 0.7%) i/s (703.85 μs/i) - 14.241k in 10.023979s == Encoding ohai.json (20147 bytes) jruby 9.4.12.0 (3.1.4) 2025-02-11 https://github.com/ruby/json/commit/f4ab75096a Java HotSpot(TM) 64-Bit Server VM 21.0.7+8-LTS-245 on 21.0.7+8-LTS-245 +jit [arm64-darwin] Warming up -------------------------------------- json 2.274k i/100ms Calculating ------------------------------------- json 22.612k (± 0.9%) i/s (44.22 μs/i) - 227.400k in 10.057516s ``` Observations `activitypub.json` and `twitter.json` seem to be consistently faster with the Vector API enabled. `citm_catalog.json` seems consistently a bit slower and `ohai.json` is fairly close to even. https://github.com/ruby/json/commit/d40b2703a8
2025-10-28sync_default_gems.rb: Show `git diff` on failed syncTakashi Kokubun
2025-10-28[DOC] Moved non ASCII documents to separated filesNobuyoshi Nakada
C99 does not declare ways to designate the charset encoding of the source file. We can assume just US-ASCII characters will be safe.
2025-10-28[ruby/stringio] [DOC] Doc for StringIO#each_byteBurdette Lamar
(https://github.com/ruby/stringio/pull/157) https://github.com/ruby/stringio/commit/624ce56b4e Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
2025-10-28Update default gems list at b3191d204b8b4fe4b29cf73cd09a1b [ci skip]git
2025-10-28[ruby/erb] Version 5.1.3Takashi Kokubun
https://github.com/ruby/erb/commit/e8d382a83e
2025-10-28Update default gems list at f7eee3427dcc8b644b9fd6c854f3e1 [ci skip]git
2025-10-28[ruby/erb] Version 5.1.2Takashi Kokubun
https://github.com/ruby/erb/commit/daa0e8712f
2025-10-28[ruby/stringio] [DOC] Doc for StringIO#each_codepointBurdette Lamar
(https://github.com/ruby/stringio/pull/159) https://github.com/ruby/stringio/commit/6628d4837b Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
2025-10-28[ruby/stringio] [DOC] Doc for StringIO#each_charBurdette Lamar
(https://github.com/ruby/stringio/pull/158) https://github.com/ruby/stringio/commit/ec6bf815ae Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
2025-10-27[DOC] Tweaks for String#swapcaseBurdetteLamar
2025-10-27[DOC] Tweaks for String#swapcase!BurdetteLamar
2025-10-27[DOC] Tweaks for String#sumBurdetteLamar
2025-10-27ZJIT: Annotate Kernel#frozen? as returning BoolExactMax Bernstein
2025-10-27ZJIT: Annotate Symbol#to_s and Symbol#name as returning StringExactMax Bernstein
2025-10-27ZJIT: Add return_type to inlined InvokeBuiltinMax Bernstein
2025-10-27ZJIT: Inline method calls to ISEQs that just do leaf Primitive callsMax Bernstein
2025-10-27ZJIT: Fix internal compiler error looking up profiles for ↵Max Bernstein
trace_getinstancevariable (#14969) We treat getinstancevariable differently from other opcodes: it does not look at the stack for its self operand, but instead looks at `cfp->self`. In some cases, we might see the `trace_` variant in the front-end, so make sure we treat that the same. Example repro: ``` def test @foo end 28.times do test end trace = TracePoint.trace(:call) do |tp| puts tp.method_id end trace.enable do 30.times do test end end ```
2025-10-27ZJIT: Print out full path to --zjit-trace-exits output (#14966)Max Bernstein
* ZJIT: Print out full path to --zjit-trace-exits output This helps with any `chdir`-related issues. * Don't include dot Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com> --------- Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
2025-10-27ZJIT: Remove unnecessary 'static annotation from gen_hir_type.rbAiden Fox Ivey
2025-10-27ZJIT: Since Param is unit struct, elide destructuringAiden Fox Ivey
2025-10-27ZJIT: Use .is_empty() for clarityAiden Fox Ivey
2025-10-27ZJIT: Use .first() in lieu of .get(0)Aiden Fox Ivey
2025-10-27ZJIT: Elide unnecessary 'static annotationAiden Fox Ivey