Трёхлетний GitHub issue в Gleam закрыли не новым алгоритмом, а более аккуратной работой с памятью.
Giacomo Cavalieri из core team переписал pretty printer на Rust arenas.
Раньше каждый вложенный
Теперь документы кладутся в общую arena, а код передаёт ссылки на них.
Результат на реальном Gleam-проекте:
* pretty printer:
* ускорение:
* полный
* peak memory:
Дополнительный бонус: arena позволила кэшировать и переиспользовать частые документы вроде ключевых слов, запятых и скобок. То, что раньше аллоцировалось снова и снова, теперь создаётся один раз.
Хороший пример, где производительность упирается в скучные мелкие allocation costs.
Особенно в рекурсивных структурах, где один
https://giacomocavalieri.me/writing/gleam-rust-arenas
#RustLang #Performance #Gleam
Giacomo Cavalieri из core team переписал pretty printer на Rust arenas.
Раньше каждый вложенный
Document заворачивался в отдельный Box и жил отдельной heap allocation. Для рекурсивной структуры это быстро превращается в сотни мелких выделений памяти.Теперь документы кладутся в общую arena, а код передаёт ссылки на них.
Результат на реальном Gleam-проекте:
* pretty printer:
13ms → 9.8ms* ускорение:
24%* полный
gleam format: 13% быстрее* peak memory:
8.4MB → 7.6MBДополнительный бонус: arena позволила кэшировать и переиспользовать частые документы вроде ключевых слов, запятых и скобок. То, что раньше аллоцировалось снова и снова, теперь создаётся один раз.
Хороший пример, где производительность упирается в скучные мелкие allocation costs.
Особенно в рекурсивных структурах, где один
Box выглядит безобидно, пока их не становится слишком много.https://giacomocavalieri.me/writing/gleam-rust-arenas
#RustLang #Performance #Gleam
🔥26❤9👍5