Implement ECR.process_string
as a macro
#14735
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a proof of concept to show that we don't need the macro
run
here at all. Whether this macro is indeed faster than the existingsrc/ecr/process.cr
for all use cases is up for investigation, but these are the results of doingmake clean clean_cache && time make && rm .build/crystal && time make
, rebuilding the compiler with a cold and hot cache respectively, with this PR:and without this PR:
I couldn't notice any significant differences when running the files under
scripts/
that also use ECR.The
looper*
variables are a workaround for not havingwhile
in the macro language.This PR consumes about 120 MB more memory in the compiler itself, but note that there are no more subprocesses doing macro
run
s. It seemsstring.chars
and those looper elements each contribute roughly 10 MB of memory.