【发布时间】:2015-10-27 07:26:42
【问题描述】:
当我在 Erlang 中创建列表时,例如在 Erlang shell 中:
1> [1, 2].
据我了解,在 vm 中,此列表将表示为单链表。
这个结构是如何由 Erlang 运行时创建的?例如,它是不是这样构造的:
- 在内存中创建一个结构来保存一个终止列表的列表
- 在内存中创建一个结构来保存项目“2”,以及对空列表的引用。
- 在内存中创建一个结构来保存项目“1”和对项目“2”的引用。
我认为以下 c 和 erlang 代码是完成大部分工作的地方是否正确?
- https://github.com/erlang/otp/blob/maint/lib/stdlib/src/lists.erl
- https://github.com/erlang/otp/blob/maint/erts/emulator/beam/erl_bif_lists.c
- https://github.com/erlang/otp/blob/maint/erts/emulator/beam/erl_term.h
- https://github.com/erlang/otp/blob/maint/erts/emulator/beam/erl_term.c
erl_term.h 包含一个宏 make_list 但我还没有找到实现...
【问题讨论】:
标签: erlang