Skip to content

Commit

Permalink
Try yjit benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
JacobEvelyn committed Mar 20, 2024
1 parent af17a4b commit d0f4515
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 27 deletions.
36 changes: 18 additions & 18 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
matrix:
# Due to https://github.com/actions/runner/issues/849, we have to use
# quotes for '3.0' -- without quotes, CI sees '3' and runs the latest.
ruby: [2.4, 2.5, 2.6, 2.7, '3.0', 3.1, 3.2, jruby, truffleruby-head]
ruby: [2.4, 2.5, 2.6, 2.7, '3.0', 3.1, 3.2, 3.3, jruby, truffleruby-head]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -24,7 +24,7 @@ jobs:
- name: Set bundler environment variables
run: |
echo "BUNDLE_WITH=checks:docs" >> $GITHUB_ENV
if: matrix.ruby == 3.2
if: matrix.ruby == 3.3

# Use 'bundler-cache: true' instead of actions/cache as advised:
# * https://github.com/actions/cache/blob/main/examples.md#ruby---bundler
Expand All @@ -33,25 +33,25 @@ jobs:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true

- run: bundle exec rspec
# - run: bundle exec rspec

- uses: codecov/codecov-action@v3
with:
files: ./coverage/coverage.xml
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
if: matrix.ruby == 3.2
# - uses: codecov/codecov-action@v3
# with:
# files: ./coverage/coverage.xml
# fail_ci_if_error: true # optional (default = false)
# verbose: true # optional (default = false)
# if: matrix.ruby == 3.3

- run: bundle exec rubocop
if: matrix.ruby == 3.2
# - run: bundle exec rubocop
# if: matrix.ruby == 3.3

- run: |
bundle exec yard doctest
bundle exec dokaz
if: matrix.ruby == 3.2
# - run: |
# bundle exec yard doctest
# bundle exec dokaz
# if: matrix.ruby == 3.3

- name: Run benchmarks on Ruby 2.7 or 3.2
- name: Run benchmarks on Ruby 2.7 or 3.3
run: |
BUNDLE_GEMFILE=benchmarks/Gemfile bundle install --jobs 4 --retry 3
BUNDLE_GEMFILE=benchmarks/Gemfile bundle exec ruby benchmarks/benchmarks.rb
if: matrix.ruby == '2.7' || matrix.ruby == '3.2'
RUBY_YJIT_ENABLE=1 BUNDLE_GEMFILE=benchmarks/Gemfile bundle exec ruby benchmarks/benchmarks.rb
if: matrix.ruby == '2.7' || matrix.ruby == '3.3'
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.2.2
3.3.0
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,11 @@ For more usage details, see our detailed [documentation](#documentation).

Benchmarks are run in GitHub Actions, and the tables below are updated with every code change. **Values >1.00x represent how much _slower_ each gem’s memoized value retrieval is than the latest commit of `MemoWise`**, according to [`benchmark-ips`](https://github.com/evanphx/benchmark-ips) (2.11.0).

Results using Ruby 3.2.2:
Results using Ruby 3.3.0 (parentheses using `--yjit`):

|Method arguments|`Dry::Core`\* (1.0.1)|`Memery` (1.5.0)|
|--|--|--|
|`()` (none)|0.60x|3.58x|
|`()` (none)|0.60x (0.40x)|3.58x|
|`(a)`|1.37x|7.41x|
|`(a, b)`|1.20x|6.43x|
|`(a:)`|1.47x|13.60x|
Expand Down Expand Up @@ -180,7 +180,7 @@ versions:

We maintain API documentation using [YARD](https://yardoc.org/), which is
published automatically at
[RubyDoc.info](https://rubydoc.info/gems/memo_wise).
[RubyDoc.info](https://rubydoc.info/gems/memo_wise).

To generate documentation locally or run documentation tests,
first install the `docs` dependencies (e.g. `yard`) as follows:
Expand Down
10 changes: 5 additions & 5 deletions lib/memo_wise.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ module MemoWise
# [calling the original](https://medium.com/@jeremy_96642/ruby-method-auditing-using-module-prepend-4f4e69aacd95)
# constructor.
#
# - **Q:** Why is [Module#prepend](https://ruby-doc.org/3.2.2/Module.html#method-i-prepend)
# - **Q:** Why is [Module#prepend](https://ruby-doc.org/3.3.0/Module.html#method-i-prepend)
# important here
# ([more info](https://medium.com/@leo_hetsch/ruby-modules-include-vs-prepend-vs-extend-f09837a5b073))?
# - **A:** To set up *mutable state* inside the instance, even if the original
# constructor will then call
# [Object#freeze](https://ruby-doc.org/3.2.2/Object.html#method-i-freeze).
# [Object#freeze](https://ruby-doc.org/3.3.0/Object.html#method-i-freeze).
#
# This approach supports memoization on frozen (immutable) objects -- for
# example, classes created by the
Expand Down Expand Up @@ -101,7 +101,7 @@ def inherited(subclass)
# @param target [Class]
# The `Class` into to prepend the MemoWise methods e.g. `memo_wise`
#
# @see https://ruby-doc.org/3.2.2/Module.html#method-i-prepend
# @see https://ruby-doc.org/3.3.0/Module.html#method-i-prepend
#
# @example
# class Example
Expand All @@ -116,7 +116,7 @@ class << target
#
# This is necessary in addition to the `#initialize` method definition
# above because
# [`Class#allocate`](https://ruby-doc.org/3.2.2/Class.html#method-i-allocate)
# [`Class#allocate`](https://ruby-doc.org/3.3.0/Class.html#method-i-allocate)
# bypasses `#initialize`, and when it's used (e.g.,
# [in ActiveRecord](https://github.com/rails/rails/blob/a395c3a6af1e079740e7a28994d77c8baadd2a9d/activerecord/lib/active_record/persistence.rb#L411))
# we still need to be able to access MemoWise's instance variable. Despite
Expand Down Expand Up @@ -268,7 +268,7 @@ def #{method_name}(#{MemoWise::InternalAPI.args_str(method)})
)
end

# Override [Module#instance_method](https://ruby-doc.org/3.2.2/Module.html#method-i-instance_method)
# Override [Module#instance_method](https://ruby-doc.org/3.3.0/Module.html#method-i-instance_method)
# to proxy the original `UnboundMethod#parameters` results. We want the
# parameters to reflect the original method in order to support callers
# who want to use Ruby reflection to process the method parameters,
Expand Down

0 comments on commit d0f4515

Please sign in to comment.