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].
Regards,
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
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list