2015-01-19 2 views
2

Erlang 인터프리터를 구현하고 싶습니다. 최근 Erlang의 표준 라이브러리 소스 코드에 대해 읽었습니다. 내가 얼랑의 소스 코드를 찾을 수 : erlang.erl에 표시/한 것은 :Erlang은 erlang을 어떻게 구현하나요? 실제로 표시됩니까?

%% display/1 
-spec erlang:display(Term) -> true when 
     Term :: term(). 
display(_Term) -> 
    erlang:bif_error(undefined). 

나는 그것이 표시 동작을 만들기 위해 어떻게 작동하는지 모른다, 나는 단순히 어쨌든 정의되지 않은 오류가 발생 생각합니다. 그런데 바이트 코드가 소스 코드 (erlang.erl)와 동일한 의미를 가지도록 erlang.beam을 해킹했습니다. 누구나 erlang : display가 실제로 어떻게하는지 말해 줄 수 있습니까?

답변

3

erlang:display/1은 BIF (내장 기능)입니다. 일부 BIF는 Erlang에서 구현되지만 Erlang 가상 시스템에서는 BIF가 운영 체제에 대한 인터페이스를 제공하거나 Erlang에서 프로그램하기에 불가능하거나 매우 비효율적 인 작업을 수행하기 때문에 대부분은 원시 연산으로 구현됩니다.

간단히 말해 A GUIDE TO THE ERLANG SOURCE을보고 싶을 수도 있습니다.

bif.tab 파일에서 BIF가 합산됩니다. 예를 들어

Line 54: bif erlang:display/1 

display/1 BIF는 bif.c 파일의 display_1 방법에 매핑되는 것을 의미한다.

+0

대단히 고맙습니다. erlang : display/1은 실제 bif입니다.하지만 여전히 바이트 코드에서 erlang : 명령어가 call_ext_only이지만 bif1 또는 gc_bif1이 아닌 이유를 이해할 수 없습니다. add 또는 sub bif gc_bif2에 의해 적용된), 나는 call_ext_only의 의미를 매우 혼란스럽게 만든다 고 생각한다. 왜냐하면 보통 call_ext_only는 Erlang에서 구현 된 모듈의 함수에 사용해야한다고 생각하기 때문이다. –

관련 문제