erlang - Erlang 如何实现 erlang :display actually?

标签 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).

我不知道它是如何产生显示行为的,我认为它只是抛出一个未定义的错误。 顺便说一句,我还破解了 erlang.beam 以确保字节码具有与源代码 (erlang.erl) 相同的语义。 谁能告诉我 erlang:display 实际上是怎么做的?

最佳答案

erlang:display/1 是一个 BIF(内置函数)。一些 BIF 在 Erlang 中实现,但大多数在 Erlang 虚拟机中作为原始操作实现,因为 BIF 提供操作系统接口(interface)或执行在 Erlang 中编程不可能或效率非常低的操作。

您可能想看看 A GUIDE TO THE ERLANG SOURCE , 简而言之,它说;

BIF 汇总在 bif.tab 中文件。例如:

Line 54: bif erlang:display/1

表示 display/1 BIF 映射到 bif.c 中的 display_1 方法文件。

关于erlang - Erlang 如何实现 erlang :display actually?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021081/

相关文章:

erlang - 了解 Elixir badarg 错误消息

python - True == True != False 在 Python 中是什么意思以及如何找出?

java - JVM字节码行号

ERLANG wait() 和阻塞

erlang - 带有 dict 的 gen_server vs mnesia 表 vs ets

动态/静态语言和编译器/解释器

haskell - 拥抱、Yhc 和 GHCi 之间的差异

c - 为什么 Ackermann 函数在这个用 C 语言编写的 Mouse 解释器中需要这么长时间?

java - 使用 cglib 或 javaassist 哪一个

erlang - 我如何使用 erlang api 解析标准输入?