Tail calls of funs not optimized?
Wed Mar 31 18:58:42 CEST 2021
Thank you for your explanation and links. It is very interesting peek under the hood. I had no idea how much work the loader does. I completely missed this part of the documentation.
This means the generic instruction set does not really reflect what the machine actually does. Good to know. Are there more of these semantics changing transformations between generic and specific instructions?
On Tuesday, March 30, 2021 10:24:04 AM (+02:00), John Högberg wrote:
> If you're curious about how it's done you can find a quick overview under "Transformation rules" in beam_makeops.md . The specific rule is in ops.tab .
> John Högberg
>  https://github.com/erlang/otp/blob/7f37605f8bb24519bd51b15184cc27d5583cddb7/erts/emulator/internal_doc/beam_makeops.md
>  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