Skip to content

chore: Add more static optimizer#628

Merged
stephenamar-db merged 2 commits intodatabricks:masterfrom
He-Pin:staticOptimizer
Mar 6, 2026
Merged

chore: Add more static optimizer#628
stephenamar-db merged 2 commits intodatabricks:masterfrom
He-Pin:staticOptimizer

Conversation

@He-Pin
Copy link
Contributor

@He-Pin He-Pin commented Mar 3, 2026

Motivation:
more aggressive optimization, but behind a flag, the default is false.

master:

125] Benchmark                                                                  (path)  Mode  Cnt    Score   Error  Units
125] RegressionBenchmark.main             bench/resources/bug_suite/assertions.jsonnet  avgt         0.326          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.01.jsonnet  avgt         0.073          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.02.jsonnet  avgt        40.602          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.03.jsonnet  avgt        13.352          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.04.jsonnet  avgt        32.769          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.06.jsonnet  avgt         0.448          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.07.jsonnet  avgt         3.253          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.08.jsonnet  avgt         0.062          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.09.jsonnet  avgt         0.068          ms/op
125] RegressionBenchmark.main         bench/resources/cpp_suite/gen_big_object.jsonnet  avgt         1.012          ms/op
125] RegressionBenchmark.main      bench/resources/cpp_suite/large_string_join.jsonnet  avgt         2.059          ms/op
125] RegressionBenchmark.main  bench/resources/cpp_suite/large_string_template.jsonnet  avgt         2.439          ms/op
125] RegressionBenchmark.main             bench/resources/cpp_suite/realistic1.jsonnet  avgt         3.298          ms/op
125] RegressionBenchmark.main             bench/resources/cpp_suite/realistic2.jsonnet  avgt       125.995          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/base64.jsonnet  avgt         0.843          ms/op
125] RegressionBenchmark.main            bench/resources/go_suite/base64Decode.jsonnet  avgt         0.651          ms/op
125] RegressionBenchmark.main       bench/resources/go_suite/base64DecodeBytes.jsonnet  avgt         9.457          ms/op
125] RegressionBenchmark.main       bench/resources/go_suite/base64_byte_array.jsonnet  avgt         1.515          ms/op
125] RegressionBenchmark.main              bench/resources/go_suite/comparison.jsonnet  avgt        23.599          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/comparison2.jsonnet  avgt        75.864          ms/op
125] RegressionBenchmark.main        bench/resources/go_suite/escapeStringJson.jsonnet  avgt         0.050          ms/op
125] RegressionBenchmark.main                   bench/resources/go_suite/foldl.jsonnet  avgt         9.695          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/lstripChars.jsonnet  avgt         0.650          ms/op
125] RegressionBenchmark.main          bench/resources/go_suite/manifestJsonEx.jsonnet  avgt         0.072          ms/op
125] RegressionBenchmark.main          bench/resources/go_suite/manifestTomlEx.jsonnet  avgt         0.089          ms/op
125] RegressionBenchmark.main         bench/resources/go_suite/manifestYamlDoc.jsonnet  avgt         0.076          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/member.jsonnet  avgt         0.731          ms/op
125] RegressionBenchmark.main                bench/resources/go_suite/parseInt.jsonnet  avgt         0.052          ms/op
125] RegressionBenchmark.main                 bench/resources/go_suite/reverse.jsonnet  avgt        11.621          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/rstripChars.jsonnet  avgt         0.647          ms/op
125] RegressionBenchmark.main              bench/resources/go_suite/stripChars.jsonnet  avgt         0.632          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/substr.jsonnet  avgt         0.173          ms/op
125] RegressionBenchmark.main           bench/resources/sjsonnet_suite/setDiff.jsonnet  avgt         0.493          ms/op
125] RegressionBenchmark.main          bench/resources/sjsonnet_suite/setInter.jsonnet  avgt         0.443          ms/op
125] RegressionBenchmark.main          bench/resources/sjsonnet_suite/setUnion.jsonnet  avgt         0.792          ms/op
125/125, SUCCESS] ./mill bench.runRegressions 438s

this branch with aggressiveStaticOptimization = true:

