Skip to content

Conversation

@srenatus
Copy link
Contributor

Haven't found the benchmark where this changes things. But it looks worthwhile, avoiding a bunch of allocs.

@srenatus
Copy link
Contributor Author

I'm on battery right now, will check the benchmarks when back at my plug.

@netlify
Copy link

netlify bot commented Dec 17, 2025

Deploy Preview for openpolicyagent ready!

Name Link
🔨 Latest commit 52df2d1
🔍 Latest deploy log https://app.netlify.com/projects/openpolicyagent/deploys/694286e17748c2000887b74c
😎 Deploy Preview https://deploy-preview-8135--openpolicyagent.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

StringTerm("/𝄞"),
),
},
},
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had believed for a moment that we could use strconv.Unquote, but these are some characters where this differs from the JSON unescaping. So, added a case just to be explicit.

@srenatus
Copy link
Contributor Author

goos: darwin
goarch: arm64
pkg: github.com/open-policy-agent/opa/v1/ast
cpu: Apple M4 Max
                                                             │ ../main.bench │             ../osx.bench             │
                                                             │    sec/op     │    sec/op      vs base               │
CapabilitiesCurrentVersion-16                                   5.251µ ±  1%    5.029µ ±  2%   -4.22% (p=0.002 n=6)
RewriteDynamics/1-16                                            65.73n ±  1%    63.61n ±  1%   -3.23% (p=0.002 n=6)
RewriteDynamics/10-16                                           657.2n ±  8%    633.4n ±  0%   -3.62% (p=0.002 n=6)
RewriteDynamics/100-16                                          7.742µ ±  1%    7.628µ ±  1%   -1.47% (p=0.002 n=6)
RewriteDynamics/1000-16                                         77.05µ ±  2%    75.14µ ±  1%   -2.48% (p=0.002 n=6)
RewriteDynamics/10000-16                                        777.7µ ±  2%    757.0µ ±  1%   -2.66% (p=0.002 n=6)
RewriteDynamics/100000-16                                       11.46m ±  6%    11.15m ±  7%   -2.67% (p=0.041 n=6)
GenerateLocalVar-16                                             19.73n ±  1%    19.11n ±  0%   -3.19% (p=0.002 n=6)
ParseModuleRulesBase/1-16                                       9.606µ ±  2%    9.078µ ±  0%   -5.50% (p=0.002 n=6)
ParseModuleRulesBase/10-16                                      33.96µ ±  2%    32.54µ ±  1%   -4.18% (p=0.002 n=6)
ParseModuleRulesBase/100-16                                     284.4µ ±  1%    274.6µ ±  1%   -3.45% (p=0.002 n=6)
ParseModuleRulesBase/1000-16                                    3.657m ±  1%    3.603m ±  0%   -1.48% (p=0.004 n=6)
ParseStatementBasicCall-16                                      7.775µ ±  5%    7.279µ ±  0%   -6.38% (p=0.002 n=6)
ParseStatementMixedJSON-16                                      52.21µ ±  3%    39.94µ ±  0%  -23.50% (p=0.002 n=6)
ParseStatementSimpleArray/1-16                                  7.487µ ±  1%    6.996µ ±  0%   -6.56% (p=0.002 n=6)
ParseStatementSimpleArray/10-16                                10.885µ ±  1%    9.271µ ±  0%  -14.83% (p=0.002 n=6)
ParseStatementSimpleArray/100-16                                43.45µ ±  1%    31.35µ ±  0%  -27.85% (p=0.002 n=6)
ParseStatementSimpleArray/1000-16                               398.7µ ±  2%    263.7µ ±  3%  -33.85% (p=0.002 n=6)
ParseStatementNestedObjects/1x1-16                              7.925µ ±  2%    7.348µ ±  0%   -7.28% (p=0.002 n=6)
ParseStatementNestedObjects/5x1-16                             10.850µ ±  0%    9.431µ ±  0%  -13.08% (p=0.002 n=6)
ParseStatementNestedObjects/10x1-16                             14.55µ ±  1%    11.92µ ±  0%  -18.12% (p=0.002 n=6)
ParseStatementNestedObjects/1x5-16                             11.166µ ±  3%    9.775µ ±  0%  -12.46% (p=0.002 n=6)
ParseStatementNestedObjects/1x10-16                             14.65µ ±  4%    12.79µ ±  3%  -12.73% (p=0.002 n=6)
ParseStatementNestedObjects/5x5-16                              3.679m ±  1%    2.767m ±  0%  -24.79% (p=0.002 n=6)
ParseSome-16                                                    7.716µ ±  2%    7.217µ ±  0%   -6.47% (p=0.002 n=6)
ParseEvery-16                                                   9.339µ ±  3%    8.706µ ±  1%   -6.77% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-10-16                      10.072µ ±  0%    9.637µ ±  0%   -4.32% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-50-16                       22.19µ ±  2%    21.01µ ±  0%   -5.31% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-100-16                      37.21µ ±  3%    35.82µ ±  0%   -3.73% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-500-16                      176.6µ ±  1%    172.1µ ±  1%   -2.54% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-2500-16                     1.564m ±  3%    1.520m ±  1%   -2.84% (p=0.002 n=6)
ParseDeepNesting/NestedArrays/depth-12500-16                    7.557m ±  1%    7.400m ±  0%   -2.08% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-10-16                      14.55µ ±  0%    13.31µ ±  0%   -8.53% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-50-16                      45.03µ ±  3%    39.23µ ±  1%  -12.87% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-100-16                     84.00µ ±  0%    72.49µ ±  0%  -13.70% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-500-16                     491.3µ ±  2%    424.8µ ±  2%  -13.54% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-2500-16                    3.634m ±  1%    3.197m ±  1%  -12.04% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-12500-16                   19.79m ±  3%    17.36m ±  1%  -12.27% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/1-16                          8.363µ ±  1%    8.240µ ±  0%   -1.48% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/5-16                          13.69µ ±  0%    13.51µ ±  0%   -1.32% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/10-16                         20.51µ ±  0%    20.31µ ±  0%   -0.96% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/15-16                         27.70µ ±  1%    27.49µ ±  1%   -0.75% (p=0.004 n=6)
ParseStatementNestedObjectsOrSets/20-16                         35.51µ ±  1%    35.47µ ±  0%        ~ (p=0.699 n=6)
ParseVars-16                                                    7.786µ ±  0%    7.770µ ±  0%   -0.20% (p=0.028 n=6)
ParseBasicABACModule-16                                         51.53µ ±  0%    50.43µ ±  1%   -2.12% (p=0.002 n=6)
TypeName-16                                                     27.05n ±  1%    27.36n ±  0%   +1.11% (p=0.002 n=6)
ValueName-16                                                    1.768n ±  1%    1.774n ±  0%        ~ (p=0.056 n=6)
ObjectLookup/5-16                                               8.557n ±  1%    9.103n ±  1%   +6.37% (p=0.002 n=6)
ObjectLookup/50-16                                             10.545n ± 30%    9.970n ± 28%        ~ (p=0.180 n=6)
ObjectLookup/500-16                                             11.10n ±  2%    10.73n ±  1%   -3.33% (p=0.002 n=6)
ObjectLookup/5000-16                                            10.88n ±  0%    10.53n ± 10%        ~ (p=0.063 n=6)
ObjectGet/lookup_in_empty_object-16                             1.763n ±  1%    1.774n ±  0%   +0.60% (p=0.006 n=6)
ObjectGet/existing_interned_key-16                              4.666n ±  1%    4.582n ±  0%   -1.79% (p=0.002 n=6)
ObjectGet/existing_string_key-16                                8.139n ±  1%    8.439n ±  1%   +3.68% (p=0.002 n=6)
ObjectGet/existing_int_number_key-16                            14.55n ±  4%    14.67n ±  0%        ~ (p=0.104 n=6)
ObjectGet/existing_float_number_key_as_int-16                   18.86n ±  2%    19.50n ±  1%   +3.45% (p=0.002 n=6)
ObjectGet/existing_int_number_key_as_float-16                   29.10n ±  4%    28.56n ±  1%        ~ (p=0.370 n=6)
ObjectGet/existing_float_key-16                                 30.39n ±  2%    30.13n ±  0%   -0.86% (p=0.002 n=6)
ObjectGet/missing_string_key-16                                 6.263n ±  1%    6.275n ±  1%        ~ (p=0.665 n=6)
ObjectGet/missing_int_number_key-16                             7.672n ±  1%    7.869n ±  2%   +2.56% (p=0.002 n=6)
ObjectGet/missing_float_key-16                                  17.19n ±  1%    15.66n ±  0%   -8.93% (p=0.002 n=6)
ObjectFind/5_5-16                                               16.43n ±  1%    16.10n ±  1%   -1.98% (p=0.002 n=6)
ObjectFind/5_50-16                                              17.04n ±  2%    16.82n ±  0%   -1.23% (p=0.002 n=6)
ObjectFind/5_500-16                                             17.66n ±  1%    17.36n ±  0%   -1.70% (p=0.002 n=6)
ObjectFind/5_5000-16                                            18.52n ±  2%    18.01n ±  1%   -2.75% (p=0.002 n=6)
ObjectFind/50_5-16                                              19.16n ± 16%    18.70n ±  9%        ~ (p=0.223 n=6)
ObjectFind/50_50-16                                             19.43n ±  9%    18.29n ± 11%        ~ (p=0.093 n=6)
ObjectFind/50_500-16                                            19.57n ± 14%    18.59n ± 10%        ~ (p=0.180 n=6)
ObjectFind/50_5000-16                                           20.34n ±  8%    19.13n ±  6%   -5.95% (p=0.015 n=6)
ObjectFind/500_5-16                                             19.03n ±  0%    18.50n ±  1%   -2.76% (p=0.002 n=6)
ObjectFind/500_50-16                                            20.10n ±  0%    18.94n ±  6%   -5.77% (p=0.032 n=6)
ObjectFind/500_500-16                                           20.71n ±  1%    19.53n ±  8%        ~ (p=0.063 n=6)
ObjectFind/500_5000-16                                          21.57n ±  1%    20.64n ±  2%   -4.29% (p=0.002 n=6)
ObjectFind/5000_5-16                                            19.22n ± 13%    17.89n ± 21%   -6.92% (p=0.037 n=6)
ObjectFind/5000_50-16                                           19.41n ±  1%    18.50n ± 12%        ~ (p=0.394 n=6)
ObjectFind/5000_500-16                                          19.96n ±  6%    18.81n ±  9%   -5.79% (p=0.039 n=6)
ObjectFind/5000_5000-16                                         21.77n ±  7%    19.83n ± 14%        ~ (p=0.065 n=6)
ObjectInsert/existing_key_and_value-16                          4.580µ ±  2%    4.529µ ±  2%        ~ (p=0.418 n=6)
ObjectInsert/existing_key,_new_value-16                         4.613µ ±  2%    4.569µ ±  2%        ~ (p=0.223 n=6)
ObjectInsert/new_key-16                                         3.380µ ±  2%    3.337µ ±  3%        ~ (p=0.223 n=6)
ObjectInsert/new_key,_new_value-16                              3.402µ ±  2%    3.357µ ±  3%        ~ (p=0.290 n=6)
ObjectCreationAndLookup/5-16                                    8.961n ±  1%    8.686n ±  4%   -3.06% (p=0.041 n=6)
ObjectCreationAndLookup/50-16                                   10.14n ± 10%    10.17n ±  2%        ~ (p=1.000 n=6)
ObjectCreationAndLookup/500-16                                  10.97n ±  2%    10.83n ±  1%   -1.32% (p=0.004 n=6)
ObjectCreationAndLookup/5000-16                                 10.79n ±  1%    10.46n ±  9%        ~ (p=0.065 n=6)
ObjectCreationAndLookup/50000-16                                12.72n ± 76%    10.97n ±  7%  -13.68% (p=0.009 n=6)
ObjectCreationAndLookup/500000-16                               11.21n ±  1%    11.10n ±  1%   -0.94% (p=0.006 n=6)
LazyObjectLookup/5-16                                           16.48n ±  2%    16.74n ±  2%   +1.55% (p=0.002 n=6)
LazyObjectLookup/50-16                                          16.68n ±  1%    16.79n ±  1%        ~ (p=0.102 n=6)
LazyObjectLookup/500-16                                         16.22n ±  1%    16.82n ±  1%   +3.73% (p=0.002 n=6)
LazyObjectLookup/5000-16                                        16.89n ±  2%    17.25n ±  1%   +2.13% (p=0.019 n=6)
LazyObjectFind/5_5-16                                           12.32n ±  2%    11.84n ±  1%   -3.90% (p=0.002 n=6)
LazyObjectFind/5_50-16                                          13.07n ±  1%    12.62n ±  1%   -3.44% (p=0.002 n=6)
LazyObjectFind/5_500-16                                         14.04n ±  2%    13.39n ±  1%   -4.66% (p=0.002 n=6)
LazyObjectFind/5_5000-16                                        14.38n ±  4%    14.03n ±  1%   -2.43% (p=0.004 n=6)
LazyObjectFind/50_5-16                                          12.29n ±  3%    12.04n ±  0%        ~ (p=0.056 n=6)
LazyObjectFind/50_50-16                                         13.22n ±  2%    12.80n ±  1%   -3.21% (p=0.002 n=6)
LazyObjectFind/50_500-16                                        13.87n ±  2%    13.54n ±  1%   -2.38% (p=0.002 n=6)
LazyObjectFind/50_5000-16                                       14.62n ±  1%    14.26n ±  0%   -2.43% (p=0.002 n=6)
LazyObjectFind/500_5-16                                         12.23n ±  2%    11.91n ±  1%   -2.62% (p=0.009 n=6)
LazyObjectFind/500_50-16                                        12.98n ±  1%    12.69n ±  2%   -2.27% (p=0.004 n=6)
LazyObjectFind/500_500-16                                       13.84n ±  2%    13.22n ±  1%   -4.48% (p=0.002 n=6)
LazyObjectFind/500_5000-16                                      14.29n ±  2%    14.09n ±  1%   -1.40% (p=0.002 n=6)
LazyObjectFind/5000_5-16                                        12.60n ±  1%    12.11n ±  0%   -3.85% (p=0.002 n=6)
LazyObjectFind/5000_50-16                                       13.28n ±  2%    12.91n ±  2%   -2.71% (p=0.002 n=6)
LazyObjectFind/5000_500-16                                      13.95n ±  3%    13.66n ±  1%   -2.04% (p=0.009 n=6)
LazyObjectFind/5000_5000-16                                     14.95n ±  3%    14.34n ±  2%   -4.08% (p=0.002 n=6)
SetCreationAndLookup/5-16                                       9.354n ±  2%    9.087n ±  2%   -2.85% (p=0.009 n=6)
SetCreationAndLookup/50-16                                      11.43n ±  5%    10.73n ± 22%        ~ (p=0.180 n=6)
SetCreationAndLookup/500-16                                     11.78n ±  0%    11.48n ±  1%   -2.63% (p=0.002 n=6)
SetCreationAndLookup/5000-16                                    11.22n ±  7%    10.75n ± 21%        ~ (p=0.063 n=6)
SetCreationAndLookup/50000-16                                   11.92n ± 19%    11.69n ±  3%   -1.93% (p=0.019 n=6)
SetCreationAndLookup/500000-16                                  12.25n ±  6%    11.80n ±  8%   -3.67% (p=0.039 n=6)
SetIntersection/5-16                                            224.0n ±  1%    226.1n ±  1%   +0.92% (p=0.015 n=6)
SetIntersection/50-16                                           1.787µ ±  1%    1.832µ ±  2%   +2.49% (p=0.002 n=6)
SetIntersection/500-16                                          19.25µ ±  3%    19.12µ ±  1%        ~ (p=0.093 n=6)
SetIntersection/5000-16                                         287.5µ ±  2%    281.2µ ±  0%   -2.19% (p=0.002 n=6)
SetIntersectionDifferentSize/4-16                               183.6n ±  1%    184.2n ±  1%        ~ (p=0.372 n=6)
SetIntersectionDifferentSize/50-16                              216.0n ±  2%    219.3n ±  6%   +1.53% (p=0.041 n=6)
SetIntersectionDifferentSize/500-16                             216.4n ±  1%    219.1n ±  2%   +1.29% (p=0.002 n=6)
SetIntersectionDifferentSize/5000-16                            232.7n ±  1%    236.7n ±  1%   +1.74% (p=0.002 n=6)
SetMembership/5-16                                              14.26n ±  1%    14.35n ±  0%   +0.63% (p=0.006 n=6)
SetMembership/50-16                                             14.36n ±  1%    14.64n ±  0%   +1.92% (p=0.002 n=6)
SetMembership/500-16                                            16.29n ±  1%    16.48n ±  3%        ~ (p=0.063 n=6)
SetMembership/5000-16                                           24.87n ±  7%    24.84n ±  4%        ~ (p=0.937 n=6)
TermHashing/10-16                                               2.359n ±  1%    2.347n ±  1%        ~ (p=0.937 n=6)
TermHashing/100-16                                              7.162n ±  1%    7.284n ±  1%   +1.72% (p=0.002 n=6)
TermHashing/1000-16                                             39.15n ±  0%    39.93n ±  0%   +1.99% (p=0.002 n=6)
ObjectString/5/String()-16                                      169.9n ±  0%    177.5n ±  1%   +4.44% (p=0.002 n=6)
ObjectString/5/json.Marshal-16                                  328.7n ±  0%    337.1n ±  0%   +2.57% (p=0.002 n=6)
ObjectString/50/String()-16                                     1.704µ ±  0%    1.765µ ±  1%   +3.61% (p=0.002 n=6)
ObjectString/50/json.Marshal-16                                 3.616µ ±  1%    3.662µ ±  1%   +1.26% (p=0.002 n=6)
ObjectString/500/String()-16                                    18.72µ ±  1%    19.18µ ±  2%   +2.46% (p=0.002 n=6)
ObjectString/500/json.Marshal-16                                62.52µ ±  1%    63.07µ ±  2%   +0.88% (p=0.002 n=6)
ObjectString/5000/String()-16                                   198.8µ ±  1%    208.3µ ±  3%   +4.81% (p=0.002 n=6)
ObjectString/5000/json.Marshal-16                               785.6µ ±  1%    804.6µ ±  1%   +2.42% (p=0.002 n=6)
ObjectStringInterfaces/5/String()-16                            171.4n ±  1%    181.2n ±  1%   +5.72% (p=0.002 n=6)
ObjectStringInterfaces/5/json.Marshal-16                        5.739µ ±  0%    5.915µ ±  0%   +3.06% (p=0.002 n=6)
ObjectStringInterfaces/50/String()-16                           1.719µ ±  0%    1.795µ ±  4%   +4.42% (p=0.002 n=6)
ObjectStringInterfaces/50/json.Marshal-16                       56.47µ ±  1%    58.55µ ±  3%   +3.69% (p=0.002 n=6)
ObjectStringInterfaces/500/String()-16                          18.74µ ±  1%    19.43µ ±  1%   +3.65% (p=0.002 n=6)
ObjectStringInterfaces/500/json.Marshal-16                      586.2µ ±  3%    596.7µ ±  1%        ~ (p=0.093 n=6)
ObjectStringInterfaces/5000/String()-16                         200.2µ ±  2%    205.6µ ±  3%   +2.66% (p=0.002 n=6)
ObjectStringInterfaces/5000/json.Marshal-16                     6.134m ±  2%    6.296m ±  1%   +2.64% (p=0.009 n=6)
ObjectStringInterfaces/50000/String()-16                        2.211m ±  1%    2.249m ±  4%   +1.71% (p=0.002 n=6)
ObjectStringInterfaces/50000/json.Marshal-16                    60.04m ±  1%    60.68m ±  1%   +1.06% (p=0.041 n=6)
ObjectConstruction/shuffled_keys/5-16                           499.8n ±  0%    524.4n ±  2%   +4.93% (p=0.002 n=6)
ObjectConstruction/shuffled_keys/50-16                          5.037µ ±  1%    5.083µ ±  1%   +0.92% (p=0.045 n=6)
ObjectConstruction/shuffled_keys/500-16                         61.53µ ±  2%    62.21µ ±  1%        ~ (p=0.093 n=6)
ObjectConstruction/shuffled_keys/5000-16                        729.4µ ±  2%    732.4µ ±  2%        ~ (p=0.485 n=6)
ObjectConstruction/shuffled_keys/50000-16                       8.134m ±  2%    8.129m ±  1%        ~ (p=1.000 n=6)
ObjectConstruction/shuffled_keys/500000-16                      97.10m ±  2%    96.78m ±  1%        ~ (p=0.485 n=6)
ObjectConstruction/increasing_keys/5-16                         515.5n ±  2%    513.2n ±  1%        ~ (p=0.485 n=6)
ObjectConstruction/increasing_keys/50-16                        4.936µ ±  3%    4.947µ ±  1%        ~ (p=0.485 n=6)
ObjectConstruction/increasing_keys/500-16                       59.90µ ±  1%    61.04µ ±  1%   +1.91% (p=0.002 n=6)
ObjectConstruction/increasing_keys/5000-16                      711.4µ ±  2%    701.7µ ±  2%        ~ (p=0.589 n=6)
ObjectConstruction/increasing_keys/50000-16                     7.804m ±  1%    7.967m ±  3%        ~ (p=0.093 n=6)
ObjectConstruction/increasing_keys/500000-16                    92.27m ±  2%    93.59m ±  7%   +1.42% (p=0.041 n=6)
ArrayString/5/String()-16                                       147.1n ±  2%    147.3n ±  1%        ~ (p=0.965 n=6)
ArrayString/5/json.Marshal-16                                   99.04n ±  1%   100.10n ±  0%   +1.07% (p=0.004 n=6)
ArrayString/50/String()-16                                      1.453µ ±  2%    1.462µ ±  1%        ~ (p=0.167 n=6)
ArrayString/50/json.Marshal-16                                  586.6n ±  1%    594.4n ±  2%        ~ (p=0.087 n=6)
ArrayString/500/String()-16                                     16.01µ ±  1%    16.17µ ±  3%        ~ (p=0.093 n=6)
ArrayString/500/json.Marshal-16                                 5.511µ ±  2%    5.459µ ±  1%        ~ (p=0.093 n=6)
ArrayString/5000/String()-16                                    145.6µ ±  2%    147.2µ ±  0%        ~ (p=0.093 n=6)
ArrayString/5000/json.Marshal-16                                56.18µ ±  1%    56.65µ ±  0%   +0.83% (p=0.002 n=6)
ArrayEquality/5-16                                              1.784n ±  1%    1.800n ±  1%   +0.90% (p=0.039 n=6)
ArrayEquality/50-16                                             1.786n ±  1%    1.797n ±  1%        ~ (p=0.143 n=6)
ArrayEquality/500-16                                            1.790n ±  2%    1.796n ±  1%        ~ (p=0.619 n=6)
ArrayEquality/5000-16                                           1.793n ±  1%    1.789n ±  1%        ~ (p=0.732 n=6)
SetString/5/String()-16                                         44.82n ±  1%    44.78n ±  0%        ~ (p=0.372 n=6)
SetString/50/String()-16                                        337.2n ±  1%    341.8n ±  0%   +1.35% (p=0.002 n=6)
SetString/500/String()-16                                       3.292µ ±  2%    3.336µ ±  4%        ~ (p=0.093 n=6)
SetString/5000/String()-16                                      37.80µ ±  2%    38.91µ ±  3%   +2.91% (p=0.002 n=6)
SetString/50000/String()-16                                     370.4µ ±  1%    372.4µ ±  0%   +0.54% (p=0.041 n=6)
SetMarshalJSON/5/json.Marshal-16                                2.761µ ±  5%    2.731µ ±  1%   -1.09% (p=0.026 n=6)
SetMarshalJSON/50/json.Marshal-16                               26.21µ ±  2%    26.13µ ±  1%   -0.30% (p=0.009 n=6)
SetMarshalJSON/500/json.Marshal-16                              263.0µ ±  1%    266.2µ ±  2%        ~ (p=0.065 n=6)
SetMarshalJSON/5000/json.Marshal-16                             2.736m ±  2%    2.739m ±  1%        ~ (p=0.699 n=6)
SetMarshalJSON/50000/json.Marshal-16                            26.70m ±  1%    26.55m ±  1%        ~ (p=0.180 n=6)
IsVarCompatibleString/#00-16                                    2.266n ±  0%    2.274n ±  0%   +0.35% (p=0.026 n=6)
IsVarCompatibleString/5heel-16                                  18.39n ±  2%    18.54n ±  1%        ~ (p=0.093 n=6)
IsVarCompatibleString/h\x00llo-16                               25.06n ±  1%    25.25n ±  1%   +0.76% (p=0.017 n=6)
IsVarCompatibleString/h_llo-16                                  25.07n ±  0%    25.57n ±  1%   +2.01% (p=0.002 n=6)
IsVarCompatibleString/h_llo#01-16                               25.02n ±  1%    25.46n ±  0%   +1.78% (p=0.002 n=6)
IsVarCompatibleString/h"llo-16                                  24.95n ±  1%    25.52n ±  1%   +2.33% (p=0.002 n=6)
IsVarCompatibleString/h\llo-16                                  25.93n ±  1%    25.89n ±  2%        ~ (p=0.699 n=6)
IsVarCompatibleString/hello-16                                  62.04n ±  1%    62.13n ±  2%        ~ (p=0.288 n=6)
RefString/dot_builtin-16                                        23.36n ±  1%    22.51n ±  1%   -3.64% (p=0.002 n=6)
RefString/really_long-16                                        710.9n ±  1%    681.9n ±  1%   -4.07% (p=0.002 n=6)
RefString/scalars_ref-16                                        376.4n ±  0%    368.8n ±  1%   -2.03% (p=0.002 n=6)
RefString/simple_ref-16                                         197.2n ±  1%    188.7n ±  1%   -4.33% (p=0.002 n=6)
RefString/var_term-16                                           2.681n ±  2%    2.578n ±  3%   -3.86% (p=0.015 n=6)
RefString/with_escape-16                                        184.2n ±  3%    183.9n ±  3%        ~ (p=0.818 n=6)
InterfaceToValueInt/interned_int_value-16                       3.504n ±  0%    3.505n ±  1%        ~ (p=0.788 n=6)
InterfaceToValueInt/non-interned_int_value-16                   25.02n ±  2%    24.80n ±  1%        ~ (p=0.418 n=6)
VarVisitorWalkAnyVsSpecific/Walk-16                             32.85n ±  3%    32.88n ±  5%        ~ (p=0.509 n=6)
VarVisitorWalkAnyVsSpecific/WalkBody-16                         18.50n ±  2%    18.00n ±  2%   -2.68% (p=0.041 n=6)
VarSetUpdateEmpty-16                                            75.93n ±  2%    76.92n ±  4%        ~ (p=0.132 n=6)
GenericVisitorWalkVsTypeVisitor/GenericVisitor-16               780.4n ±  1%    809.8n ±  2%   +3.77% (p=0.002 n=6)
GenericVisitorWalkVsTypeVisitor/TypeVisitor_term-16             474.9n ± 30%    521.8n ±  2%        ~ (p=0.065 n=6)
GenericVisitorWalkVsTypeVisitor/TypeVisitor_via_WalkRules-16    13.46n ±  3%    13.60n ±  3%        ~ (p=0.937 n=6)
InterningAccessValue/package_var_value-16                       10.30n ±  1%    10.13n ±  1%   -1.60% (p=0.002 n=6)
InterningAccessValue/interned_value-16                          6.036n ±  0%    6.112n ±  1%   +1.25% (p=0.002 n=6)
InterningAccessValue/object_value-16                            5.602n ±  2%    5.538n ±  1%        ~ (p=0.310 n=6)
InterningAccessValue/new_value-16                               1.617n ±  3%    1.623n ±  7%        ~ (p=0.563 n=6)
FromBuiltinNames/single_part-16                                 5.591n ±  1%    5.576n ±  1%        ~ (p=0.065 n=6)
FromBuiltinNames/two_parts-16                                   48.91n ±  1%    12.02n ±  0%  -75.41% (p=0.002 n=6)
FromBuiltinNames/three_parts-16                                 21.60n ±  1%    20.77n ±  1%   -3.80% (p=0.002 n=6)
FromBuiltinNames/no_match-16                                    12.67n ±  1%    12.88n ±  1%   +1.58% (p=0.002 n=6)
FromBuiltinNames/no_match_long-16                               11.80n ±  1%    11.73n ±  1%        ~ (p=0.333 n=6)
geomean                                                         629.3n          611.3n         -2.87%

                                                             │  ../main.bench   │              ../osx.bench               │
                                                             │       B/op       │      B/op       vs base                 │
