julia源代码中jl_value_t的含义

Pie*_*erV 5 eclipse compilation julia

我正试图找到我对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;
Run Code Online (Sandbox Code Playgroud)

在eclipse中调试源代码时,这似乎不包含任何有用的信息,但它经常被使用.我该如何解释这个结构?它包含哪些信息?

iva*_*rne 7

对我来说,似乎是一个(脏)技巧,能够在C中编写动态代码.所有盒装Julia值都可以拥有自己的内存布局,只要它们以指向某个类型的指针开头,这样C代码就可以检查在访问类型定义的任何其他字段之前的类型.

有一些便利功能可以检查一些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.