Skip to content

Commit d9e1e04

Browse files
authored
chore: reduce allocation of Num (#655)
Motivation: Reduce the Num allocations ``` 基准测试对比: 改进前 (HEAD~1) vs 改进后 (HEAD) ==================================================================================================== Benchmark Before (ms/op) After (ms/op) Change ---------------------------------------------------------------------------------------------------- assertions.jsonnet 1.019 0.575 -43.6% bench.01.jsonnet 0.123 0.132 +7.3% bench.02.jsonnet 48.347 48.581 +0.5% bench.03.jsonnet 16.147 15.447 -4.3% bench.04.jsonnet 39.434 45.222 +14.7% bench.06.jsonnet 0.657 0.680 +3.5% bench.07.jsonnet 4.543 3.900 -14.2% bench.08.jsonnet 0.133 0.109 -18.0% bench.09.jsonnet 0.112 0.130 +16.1% gen_big_object.jsonnet 1.755 1.480 -15.7% large_string_join.jsonnet 6.659 6.705 +0.7% large_string_template.jsonnet 3.407 3.356 -1.5% realistic1.jsonnet 3.843 3.762 -2.1% realistic2.jsonnet 129.287 106.573 -17.6% base64.jsonnet 1.188 2.184 +83.8% base64Decode.jsonnet 1.333 0.828 -37.9% base64DecodeBytes.jsonnet 12.453 10.628 -14.7% base64_byte_array.jsonnet 1.896 2.084 +9.9% comparison.jsonnet 29.518 34.007 +15.2% comparison2.jsonnet 80.905 81.289 +0.5% escapeStringJson.jsonnet 0.089 0.082 -7.9% foldl.jsonnet 12.170 11.003 -9.6% lstripChars.jsonnet 0.958 0.867 -9.5% manifestJsonEx.jsonnet 0.178 0.187 +5.1% manifestTomlEx.jsonnet 0.177 0.230 +29.9% manifestYamlDoc.jsonnet 0.138 0.196 +42.0% member.jsonnet 1.055 1.092 +3.5% parseInt.jsonnet 0.118 0.103 -12.7% reverse.jsonnet 12.214 11.873 -2.8% rstripChars.jsonnet 0.873 0.821 -6.0% stripChars.jsonnet 1.080 0.812 -24.8% substr.jsonnet 0.276 0.262 -5.1% setDiff.jsonnet 0.740 0.694 -6.2% setInter.jsonnet 0.653 0.614 -6.0% setUnion.jsonnet 1.106 1.028 -7.1% ---------------------------------------------------------------------------------------------------- TOTAL 414.584 397.536 -4.1% ==================================================================================================== ```
1 parent d015059 commit d9e1e04

12 files changed

Lines changed: 400 additions & 229 deletions

sjsonnet/src/sjsonnet/Evaluator.scala

Lines changed: 203 additions & 112 deletions
Large diffs are not rendered by default.

sjsonnet/src/sjsonnet/StaticOptimizer.scala

Lines changed: 186 additions & 106 deletions
Large diffs are not rendered by default.

sjsonnet/src/sjsonnet/Val.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ object PrettyNamed {
172172
object Val {
173173
// Constants for safe double-to-int conversion
174174
// IEEE 754 doubles precisely represent integers up to 2^53, beyond which precision is lost
175-
private val DOUBLE_MAX_SAFE_INTEGER = (1L << 53) - 1
176-
private val DOUBLE_MIN_SAFE_INTEGER = -((1L << 53) - 1)
175+
private[sjsonnet] final val DOUBLE_MAX_SAFE_INTEGER = (1L << 53) - 1
176+
private[sjsonnet] final val DOUBLE_MIN_SAFE_INTEGER = -((1L << 53) - 1)
177177

178178
abstract class Literal extends Val with Expr {
179179
final override private[sjsonnet] def tag = ExprTags.`Val.Literal`
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown unary operation: ~ string
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(binaryNot2.jsonnet:1:1)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: string | number
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(bitwise_or10.jsonnet:1:7)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: number / string
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(number_divided_by_string.jsonnet:1:4)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: number * string
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(number_times_string.jsonnet:1:4)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: string / number
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(string_divided_by_number.jsonnet:1:7)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: string - number
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(string_minus_number.jsonnet:1:5)
33

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
sjsonnet.Error: Unknown binary operation: string * number
1+
sjsonnet.Error: Expected Number, got string
22
at [<root>].(string_times_number.jsonnet:1:5)
33

0 commit comments

Comments
 (0)