1、Eterm是啥?
Erlang的数据类型在C语言的层面都可以用Eterm来表示。
原文注释: Eterm: A tagged erlang term (possibly 64 bits)
此外,Eterm在sys.h中定义,可能是uint32,也可能是uint64,代码如下:
#if SIZEOF_INT == 4
typedef unsigned int Eterm;
...
#endif
#if SIZEOF_VOID_P == SIZEOF_LONG
typedef unsigned long Eterm;
...
#endif
总结:Eterm是一种打了标签的uint32/64
2、Eterm如何区分Erlang中的数据类型?
Eterm先是由自身的低2位来区分类型。换句话说,低2位代表第一层标签。
以uint32的二进制为例:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00
00就是低2位
在erl_term.h中有以下定义:
// 低2位,也叫TAG_PRIMARY,就是第一层标签
#