CapabilitiesCurrentVersion-16                                   1.930Ki ±  0%      1.930Ki ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/1-16                                              24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/10-16                                             240.0 ±  0%        240.0 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/100-16                                          2.344Ki ±  0%      2.344Ki ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/1000-16                                         23.44Ki ±  0%      23.44Ki ±  0%        ~ (p=1.000 n=6)
RewriteDynamics/10000-16                                        234.4Ki ±  3%      234.4Ki ±  3%        ~ (p=1.000 n=6)
RewriteDynamics/100000-16                                       2.289Mi ± 46%      2.289Mi ± 45%        ~ (p=1.000 n=6)
GenerateLocalVar-16                                               23.00 ±  0%        23.00 ±  0%        ~ (p=1.000 n=6) ¹
ParseModuleRulesBase/1-16                                       12.31Ki ±  0%      12.31Ki ±  0%        ~ (p=0.455 n=6)
ParseModuleRulesBase/10-16                                      73.01Ki ±  0%      73.01Ki ±  0%        ~ (p=0.567 n=6)
ParseModuleRulesBase/100-16                                     687.1Ki ±  0%      687.1Ki ±  0%        ~ (p=0.368 n=6)
ParseModuleRulesBase/1000-16                                    6.725Mi ±  0%      6.725Mi ±  0%        ~ (p=0.485 n=6)
ParseStatementBasicCall-16                                      8.211Ki ±  0%      8.211Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementMixedJSON-16                                     102.10Ki ±  0%      86.66Ki ±  0%  -15.12% (p=0.002 n=6)
ParseStatementSimpleArray/1-16                                  7.805Ki ±  0%      7.617Ki ±  0%   -2.40% (p=0.002 n=6)
ParseStatementSimpleArray/10-16                                 14.36Ki ±  0%      12.52Ki ±  0%  -12.79% (p=0.002 n=6)
ParseStatementSimpleArray/100-16                                81.86Ki ±  0%      63.50Ki ±  0%  -22.43% (p=0.002 n=6)
ParseStatementSimpleArray/1000-16                               772.0Ki ±  0%      588.4Ki ±  0%  -23.78% (p=0.002 n=6)
ParseStatementNestedObjects/1x1-16                              9.023Ki ±  0%      8.672Ki ±  0%   -3.90% (p=0.002 n=6)
ParseStatementNestedObjects/5x1-16                              14.89Ki ±  0%      13.13Ki ±  0%  -11.80% (p=0.002 n=6)
ParseStatementNestedObjects/10x1-16                             22.34Ki ±  0%      18.83Ki ±  0%  -15.73% (p=0.002 n=6)
ParseStatementNestedObjects/1x5-16                              17.66Ki ±  0%      16.58Ki ±  0%   -6.15% (p=0.002 n=6)
ParseStatementNestedObjects/1x10-16                             28.45Ki ±  0%      26.46Ki ±  0%   -6.98% (p=0.002 n=6)
ParseStatementNestedObjects/5x5-16                              6.398Mi ±  0%      5.188Mi ±  0%  -18.91% (p=0.002 n=6)
ParseSome-16                                                    7.664Ki ±  0%      7.664Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseEvery-16                                                   11.14Ki ±  0%      11.14Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-10-16                       15.98Ki ±  0%      15.98Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-50-16                       52.93Ki ±  0%      52.93Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-100-16                      99.12Ki ±  0%      99.12Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-500-16                      470.9Ki ±  0%      470.9Ki ±  0%        ~ (p=1.000 n=6)
ParseDeepNesting/NestedArrays/depth-2500-16                     2.278Mi ±  0%      2.278Mi ±  0%        ~ (p=0.688 n=6)
ParseDeepNesting/NestedArrays/depth-12500-16                    11.39Mi ±  0%      11.39Mi ±  0%        ~ (p=0.714 n=6)
ParseDeepNesting/NestedObjects/depth-10-16                      28.24Ki ±  0%      26.52Ki ±  0%   -6.09% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-50-16                      115.1Ki ±  0%      106.5Ki ±  0%   -7.46% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-100-16                     224.0Ki ±  0%      206.8Ki ±  0%   -7.67% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-500-16                    1105.2Ki ±  0%     1019.3Ki ±  0%   -7.78% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-2500-16                    5.414Mi ±  0%      4.983Mi ±  0%   -7.96% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-12500-16                   27.00Mi ±  0%      24.81Mi ±  0%   -8.10% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/1-16                          9.883Ki ±  0%      9.883Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/5-16                          22.73Ki ±  0%      22.73Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/10-16                         39.06Ki ±  0%      39.06Ki ±  0%        ~ (p=0.242 n=6)
ParseStatementNestedObjectsOrSets/15-16                         55.81Ki ±  0%      55.82Ki ±  0%        ~ (p=0.242 n=6)
ParseStatementNestedObjectsOrSets/20-16                         72.97Ki ±  0%      72.97Ki ±  0%        ~ (p=1.000 n=6)
ParseVars-16                                                    7.844Ki ±  0%      7.844Ki ±  0%        ~ (p=1.000 n=6) ¹
ParseBasicABACModule-16                                         104.2Ki ±  0%      102.4Ki ±  0%   -1.68% (p=0.002 n=6)
TypeName-16                                                       8.000 ±  0%        8.000 ±  0%        ~ (p=1.000 n=6) ¹
ValueName-16                                                      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/5-16                                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/50-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/500-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/5000-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/lookup_in_empty_object-16                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_interned_key-16                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_string_key-16                                  0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_int_number_key-16                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_float_number_key_as_int-16                     0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_int_number_key_as_float-16                     0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_float_key-16                                   0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_string_key-16                                   0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_int_number_key-16                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_float_key-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_5-16                                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_50-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_500-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_5000-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_5-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_50-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_500-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_5000-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_5-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_50-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_500-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_5000-16                                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_5-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_50-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_500-16                                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_5000-16                                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/existing_key_and_value-16                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/existing_key,_new_value-16                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/new_key-16                                         2.344Ki ±  0%      2.344Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/new_key,_new_value-16                              2.344Ki ±  0%      2.344Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/5-16                                      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/50-16                                     0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/500-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/5000-16                                   0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/50000-16                                  0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/500000-16                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/5-16                                             24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/50-16                                            24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/500-16                                           24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/5000-16                                          24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_5-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_50-16                                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_500-16                                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_5000-16                                          0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_5-16                                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_50-16                                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_500-16                                          0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_5000-16                                         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_5-16                                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_50-16                                          0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_500-16                                         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_5000-16                                        0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_5-16                                          0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_50-16                                         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_500-16                                        0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_5000-16                                       0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/5-16                                         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/50-16                                        0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/500-16                                       0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/5000-16                                      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/50000-16                                     0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/500000-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/5-16                                              352.0 ±  0%        352.0 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/50-16                                           2.086Ki ±  0%      2.086Ki ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/500-16                                          26.15Ki ±  0%      26.15Ki ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/5000-16                                         224.4Ki ±  0%      224.4Ki ±  0%        ~ (p=1.000 n=6)
SetIntersectionDifferentSize/4-16                                 288.0 ±  0%        288.0 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/50-16                                336.0 ±  0%        336.0 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/500-16                               336.0 ±  0%        336.0 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/5000-16                              336.0 ±  0%        336.0 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/5-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/50-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/500-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/5000-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/10-16                                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/100-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/1000-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5/String()-16                                        240.0 ±  0%        240.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5/json.Marshal-16                                    360.0 ±  0%        360.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/50/String()-16                                     2.532Ki ±  0%      2.532Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/50/json.Marshal-16                                 3.549Ki ±  0%      3.549Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/500/String()-16                                    23.83Ki ±  0%      23.83Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/500/json.Marshal-16                                36.50Ki ±  0%      36.50Ki ±  0%        ~ (p=1.000 n=6)
ObjectString/5000/String()-16                                   207.1Ki ±  0%      207.1Ki ±  0%        ~ (p=0.896 n=6)
ObjectString/5000/json.Marshal-16                               381.6Ki ±  0%      381.6Ki ±  0%        ~ (p=0.580 n=6)
ObjectStringInterfaces/5/String()-16                              240.0 ±  0%        240.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/5/json.Marshal-16                        6.011Ki ±  0%      6.011Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/50/String()-16                           2.532Ki ±  0%      2.532Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/50/json.Marshal-16                       60.05Ki ±  0%      60.05Ki ±  0%        ~ (p=0.981 n=6)
ObjectStringInterfaces/500/String()-16                          23.83Ki ±  0%      23.83Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/500/json.Marshal-16                      604.5Ki ±  0%      604.5Ki ±  0%        ~ (p=0.818 n=6)
ObjectStringInterfaces/5000/String()-16                         207.1Ki ±  0%      207.1Ki ±  0%        ~ (p=1.000 n=6)
ObjectStringInterfaces/5000/json.Marshal-16                     6.265Mi ±  1%      6.269Mi ±  1%        ~ (p=0.937 n=6)
ObjectStringInterfaces/50000/String()-16                        1.921Mi ±  0%      1.921Mi ±  0%        ~ (p=1.000 n=6)
ObjectStringInterfaces/50000/json.Marshal-16                    65.38Mi ±  2%      65.25Mi ±  4%        ~ (p=0.699 n=6)
ObjectConstruction/shuffled_keys/5-16                             896.0 ±  0%        896.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/50-16                          8.391Ki ±  0%      8.391Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/500-16                         99.09Ki ±  0%      99.09Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/5000-16                        986.2Ki ±  0%      986.1Ki ±  0%   -0.00% (p=0.002 n=6)
ObjectConstruction/shuffled_keys/50000-16                       9.784Mi ±  0%      9.784Mi ±  0%   -0.00% (p=0.002 n=6)
ObjectConstruction/shuffled_keys/500000-16                      114.3Mi ±  0%      114.3Mi ±  0%        ~ (p=0.180 n=6)
ObjectConstruction/increasing_keys/5-16                           896.0 ±  0%        896.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/50-16                        8.391Ki ±  0%      8.391Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/500-16                       99.09Ki ±  0%      99.09Ki ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/5000-16                      985.1Ki ±  0%      985.1Ki ±  0%        ~ (p=1.000 n=6)
ObjectConstruction/increasing_keys/50000-16                     9.765Mi ±  0%      9.765Mi ±  0%        ~ (p=0.571 n=6)
ObjectConstruction/increasing_keys/500000-16                    114.5Mi ±  0%      114.5Mi ±  0%        ~ (p=0.258 n=6)
ArrayString/5/String()-16                                         160.0 ±  0%        160.0 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/5/json.Marshal-16                                     48.00 ±  0%        48.00 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/50/String()-16                                      1.657Ki ±  0%      1.657Ki ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/50/json.Marshal-16                                    280.0 ±  0%        280.0 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/500/String()-16                                     15.82Ki ±  0%      15.82Ki ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/500/json.Marshal-16                                 3.025Ki ±  0%      3.025Ki ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/5000/String()-16                                    127.0Ki ±  0%      127.0Ki ±  0%        ~ (p=1.000 n=6)
ArrayString/5000/json.Marshal-16                                40.08Ki ±  0%      40.08Ki ±  0%        ~ (p=0.831 n=6)
ArrayEquality/5-16                                                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/50-16                                               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/500-16                                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/5000-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/5/String()-16                                           80.00 ±  0%        80.00 ±  0%        ~ (p=1.000 n=6) ¹
SetString/50/String()-16                                          896.0 ±  0%        896.0 ±  0%        ~ (p=1.000 n=6) ¹
SetString/500/String()-16                                       8.006Ki ±  0%      8.006Ki ±  0%        ~ (p=1.000 n=6) ¹
SetString/5000/String()-16                                      80.08Ki ±  0%      80.08Ki ±  0%        ~ (p=0.545 n=6)
SetString/50000/String()-16                                     784.3Ki ±  0%      784.3Ki ±  0%        ~ (p=0.866 n=6)
SetMarshalJSON/5/json.Marshal-16                                2.921Ki ±  0%      2.921Ki ±  0%        ~ (p=1.000 n=6) ¹
SetMarshalJSON/50/json.Marshal-16                               29.39Ki ±  0%      29.39Ki ±  0%        ~ (p=0.935 n=6)
SetMarshalJSON/500/json.Marshal-16                              291.7Ki ±  0%      291.9Ki ±  0%        ~ (p=0.084 n=6)
SetMarshalJSON/5000/json.Marshal-16                             2.956Mi ±  0%      2.952Mi ±  0%        ~ (p=0.065 n=6)
SetMarshalJSON/50000/json.Marshal-16                            30.94Mi ±  1%      30.89Mi ±  2%        ~ (p=0.937 n=6)
IsVarCompatibleString/#00-16                                      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/5heel-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h\x00llo-16                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h_llo-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h_llo#01-16                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h"llo-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h\llo-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/hello-16                                    0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/dot_builtin-16                                          0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/really_long-16                                          64.00 ±  0%        64.00 ±  0%        ~ (p=1.000 n=6) ¹
RefString/scalars_ref-16                                          64.00 ±  0%        64.00 ±  0%        ~ (p=1.000 n=6) ¹
RefString/simple_ref-16                                           16.00 ±  0%        16.00 ±  0%        ~ (p=1.000 n=6) ¹
RefString/var_term-16                                             0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/with_escape-16                                          24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
InterfaceToValueInt/interned_int_value-16                         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterfaceToValueInt/non-interned_int_value-16                     21.00 ±  0%        21.00 ±  0%        ~ (p=1.000 n=6) ¹
VarVisitorWalkAnyVsSpecific/Walk-16                               24.00 ±  0%        24.00 ±  0%        ~ (p=1.000 n=6) ¹
VarVisitorWalkAnyVsSpecific/WalkBody-16                           0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
VarSetUpdateEmpty-16                                              128.0 ±  0%        128.0 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/GenericVisitor-16                 624.0 ±  0%        624.0 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/TypeVisitor_term-16               0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/TypeVisitor_via_WalkRules-16      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/package_var_value-16                         16.00 ±  0%        16.00 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/interned_value-16                            0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/object_value-16                              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/new_value-16                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/single_part-16                                   0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/two_parts-16                                     0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/three_parts-16                                   0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/no_match-16                                      0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/no_match_long-16                                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=6) ¹
geomean                                                                       ²                    -0.95%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                             │  ../main.bench  │             ../osx.bench              │
                                                             │    allocs/op    │  allocs/op    vs base                 │
