Ruo*_*ang 3 erlang interpreter bytecode
我想实现一个 Erlang 解释器,最近我正在阅读 Erlang 的标准库源代码。我在 erlang.erl 中找到 erlang:display/1 的源代码是:
%% display/1
-spec erlang:display(Term) -> true when
Term :: term().
display(_Term) ->
erlang:bif_error(undefined).
Run Code Online (Sandbox Code Playgroud)
我不知道它是如何产生显示行为的,而且我认为它无论如何都会抛出一个未定义的错误。顺便说一句,我还破解了 erlang.beam 以确保字节码具有与源代码 (erlang.erl) 相同的语义。谁能告诉我 erlang:display 实际上是如何做的?
erlang:display/1是一个 BIF(内置函数)。一些 BIF 是在 Erlang 中实现的,但其中大部分是在 Erlang 虚拟机中作为原始操作实现的,因为 BIF 提供了操作系统的接口或执行在 Erlang 中编程不可能或非常低效的操作。
你可能想看看A GUIDE TO THE ERLANG SOURCE,简要地说,它说;
Line 54: bif erlang:display/1
Run Code Online (Sandbox Code Playgroud)
表示display/1BIF 映射到bif.c文件中的display_1方法。