cóż, mam nadzieję, że nie łamie to zasady spamowania. właśnie zadał pytanie, w jaki sposób kompilator Erlang implementuje wzorzec dopasowania, i mam kilka świetnych odpowiedzi, z których jedna jest skompilowany kod bajtowy (otrzymany z parametru przekazanego do c() dyrektywy):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}}
to wszystko po prostu erlangowe krotki. Spodziewałem się, że nie będzie to tajemnicza binarna rzecz. więc pytam o to tutaj pod wpływem impulsu (mogłem spojrzeć na źródło kompilatora, ale zadawanie pytań zawsze kończy się lepiej dzięki dodatkowemu wglądowi), w jaki sposób ten wynik jest tłumaczony na poziomie binarnym?
powiedzmy na przykład {test,is_tuple,{f,3},[{x,0}]}
. Zakładam, że jest to jedna instrukcja, zwana "testem" ... w każdym razie, więc ten wynik byłby zasadniczo AST języka na poziomie kodu bajtowego, z którego kodowanie binarne jest tylko tłumaczeniem 1-1? To wszystko jest tak ekscytujące, że nie miałem pojęcia, że mogę to łatwo zobaczyć, do czego kompilator erlang włamuje się.
Dzięki tak dużo
+1, ponieważ jestem również zainteresowany, a następnie z poprzedniego pytania przez Google :) –