CapabilitiesCurrentVersion-16                                    4.000 ±  0%      4.000 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/1-16                                             1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/10-16                                            10.00 ±  0%      10.00 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/100-16                                           100.0 ±  0%      100.0 ±  0%        ~ (p=1.000 n=6) ¹
RewriteDynamics/1000-16                                         1.000k ±  0%     1.000k ±  0%        ~ (p=1.000 n=6)
RewriteDynamics/10000-16                                        10.00k ±  3%     10.00k ±  2%        ~ (p=1.000 n=6)
RewriteDynamics/100000-16                                       100.0k ± 43%     100.0k ± 42%        ~ (p=1.000 n=6)
GenerateLocalVar-16                                              1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
ParseModuleRulesBase/1-16                                        149.0 ±  0%      149.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseModuleRulesBase/10-16                                      1.146k ±  0%     1.146k ±  0%        ~ (p=1.000 n=6) ¹
ParseModuleRulesBase/100-16                                     11.06k ±  0%     11.06k ±  0%        ~ (p=1.000 n=6) ¹
ParseModuleRulesBase/1000-16                                    110.1k ±  0%     110.1k ±  0%        ~ (p=0.545 n=6)
ParseStatementBasicCall-16                                       73.00 ±  0%      73.00 ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementMixedJSON-16                                      1.509k ±  0%     1.173k ±  0%  -22.27% (p=0.002 n=6)
ParseStatementSimpleArray/1-16                                   56.00 ±  0%      52.00 ±  0%   -7.14% (p=0.002 n=6)
ParseStatementSimpleArray/10-16                                  168.0 ±  0%      128.0 ±  0%  -23.81% (p=0.002 n=6)
ParseStatementSimpleArray/100-16                                1253.0 ±  0%      853.0 ±  0%  -31.92% (p=0.002 n=6)
ParseStatementSimpleArray/1000-16                              12.063k ±  0%     8.063k ±  0%  -33.16% (p=0.002 n=6)
ParseStatementNestedObjects/1x1-16                               72.00 ±  0%      64.00 ±  0%  -11.11% (p=0.002 n=6)
ParseStatementNestedObjects/5x1-16                               176.0 ±  0%      136.0 ±  0%  -22.73% (p=0.002 n=6)
ParseStatementNestedObjects/10x1-16                              304.0 ±  0%      224.0 ±  0%  -26.32% (p=0.002 n=6)
ParseStatementNestedObjects/1x5-16                               184.0 ±  0%      160.0 ±  0%  -13.04% (p=0.002 n=6)
ParseStatementNestedObjects/1x10-16                              324.0 ±  0%      280.0 ±  0%  -13.58% (p=0.002 n=6)
ParseStatementNestedObjects/5x5-16                             103.15k ±  0%     75.03k ±  0%  -27.26% (p=0.002 n=6)
ParseSome-16                                                     57.00 ±  0%      57.00 ±  0%        ~ (p=1.000 n=6) ¹
ParseEvery-16                                                    116.0 ±  0%      116.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-10-16                        162.0 ±  0%      162.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-50-16                        642.0 ±  0%      642.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-100-16                      1.242k ±  0%     1.242k ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-500-16                      6.044k ±  0%     6.044k ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-2500-16                     30.05k ±  0%     30.05k ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedArrays/depth-12500-16                    150.1k ±  0%     150.1k ±  0%        ~ (p=1.000 n=6) ¹
ParseDeepNesting/NestedObjects/depth-10-16                       332.0 ±  0%      292.0 ±  0%  -12.05% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-50-16                      1.493k ±  0%     1.293k ±  0%  -13.40% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-100-16                     2.944k ±  0%     2.544k ±  0%  -13.59% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-500-16                     14.55k ±  0%     12.55k ±  0%  -13.75% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-2500-16                    72.56k ±  0%     62.55k ±  0%  -13.78% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-12500-16                   362.6k ±  0%     312.6k ±  0%  -13.79% (p=0.002 n=6)
ParseStatementNestedObjectsOrSets/1-16                           87.00 ±  0%      87.00 ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/5-16                           265.0 ±  0%      265.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/10-16                          486.0 ±  0%      486.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/15-16                          706.0 ±  0%      706.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseStatementNestedObjectsOrSets/20-16                          927.0 ±  0%      927.0 ±  0%        ~ (p=1.000 n=6) ¹
ParseVars-16                                                     66.00 ±  0%      66.00 ±  0%        ~ (p=1.000 n=6) ¹
ParseBasicABACModule-16                                         1.766k ±  0%     1.726k ±  0%   -2.27% (p=0.002 n=6)
TypeName-16                                                      1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
ValueName-16                                                     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/5-16                                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/50-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/500-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectLookup/5000-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/lookup_in_empty_object-16                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_interned_key-16                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_string_key-16                                 0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_int_number_key-16                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_float_number_key_as_int-16                    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_int_number_key_as_float-16                    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/existing_float_key-16                                  0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_string_key-16                                  0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_int_number_key-16                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectGet/missing_float_key-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_5-16                                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_50-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_500-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5_5000-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_5-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_50-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_500-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/50_5000-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_5-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_50-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_500-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/500_5000-16                                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_5-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_50-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_500-16                                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectFind/5000_5000-16                                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/existing_key_and_value-16                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/existing_key,_new_value-16                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/new_key-16                                          100.0 ±  0%      100.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectInsert/new_key,_new_value-16                               100.0 ±  0%      100.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/5-16                                     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/50-16                                    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/500-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/5000-16                                  0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/50000-16                                 0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectCreationAndLookup/500000-16                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/5-16                                            1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/50-16                                           1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/500-16                                          1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectLookup/5000-16                                         1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_5-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_50-16                                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_500-16                                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5_5000-16                                         0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_5-16                                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_50-16                                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_500-16                                         0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/50_5000-16                                        0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_5-16                                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_50-16                                         0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_500-16                                        0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/500_5000-16                                       0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_5-16                                         0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_50-16                                        0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_500-16                                       0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
LazyObjectFind/5000_5000-16                                      0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/5-16                                        0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/50-16                                       0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/500-16                                      0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/5000-16                                     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/50000-16                                    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetCreationAndLookup/500000-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/5-16                                             5.000 ±  0%      5.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/50-16                                            7.000 ±  0%      7.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/500-16                                           7.000 ±  0%      7.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersection/5000-16                                          21.00 ±  0%      21.00 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/4-16                                4.000 ±  0%      4.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/50-16                               5.000 ±  0%      5.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/500-16                              5.000 ±  0%      5.000 ±  0%        ~ (p=1.000 n=6) ¹
SetIntersectionDifferentSize/5000-16                             5.000 ±  0%      5.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/5-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/50-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/500-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMembership/5000-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/10-16                                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/100-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
TermHashing/1000-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5/String()-16                                       11.00 ±  0%      11.00 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5/json.Marshal-16                                   12.00 ±  0%      12.00 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/50/String()-16                                      101.0 ±  0%      101.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/50/json.Marshal-16                                  102.0 ±  0%      102.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/500/String()-16                                    1.001k ±  0%     1.001k ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/500/json.Marshal-16                                1.002k ±  0%     1.002k ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5000/String()-16                                   6.001k ±  0%     6.001k ±  0%        ~ (p=1.000 n=6) ¹
ObjectString/5000/json.Marshal-16                               10.00k ±  0%     10.00k ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/5/String()-16                             11.00 ±  0%      11.00 ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/5/json.Marshal-16                         104.0 ±  0%      104.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/50/String()-16                            101.0 ±  0%      101.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/50/json.Marshal-16                       1.004k ±  0%     1.004k ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/500/String()-16                          1.001k ±  0%     1.001k ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/500/json.Marshal-16                      10.01k ±  0%     10.01k ±  0%        ~ (p=1.000 n=6)
ObjectStringInterfaces/5000/String()-16                         6.001k ±  0%     6.001k ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/5000/json.Marshal-16                     100.1k ±  0%     100.1k ±  0%        ~ (p=0.987 n=6)
ObjectStringInterfaces/50000/String()-16                        51.00k ±  0%     51.00k ±  0%        ~ (p=1.000 n=6) ¹
ObjectStringInterfaces/50000/json.Marshal-16                    1.000M ±  0%     1.000M ±  0%        ~ (p=0.331 n=6)
ObjectConstruction/shuffled_keys/5-16                            32.00 ±  0%      32.00 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/50-16                           267.0 ±  0%      267.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/500-16                         3.328k ±  0%     3.328k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/5000-16                        34.87k ±  0%     34.87k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/50000-16                       350.1k ±  0%     350.1k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/shuffled_keys/500000-16                      3.504M ±  0%     3.504M ±  0%        ~ (p=1.000 n=6)
ObjectConstruction/increasing_keys/5-16                          32.00 ±  0%      32.00 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/50-16                         267.0 ±  0%      267.0 ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/500-16                       3.328k ±  0%     3.328k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/5000-16                      34.87k ±  0%     34.87k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/50000-16                     350.1k ±  0%     350.1k ±  0%        ~ (p=1.000 n=6) ¹
ObjectConstruction/increasing_keys/500000-16                    3.504M ±  0%     3.504M ±  0%        ~ (p=0.545 n=6)
ArrayString/5/String()-16                                        11.00 ±  0%      11.00 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/5/json.Marshal-16                                    2.000 ±  0%      2.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/50/String()-16                                       101.0 ±  0%      101.0 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/50/json.Marshal-16                                   2.000 ±  0%      2.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/500/String()-16                                     1.001k ±  0%     1.001k ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/500/json.Marshal-16                                  2.000 ±  0%      2.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/5000/String()-16                                    6.001k ±  0%     6.001k ±  0%        ~ (p=1.000 n=6) ¹
ArrayString/5000/json.Marshal-16                                 2.000 ±  0%      2.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/5-16                                               0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/50-16                                              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/500-16                                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
ArrayEquality/5000-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/5/String()-16                                          1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/50/String()-16                                         1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/500/String()-16                                        1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/5000/String()-16                                       1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
SetString/50000/String()-16                                      1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
SetMarshalJSON/5/json.Marshal-16                                 48.00 ±  0%      48.00 ±  0%        ~ (p=1.000 n=6) ¹
SetMarshalJSON/50/json.Marshal-16                                453.0 ±  0%      453.0 ±  0%        ~ (p=1.000 n=6) ¹
SetMarshalJSON/500/json.Marshal-16                              4.504k ±  0%     4.505k ±  0%        ~ (p=0.567 n=6)
SetMarshalJSON/5000/json.Marshal-16                             45.02k ±  0%     45.02k ±  0%        ~ (p=1.000 n=6) ¹
SetMarshalJSON/50000/json.Marshal-16                            450.0k ±  0%     450.0k ±  0%        ~ (p=0.690 n=6)
IsVarCompatibleString/#00-16                                     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/5heel-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h\x00llo-16                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h_llo-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h_llo#01-16                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h"llo-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/h\llo-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
IsVarCompatibleString/hello-16                                   0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/dot_builtin-16                                         0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/really_long-16                                         1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/scalars_ref-16                                         1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/simple_ref-16                                          1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/var_term-16                                            0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
RefString/with_escape-16                                         1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
InterfaceToValueInt/interned_int_value-16                        0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterfaceToValueInt/non-interned_int_value-16                    2.000 ±  0%      2.000 ±  0%        ~ (p=1.000 n=6) ¹
VarVisitorWalkAnyVsSpecific/Walk-16                              1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
VarVisitorWalkAnyVsSpecific/WalkBody-16                          0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
VarSetUpdateEmpty-16                                             4.000 ±  0%      4.000 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/GenericVisitor-16                30.00 ±  0%      30.00 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/TypeVisitor_term-16              0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
GenericVisitorWalkVsTypeVisitor/TypeVisitor_via_WalkRules-16     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/package_var_value-16                        1.000 ±  0%      1.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/interned_value-16                           0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/object_value-16                             0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
InterningAccessValue/new_value-16                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/single_part-16                                  0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/two_parts-16                                    0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/three_parts-16                                  0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/no_match-16                                     0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
FromBuiltinNames/no_match_long-16                                0.000 ±  0%      0.000 ±  0%        ~ (p=1.000 n=6) ¹
geomean                                                                      ²                  -1.67%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

