perf: Fix Core.Box closure type instability in OptimizationDIExt.jl #1133
+395
−309
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.
Summary
instantiate_functionmethods that caused type instabilityletblocks for proper variable capture and type inferenceprep_grad,prep_hess, etc. were being boxed because Julia couldn't prove they wouldn't be reassignedProblem
The original code had closure patterns like:
Julia wraps
prep_gradinCore.Boxbecause it cannot prove the variable won't be reassigned later in the scope. This causes:ANYinstead ofVector{Float64}Solution
Use
letblocks to create new bindings:Verification
Before fix (
@code_warntypeshowed):After fix (
@code_warntypeshows):Benchmark improvement:
Testing
cc @ChrisRackauckas
🤖 Generated with Claude Code