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.

Reply via email to