Nontrivial string processing can get very slow
- Dominant language
- Jsonnet
- Stars
- 7.6k
- Forks
- 475
- PR merge metrics
- No merged PRs in 30d
Description
I think it's mostly caused the back-and-forth between lists of characters and strings.
For example, I have a function that takes a list of strings and "camelCases" the list, so that `["foo", "bar", "baz"]` turns into "fooBarBaz". Using that function on lots of strings in my larger evaluation makes the whole thing take about 40s. Replacing it with a simple `function (x) std.join("-", x)` for hyphenated names reduces total evaluation time to 10s, keeping other things equal.
The camelcase code is as follows:
```
local upper(c): local cp = std.codepoint(c); if cp >= 97 && cp < 123 then std.char(cp - 32) else c;
local capitalize(str): util.upper(str[0]) + std.substr(str, 1, std.length(str) - 1);
local zipWithIndex(f, list): std.makeArray(std.length(list), function (i) f(i, list[i]));
local camelcase(list): std.join("", util.zipWithIndex(function (i, x) if i == 0 then x else util.capitalize(x), list));
```
Not the most beautiful thing ever, but it works as intended, other than being super slow.
Contributor guide
Assessment
This issue has not been assessed yet.