Unfortunately we cannot remove those, precisely because they may be invoked
when passed to another function.

On Fri, Oct 9, 2020 at 21:44 Victor Rodrigues <[email protected]> wrote:

> Hi, I’m working towards reducing the recompilation dependencies on a
> project with hundreds of modules.
>
> Digging through this, I’ve stumbled into something that I didn’t expect:
>
> When a function returns modules as values, that creates a runtime
> dependency to these modules.
>
> Taking the example below:
>
> ```elixir
> defmodule ImplSelector do
>   def resolve(impl_type) do
>     case impl_type do
>       :foo ->
>         ImplA
>
>       :bar ->
>         ImplB
>
>       :omg ->
>         :"Elixir.ImplC"
>
>       :wut ->
>         NonExistingMod
>     end
>   end
> end
> ```
>
> ```shell
> ➜ mix xref graph --source lib/impl_selector.ex
> lib/impl_selector.ex
> ├── lib/impl_a.ex
> │   └── lib/impl_behaviour.ex (compile)
> └── lib/impl_b.ex
>     └── lib/impl_behaviour.ex (compile)
> ```
>
> It creates runtime deps from ImplSelector to Impls A and B. C is left
> because I’ve used :”Elixir.ImplC”, and as a non existing module doesn’t
> raise any warnings (just an atom after all right), I wonder if we could
> remove these dependencies too, or if it’s really desired.
>
> We rely a lot on behaviours, and figuring these from instance
> configurations. I think that would have a good impact on the dependency
> graph overall, if it’s something that could go.
>
> Thanks!
>
> ----
>
> A bit off-topic, but wanted to share that when I started this saga this
> week, Elixir 1.11 only reduced ~10% the modules on recompilation, but now,
> as I’ve fixed a few important dependencies (still a lot to go), I can see
> already ~50% less modules recompiling in 1.11 as compared with same code in
> 1.10.4! 🌈
>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/216ce42b-9fe0-4e28-a5b9-acdde5414c41n%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/216ce42b-9fe0-4e28-a5b9-acdde5414c41n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LyDrBhabkpvj27U%3DJvEc%2BxKtJ08VbETqVR%2BJYSgrgFug%40mail.gmail.com.

Reply via email to