Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 2024-05-24 - Avoid intermediate Vec allocations for string iteration and concatenation
**Learning:** The codebase contained patterns where strings were split and collected into a `Vec` only to be iterated over, or mapped strings were collected into a `Vec` and then joined into a single string. These create unnecessary intermediate allocations that slow down performance. Furthermore, single-character splits were using string literals (e.g., `.split(" ")`) which is less efficient than using character literals (e.g., `.split(' ')`).
**Action:** When transforming and aggregating strings or splitting and iterating over them, avoid `.collect::<Vec<_>>()`. Iterate directly over iterators, use `.collect::<String>()` for concatenation, and use character-based splits for single characters.
16 changes: 6 additions & 10 deletions xdk-build/src/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,16 +159,12 @@ fn run_formatter(output_dir: &Path, venv_python_path: &Path, script_path: &Path)
let stdout = String::from_utf8_lossy(&output.stdout);
if !stdout.trim().is_empty() {
println!();
stdout
.split("\n")
.collect::<Vec<&str>>()
.into_iter()
.for_each(|line| {
let parts = line.split(" ").collect::<Vec<&str>>();
if parts.len() == 2 {
log_info!("{} {}", parts[0], parts[1].magenta());
}
});
stdout.split('\n').for_each(|line| {
let mut parts = line.split(' ');
if let (Some(part0), Some(part1), None) = (parts.next(), parts.next(), parts.next()) {
log_info!("{} {}", part0, part1.magenta());
}
});
println!();
}

Expand Down
6 changes: 1 addition & 5 deletions xdk-lib/src/casing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,7 @@ impl Casing {
result
}
}
Casing::Pascal => words
.iter()
.map(|w| pascal_case(w))
.collect::<Vec<_>>()
.join(""),
Casing::Pascal => words.iter().map(|w| pascal_case(w)).collect::<String>(),
Casing::Kebab => words.join("-").to_lowercase(),
Casing::ScreamingSnake => words.join("_").to_uppercase(),
}
Expand Down
Loading