I didn't know that existed! I mean, I guess that could at least be a starting point for something. Needs some more documentation to make it a little more SEO friendly, though ;)
On Monday, August 6, 2018 at 10:39:58 AM UTC+2, José Valim wrote: > > What do you think about Michal's decompile package: > https://github.com/michalmuskala/decompile > > You can install as an archive and use it any project from the command line > and it supports multiple formats. > > > > > > *José Valim* > www.plataformatec.com.br > Skype: jv.ptec > Founder and Director of R&D > > On Mon, Aug 6, 2018 at 9:48 AM, Devon Estes <[email protected] > <javascript:>> wrote: > >> As part of debugging an issue in Benchee recently, we needed to look at >> BEAM instructions for some code to see what exactly was being generated on >> OTP 20 and OTP 21. I also know of several other people in the community >> that need to look at the BEAM instructions from time to time, either for >> debugging purposes or for performance analysis purposes. Each of these >> people have their own little script or function stored somewhere that >> generates this code for them. I think, in the spirit of adding things to >> Elixir Core that help in the development of the language itself, it would >> be nice to have a function to take care of generating BEAM instructions in >> Elixir Core. >> >> That's why I am proposing a new function called >> `Code.beam_instructions/1`. It would accept a string of Elixir code and >> would return a human readable binary representation of the BEAM >> instructions for the given code. >> >> For reference, here's the implementation that I'm currently using to >> inspect BEAM instructions (which I got from Tobias Peiffer): >> >> ``` >> defmodule ASM do >> def for(code) do >> code = """ >> defmodule Test do >> def test do >> #{code} >> end >> end >> """ >> >> [{_, beam}] = Code.compile_string(code) >> {:ok,{_,[{:abstract_code,{_,abstract_code}}]}} = >> :beam_lib.chunks(beam,[:abstract_code]) >> {:ok, _module, asm} = :compile.forms(abstract_code, [:to_asm]) >> asm >> end >> end >> ``` >> >> and here's a link to Saša Jurić's gist on which that's based: >> https://gist.github.com/sasa1977/73274c2be733b5321ace >> >> The reason it's helpful to have in Elixir core instead of in a separate >> file somewhere is that you can drop this function in as a debugging >> statement in the code you're working on instead of having to pull out the >> code you're working on and paste it into an IEX session somewhere else. >> It's a convenience for sure, but it would help make the development >> experience nicer. >> >> -- >> 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 [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/b3e26fb3-9034-42d7-bb25-fd04d5686b6b%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/b3e26fb3-9034-42d7-bb25-fd04d5686b6b%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/25492431-9de3-47cb-9400-d2d0c87afdf7%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
