Я надеюсь, что Im не нарушит правила для рассылки спама здесь. Я просто задал вопрос о том, как компилятор erlang реализует сопоставление шаблонов, и я получил несколько отличных ответов, одним из которых является скомпилированный байт-код (полученный с параметром, переданным директиве c()):
{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}}
все его простые erlang кортежи. Я ожидал какой-то загадочной бинарной вещи, не думаю. поэтому я спрашиваю об этом по импульсу здесь (я мог бы посмотреть на источник компилятора, но задавать вопросы всегда заканчивается лучше с дополнительным пониманием), как этот вывод преобразуется на двоичном уровне?
скажем {test,is_tuple,{f,3},[{x,0}]}
, например. Я предполагаю, что это одна инструкция, называемая "тест"... в любом случае, поэтому этот вывод будет по существу АСТ для языка уровня байткода, из которого двоичное кодирование является всего лишь 1-1 переводом?
Это все так увлекательно, я понятия не имел, что я могу это легко увидеть, что компилятор erlang нарушает.
Большое спасибо