beh spero di non aver infranto alcune regole di spamming qui con questo. ho solo chiesto una domanda su come il compilatore erlang implementa il pattern matching, e ho avuto alcuni grandi risposte, uno dei quali è il bytecode compilato (ottenuto con un parametro passato alla direttiva c()):erlang BEAM bytecode
{function, match, 1, 2}.
{label,1}.
{func_info,{atom,match},{atom,match},1}.
{label,2}.
{test,is_tuple,{f,3},[{x,0}]}.
{test,test_arity,{f,3},[{x,0},2]}.
{get_tuple_element,{x,0},0,{x,1}}.
{test,is_eq_exact,{f,3},[{x,1},{atom,a}]}.
return.
{label,3}.
{badmatch,{x,0}}
è tutto semplicemente tuple di erlang. Mi aspettavo qualche cosa binaria criptica, suppongo di no. quindi, sto chiedendo questo su impulso qui (potrei guardare la fonte del compilatore ma fare domande finisce sempre meglio con una visione extra), come viene tradotto questo output a livello binario?
dire {test,is_tuple,{f,3},[{x,0}]}
per esempio. Im supponendo che questa sia un'istruzione, chiamata 'test' ... comunque, quindi questo output sarebbe essenzialmente l'AST del linguaggio di livello bytecode, da cui la codifica binaria è solo una traduzione 1-1? Questo è tutto così eccitante, non avevo idea di poter vedere facilmente in che modo il compilatore di erlang rompe le cose.
grazie tanto
+1 visto che sono anche interessati, e seguii dalla tua domanda precedente tramite Google :) –