D是"静态的"是陈述性的还是程序性的?

Meh*_*dad 5 terminology d declarative compile-time static-if

请考虑以下代码:

static if (!is(MyStruct))
{
    struct MyStruct
    {
    }
}

static if (is(MyStruct))
{
    static assert(0);
}
Run Code Online (Sandbox Code Playgroud)

我最初的理解是,声明的顺序(在全球范围内)在D中无关紧要.

但是,在这种情况下,static ifs 的顺序决定了程序是否编译.

因此,D的编译时评估阶段是程序性特征(如C/C++),声明性特征还是其他什么?目前是什么,计划是什么(如果两者不同)?


编辑:

我刚刚意识到,问题甚至还没有结束.一,会发生什么static if用途.tupleof枚举当前模块的成员,并创建同一类型的问题?

Fee*_*ure 2

它是一个声明性功能,具有作为实现的副作用的过程属性。