On Thu, Jun 2, 2016 at 8:37 AM, Cedric St-Jean <cedric.stj...@gmail.com> wrote:
> I have two very similar functions that differ in only which function they
> call
>
> function search_suspects_forward(...)
>     ...
>     searchsortedfirst(...)
> end
>
> function search_suspects_backward(...)
>     ...
>     searchsortedlast(...)
> end
>
> function foo()
>    search_suspects_forward(...)
> end
>
> Naturally, I'd like to refactor the common code
>
> function search_suspects(..., search_fun::Function)
>     ...
>     search_fun(...)
> end
>
> search_suspects_foward(...) = search_suspects(..., searchsortedfirst)
> ...
>
> But Julia doesn't specialize search_suspects based on search_fun (at least
> on 0.4), which is a missed optimization opportunity. Is there any way to do
> that? I could turn `search_fun` into a functor, but that kinda sucks (is
> there a way to do that automatically?) If I understand inlining heuristics
> correctly, I would expect that `search_suspects_forward`, being a short
> function, will be inlined into `foo`, but what I want is for
> `search_suspects` to be inlined into `search_suspects_forward`. Are there
> ways of communicating that to the compiler? Is there a @notinline?

Functor is the only way on 0.4. This is done automatically on 0.5.

Reply via email to