Tail calls of funs not optimized?

John Högberg john.hogberg@REDACTED
Tue Mar 30 10:24:04 CEST 2021

If you're curious about how it's done you can find a quick overview under "Transformation rules" in beam_makeops.md [1]. The specific rule is in ops.tab [2].

John Högberg

[1] https://github.com/erlang/otp/blob/7f37605f8bb24519bd51b15184cc27d5583cddb7/erts/emulator/internal_doc/beam_makeops.md 
[2] https://github.com/erlang/otp/blob/7f37605f8bb24519bd51b15184cc27d5583cddb7/erts/emulator/beam/emu/ops.tab#L1034+L1040

-----Original Message-----
From: erlang-questions <erlang-questions-bounces@REDACTED> On Behalf Of Björn Gustavsson
Sent: Tuesday, March 30, 2021 10:14 AM
To: Ondřej Adamovský <oa@REDACTED>
Cc: erlang-questions <erlang-questions@REDACTED>
Subject: Re: Tail calls of funs not optimized?

On Tue, Mar 30, 2021 at 8:46 AM Ondřej Adamovský <oa@REDACTED> wrote:

> Can somebody explain to me why? Or if this still is optimized somehow, then how?

Calls to funs in the tail of a function will be rewritten by the loader to make the calls tail-recursive.

In OTP 23 or earlier, call erts_debug:df(Mod) to produce a text file named Mod.dis with the disassembled loaded instructions.

In the upcoming OTP 24 with the JIT enabled, start the runtime system like this: "erl +asmdump" The generated assembly code for all loaded modules will be listed in text files with the extension *.asm.

Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list