我正试图找到我对Julia源代码的看法,即codegen.cpp
。他们使用引用自身的结构jl_value_t
:
#define JL_DATA_TYPE \
struct _jl_value_t *type;
typedef struct _jl_value_t {
JL_DATA_TYPE
} jl_value_t;
在eclipse中调试源代码时,这似乎不包含任何有用的信息,但它经常被使用。我该如何解释这个结构?它包含哪些信息?
答案 0 :(得分:7)
对我来说,似乎是一个(脏)技巧,能够在C中编写动态代码。所有盒装Julia值都可以拥有自己的内存布局,只要它们以指向某个类型的指针开头,这样就可以了代码可以在访问类型定义的任何其他字段之前检查类型。
有一些便利功能可以检查jl_value_t*
可能指向的常见类型。 (例如。jl_is_type(v)
,jl_is_long(v)
,jl_is_symbol(v)
,jl_is_typevar(v)
,jl_is_bool(v)
)。当您知道指向的对象的类型时,可以将指针强制转换为src/julia.h
中的正确结构。