125] Benchmark                                                                  (path)  Mode  Cnt   Score   Error  Units
125] RegressionBenchmark.main             bench/resources/bug_suite/assertions.jsonnet  avgt        0.329          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.01.jsonnet  avgt        0.072          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.02.jsonnet  avgt       40.614          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.03.jsonnet  avgt       13.026          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.04.jsonnet  avgt       31.369          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.06.jsonnet  avgt        0.433          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.07.jsonnet  avgt        3.043          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.08.jsonnet  avgt        0.059          ms/op
125] RegressionBenchmark.main               bench/resources/cpp_suite/bench.09.jsonnet  avgt        0.067          ms/op
125] RegressionBenchmark.main         bench/resources/cpp_suite/gen_big_object.jsonnet  avgt        0.987          ms/op
125] RegressionBenchmark.main      bench/resources/cpp_suite/large_string_join.jsonnet  avgt        1.985          ms/op
125] RegressionBenchmark.main  bench/resources/cpp_suite/large_string_template.jsonnet  avgt        2.290          ms/op
125] RegressionBenchmark.main             bench/resources/cpp_suite/realistic1.jsonnet  avgt        3.191          ms/op
125] RegressionBenchmark.main             bench/resources/cpp_suite/realistic2.jsonnet  avgt       70.614          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/base64.jsonnet  avgt        0.838          ms/op
125] RegressionBenchmark.main            bench/resources/go_suite/base64Decode.jsonnet  avgt        0.641          ms/op
125] RegressionBenchmark.main       bench/resources/go_suite/base64DecodeBytes.jsonnet  avgt        9.197          ms/op
125] RegressionBenchmark.main       bench/resources/go_suite/base64_byte_array.jsonnet  avgt        1.468          ms/op
125] RegressionBenchmark.main              bench/resources/go_suite/comparison.jsonnet  avgt       22.964          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/comparison2.jsonnet  avgt       78.190          ms/op
125] RegressionBenchmark.main        bench/resources/go_suite/escapeStringJson.jsonnet  avgt        0.050          ms/op
125] RegressionBenchmark.main                   bench/resources/go_suite/foldl.jsonnet  avgt        9.088          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/lstripChars.jsonnet  avgt        0.653          ms/op
125] RegressionBenchmark.main          bench/resources/go_suite/manifestJsonEx.jsonnet  avgt        0.072          ms/op
125] RegressionBenchmark.main          bench/resources/go_suite/manifestTomlEx.jsonnet  avgt        0.090          ms/op
125] RegressionBenchmark.main         bench/resources/go_suite/manifestYamlDoc.jsonnet  avgt        0.078          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/member.jsonnet  avgt        0.695          ms/op
125] RegressionBenchmark.main                bench/resources/go_suite/parseInt.jsonnet  avgt        0.052          ms/op
125] RegressionBenchmark.main                 bench/resources/go_suite/reverse.jsonnet  avgt       11.731          ms/op
125] RegressionBenchmark.main             bench/resources/go_suite/rstripChars.jsonnet  avgt        0.611          ms/op
125] RegressionBenchmark.main              bench/resources/go_suite/stripChars.jsonnet  avgt        0.597          ms/op
125] RegressionBenchmark.main                  bench/resources/go_suite/substr.jsonnet  avgt        0.165          ms/op
125] RegressionBenchmark.main           bench/resources/sjsonnet_suite/setDiff.jsonnet  avgt        0.462          ms/op
125] RegressionBenchmark.main          bench/resources/sjsonnet_suite/setInter.jsonnet  avgt        0.457          ms/op
125] RegressionBenchmark.main          bench/resources/sjsonnet_suite/setUnion.jsonnet  avgt        0.715          ms/op
125/125, SUCCESS] ./mill bench.runRegressions 437s

refs: google/go-jsonnet#858

@He-Pin He-Pin marked this pull request as draft March 3, 2026 12:19
@He-Pin He-Pin force-pushed the staticOptimizer branch 8 times, most recently from a02576e to 4f8f074 Compare March 5, 2026 08:26
@He-Pin He-Pin marked this pull request as ready for review March 5, 2026 08:27
case e => e
// Aggressive optimizations: constant folding, branch elimination, short-circuit elimination.
// These reduce AST node count at parse time, benefiting long-running Jsonnet programs.
case e => if (aggressiveOptimization) tryAggressiveOptimize(e) else e
Copy link
Contributor Author

Choose a reason for hiding this comment

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

only do this after a flag

@He-Pin
Copy link
Contributor Author

He-Pin commented Mar 5, 2026

I think this is ok now, this would be nice for a long-running JSONNet program

@stephenamar-db
Copy link
Collaborator

resolve conflicts.
The improvement in bench/resources/cpp_suite/realistic2.jsonnet is kind of crazy. Do you know why?

* constant conditions; short-circuit elimination for And/Or with constant lhs. These reduce AST
* node count, benefiting long-running Jsonnet programs.
*/
aggressiveStaticOptimization: Boolean = false
Copy link
Collaborator

Choose a reason for hiding this comment

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

What the risk with having that by default? are you worried about correctness?

@He-Pin He-Pin marked this pull request as draft March 6, 2026 03:02
@He-Pin He-Pin force-pushed the staticOptimizer branch from 4f8f074 to 358eb23 Compare March 6, 2026 04:15
@He-Pin He-Pin requested a review from stephenamar-db March 6, 2026 04:27
@He-Pin He-Pin marked this pull request as ready for review March 6, 2026 04:27
@stephenamar-db stephenamar-db merged commit 05f8dee into databricks:master Mar 6, 2026
8 checks passed
@He-Pin He-Pin deleted the staticOptimizer branch March 6, 2026 05:35
stephenamar-db pushed a commit that referenced this pull request Mar 7, 2026
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