Repository navigation
feat: compileModule() without the bodies of compiled functions - #252
Open
andreas-karlsson wants to merge 1 commit into
Open
andreas-karlsson wants to merge 1 commit into
andreas-karlsson wants to merge 1 commit into
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #249. An alternative to #251.
Adds
MachineFactoryCompiler.Builder.compileModule(), which returns aCompiledModule: the machine factory plus a copy of the module without the parsed bodies of compiled functions. It keeps only the bodies the interpreter may still run: the interpreted functions, plus any function they reach through tail calls. A newInstance.builder(CompiledModule)creates instances from it.The module passed in is left unchanged, and
compile()works as before. Nothing is dropped if an indirect tail call makes the reachable functions unknown, or when the compilation is loaded from the cache. Accessing a dropped body throws anIllegalStateException.Heap after compile, keeping only the
CompiledModule:mainParse and compile times are unchanged.
Compared with #251, this keeps
WasmModuleimmutable, at the cost of a new compile method and anInstance.builderoverload. Both are additive, so binary compatibility is kept.A possible follow-up: most of the remaining heap is data segments. If the compiled module kept the segments next to the module copy instead of inside it, instances wouldn't pin them through their module, and they could be freed once nothing needs them.