well Tôi hy vọng Im không vi phạm một số quy tắc gửi thư rác ở đây với điều này. Tôi chỉ hỏi một câu hỏi về cách thức biên dịch erlang thực hiện phù hợp với mô hình, và tôi đã nhận một số phản ứng tuyệt vời, một trong số đó là bytecode biên dịch (thu được với một tham số truyền cho các chỉ thị 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}}
tất cả mọi thứ đều đơn giản. Tôi đã mong đợi một số thingy nhị phân khó hiểu, đoán không. Vì vậy, Im hỏi điều này trên xung ở đây (tôi có thể nhìn vào nguồn trình biên dịch nhưng đặt câu hỏi luôn luôn kết thúc tốt hơn với cái nhìn sâu sắc hơn), làm thế nào là đầu ra này dịch ở mức độ nhị phân? Ví dụ:
nói {test,is_tuple,{f,3},[{x,0}]}
. Im giả sử đây là một lệnh, được gọi là 'test' ... anyway, vì vậy đầu ra này về cơ bản sẽ là AST của ngôn ngữ cấp bytecode, từ đó mã hóa nhị phân chỉ là một bản dịch 1-1? Điều này thật thú vị, tôi không có ý tưởng rằng tôi có thể dễ dàng thấy những gì trình biên dịch erlang phá vỡ mọi thứ.
cảm ơn rất nhiều
+1 vì tôi cũng quan tâm và theo dõi câu hỏi trước của bạn qua Google :) –