Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

inference: (slightly) improve type stability of capturing closures #56532

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Nov 22, 2024

  1. inference: (slightly) improve type stability of capturing closures

    As an idea to improve type stability for capturing closures, such as in
    #31909, I tried this idea of propagating the closure
    object as a `PartialStruct` whose `fields` include captured variables
    of which types are (partially) known. By performing const-prop on this
    `closure::PartialStruct`, we can achieve a certain level of type
    stability.
    Specifically, I made some modifications to `abstract_eval_new` to allow
    creating `PartialStruct` even for `:new` objects that are
    `!isconcretedispatch` (since `PartialStruct` can now represent abstract
    elements). I also adjusted `const_prop_argument_heuristic` to perform
    aggressive constant propagation using such `closure::PartialStruct`.
    
    As a result, the following code now achieves type stability:
    ```julia
    julia> Base.infer_return_type((Bool,Int,)) do b, y
               x = b ? 1 : missing
               inner = y -> x + y
               return inner(y)
           end
    Any                   # master
    Union{Missing, Int64} # this commit
    ```
    
    However, this alone was not enough to fully resolve #31909.
    The call graph of `map` is extremely complex, and simply applying
    constant propagation everywhere does not achieve the type safety
    requested in the issue.
    
    Nevertheless this commit alone would still improve type stability for
    some cases, so I will go ahead and submit it as a PR.
    aviatesk committed Nov 22, 2024
    Configuration menu
    Copy the full SHA
    fb76bfe View commit details
    Browse the repository at this point in the history