@srenatus
Copy link
Contributor Author

Some diffs there are a bit mysterious, but I think it's overall going into the right direction. 🔍

@srenatus
Copy link
Contributor Author

goos: darwin
goarch: arm64
pkg: github.com/open-policy-agent/opa/v1/ast
cpu: Apple M4 Max
                              │ ../main_1_1.bench │            ../osx_1.bench            │
                              │      sec/op       │   sec/op     vs base                 │
FromBuiltinNames/two_parts-16         22.54n ± 1%   45.95n ± 1%  +103.79% (p=0.000 n=10)

                              │ ../main_1_1.bench │         ../osx_1.bench         │
                              │       B/op        │    B/op     vs base            │
FromBuiltinNames/two_parts-16          0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

                              │ ../main_1_1.bench │         ../osx_1.bench         │
                              │     allocs/op     │ allocs/op   vs base            │
FromBuiltinNames/two_parts-16          0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

Hmm what is this? Now it went the other way. Above, the diff was -75% 😮

@srenatus
Copy link
Contributor Author

OK the bottom line is: allocs go down for string-heavy parsing, as expected:

ParseStatementMixedJSON-16                                      1.509k ±  0%     1.173k ±  0%  -22.27% (p=0.002 n=6)
ParseStatementSimpleArray/1-16                                   56.00 ±  0%      52.00 ±  0%   -7.14% (p=0.002 n=6)
ParseStatementSimpleArray/10-16                                  168.0 ±  0%      128.0 ±  0%  -23.81% (p=0.002 n=6)
ParseStatementSimpleArray/100-16                                1253.0 ±  0%      853.0 ±  0%  -31.92% (p=0.002 n=6)
ParseStatementSimpleArray/1000-16                              12.063k ±  0%     8.063k ±  0%  -33.16% (p=0.002 n=6)
ParseStatementNestedObjects/1x1-16                               72.00 ±  0%      64.00 ±  0%  -11.11% (p=0.002 n=6)
ParseStatementNestedObjects/5x1-16                               176.0 ±  0%      136.0 ±  0%  -22.73% (p=0.002 n=6)
ParseStatementNestedObjects/10x1-16                              304.0 ±  0%      224.0 ±  0%  -26.32% (p=0.002 n=6)
ParseStatementNestedObjects/1x5-16                               184.0 ±  0%      160.0 ±  0%  -13.04% (p=0.002 n=6)
ParseStatementNestedObjects/1x10-16                              324.0 ±  0%      280.0 ±  0%  -13.58% (p=0.002 n=6)
ParseStatementNestedObjects/5x5-16                             103.15k ±  0%     75.03k ±  0%  -27.26% (p=0.002 n=6)
[...]
ParseDeepNesting/NestedObjects/depth-10-16                       332.0 ±  0%      292.0 ±  0%  -12.05% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-50-16                      1.493k ±  0%     1.293k ±  0%  -13.40% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-100-16                     2.944k ±  0%     2.544k ±  0%  -13.59% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-500-16                     14.55k ±  0%     12.55k ±  0%  -13.75% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-2500-16                    72.56k ±  0%     62.55k ±  0%  -13.78% (p=0.002 n=6)
ParseDeepNesting/NestedObjects/depth-12500-16                   362.6k ±  0%     312.6k ±  0%  -13.79% (p=0.002 n=6)

This should avoid a couple of allocations.

Signed-off-by: Stephan Renatus <[email protected]>
For string templates, the snippets to iterate over are expected to
be small, so this shouldn't be much extra work. At any rate, avoiding
to go through `json.Unmarshal` is probably a good idea if possible.

Signed-off-by: Stephan Renatus <[email protected]>
Copy link
Contributor

@johanfylling johanfylling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@srenatus srenatus merged commit c0df469 into open-policy-agent:main Dec 17, 2025
31 checks passed
@srenatus srenatus deleted the sr/osxzpsnrnpkt branch December 17, 2025 11:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants