Avatar for the harehare user
harehare
mq
BlogDocsChangelog

Refactor string operations and loops for performance

#314Closed
Comparing
perf-improvements-non-optimizer
(
7c25568
) with
main
(
deba36a
)
CodSpeed Performance Gauge
0%
Improvements
0
Regressions
0
Untouched
9
New
0
Dropped
0
Ignored
0

Benchmarks

Passed

eval_string_interpolation
crates/mq-lang/benches/benchmark.rs::eval_string_interpolation
CodSpeed Performance Gauge
+1%
59.6 µs
59.2 µs
parse_fibonacci
crates/mq-lang/benches/benchmark.rs::parse_fibonacci
CodSpeed Performance Gauge
+1%
100 µs
99.4 µs
eval_dead_code_elimination_benchmark
crates/mq-lang/benches/benchmark.rs::eval_dead_code_elimination_benchmark
CodSpeed Performance Gauge
0%
155.6 µs
155.3 µs
eval_boolean_folding
crates/mq-lang/benches/benchmark.rs::eval_boolean_folding
CodSpeed Performance Gauge
0%
171.6 µs
171.4 µs
eval_select_h
crates/mq-lang/benches/benchmark.rs::eval_select_h
CodSpeed Performance Gauge
0%
220.6 µs
220.6 µs
eval_speed_test[100000]
crates/mq-lang/benches/benchmark.rs::eval_speed_test[100000]
CodSpeed Performance Gauge
0%
175.5 ms
175.5 ms
eval_comparison_folding
crates/mq-lang/benches/benchmark.rs::eval_comparison_folding
CodSpeed Performance Gauge
0%
328.6 µs
328.9 µs
eval_nodes
crates/mq-lang/benches/benchmark.rs::eval_nodes
CodSpeed Performance Gauge
0%
3.7 ms
3.7 ms
eval_fibonacci[20]
crates/mq-lang/benches/benchmark.rs::eval_fibonacci[20]
CodSpeed Performance Gauge
0%
82.9 ms
83.2 ms

Commits

Click on a commit to change the comparison range
Base
main
deba36a
0%
Refactor string operations and loops for performance This commit introduces several changes to improve performance in non-optimizer code paths: 1. **Optimized String Formatting:** - Refactored the `impl_value_string!` macro in `value_macros.rs` to use `write!` for `Array` and `Dict` stringification, reducing intermediate string allocations. - Modified `eval_interpolated_string` in `eval.rs` to use `write!` for constructing interpolated strings, avoiding unnecessary allocations. 2. **Optimized `eval_foreach`:** - Refactored the `eval_foreach` function in `eval.rs` to use `map().collect()` instead of manual `Vec` pushing with `try_fold`, potentially improving conciseness and leveraging iterator optimizations. Analysis of `RuntimeValue`/`Value` conversions and `Env` lookups did not reveal immediate major bottlenecks, so significant changes in those areas were deferred. These changes are expected to improve performance, especially in scenarios involving heavy string manipulation or frequent iteration in `foreach` loops. Benchmarks were run successfully, and further detailed performance analysis will be observed via CodSpeed reports.
7c25568
1 day ago
by google-labs-jules[bot]
© 2025 CodSpeed Technology
Home Terms Privacy Docs