This PR makes the compiler produce C code that statically initializes close terms when possible. This change reduces startup time as the terms are directly stored in the binary instead of getting computed at startup. The set of terms currently supported by this mechanism are: - string literals - ctors called with other statically initializeable arguments - `Name.mkStrX` and other `Name` ctors as they require special support due to their computed field and occur frequently due to name literals. In core there are currently 152,524 closed terms and of these 103,929 (68%) get initialized statically with this PR. The remaining 48585 ones are not extracted because they use (potentially transitively) various non trivial pieces of code like `stringToMessageData` etc. We might decide to add special support for these in the future but for the moment this feels like it's overfitting too much for core. |
||
|---|---|---|
| .. | ||
| bench | ||
| bench-radar | ||
| compiler | ||
| elabissues | ||
| ir | ||
| lake | ||
| lean | ||
| pkg | ||
| playground | ||
| plugin | ||
| simpperf | ||
| .gitignore | ||
| common.sh | ||
| lakefile.toml | ||
| lean-toolchain | ||