Looking at this PR <https://github.com/beam-telemetry/telemetry/pull/43> (when 
the recommendation to use external functions was added to :telemetry)

... when anonymous functions are copied into the process heap from ETS, a 
global reference counter is incremented ...


And from this comment 
<https://github.com/beam-telemetry/telemetry/pull/43#issuecomment-840179783>
:

With the global capture, the function isn't copied and therefore doesn't 
need to be garbage collected when invoked.


On Sunday, March 24, 2024 at 6:13:14 PM UTC-7 sabi...@gmail.com wrote:

> This is an interesting topic.
>
> I tried to benchmark these and sometimes local functions indeed show up as 
> slightly slower, but it is typically in the 0~2% range even for this 
> contrived example doing basically nothing. So I'm not sure if it is worth 
> highlighting the difference:
>
> https://github.com/sabiwara/elixir_benches/commit/9b721f3b19f8af9d9d63a30618cdafeaa6367883
>
> Checking the S file shows that external functions are just literals while 
> local functions are calling make_fun3:
>
> https://github.com/sabiwara/elixir_benches/commit/9b721f3b19f8af9d9d63a30618cdafeaa6367883#diff-3a3b83d8acad1d3b6faed87ba471843f4424b22c26c179bf1d86a87a880e8223R74-R93
>
> Even though, as far as I know, recent versions of Erlang 
> have optimizations to make sure the overhead of lambdas like this one 
> remains very small: https://github.com/erlang/otp/pull/6963.
>
>
> Le dim. 24 mars 2024 à 01:50, 'Rudolf Manusadzhian' via elixir-lang-core <
> elixir-l...@googlegroups.com> a écrit :
>
>> Hi there! Might be a naive question.
>>
>> Why don't we treat all local captures as external? Like at compile time, 
>> if it's possible, we could treat *&fun/0* as *&__MODULE__.fun/0* and get 
>> a free performance boost, if in the end they behave same.
>>
>> I was going thought the docs for :telemetry.attach/4 
>> <https://hexdocs.pm/telemetry/1.2.1/telemetry.html#attach/4> and the 
>> suggestion to avoid using *local* captures raise that thought.
>>
>> If that's not possible, does it make sense to add a note in the docs 
>> Kernel.SpecialForms.&/1 
>> # Capture 
>> <https://hexdocs.pm/elixir/1.16.2/Kernel.SpecialForms.html#&/1-capture> 
>> about 
>> the performance implications of local capture vs external or a 
>> recommendation?
>>
>> Thanks.
>>
>> -- 
>> 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 elixir-lang-co...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/c7065947-b48d-43e6-a450-387f6d4f1846n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/c7065947-b48d-43e6-a450-387f6d4f1846n%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 elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/7888d9f2-6aba-4c62-b70b-19581305c15bn%40googlegroups.com.

Reply via email to