蹦床有名字吗class?

Is there a name for a trampoline class?

我正在设计一种编程语言,我想添加的一个功能是 trampoline functionclass 之间的交叉。也就是说,class 接受类似于 generic class 接受 type 的文字。我一直在为这些命名,因为我以前没有用一种语言遇到过它们,是否有什么已经意味着这个概念或接近的东西?使用 trampoline class 是一种选择,但如果有更准确地描述这一点的东西或已经在另一种语言中使用,我更愿意使用它来减少文档中所需的行话数量。

以下伪代码来说明这个原理,以防上面的内容不清楚:

class Point<const int n> {
    private float[n] _value;
    Point() {
        for (int i = 0; i < n; i++) {
            this._value[i] = 0f;
        }
    }
    Point(Point<o> other) {
        for (int i = 0; i < min(n, o); i++) {
            this._value[i] = 0f;
        }
    }
    public static float operator [index] (optional float value = null) {
        if (value != null) { this._value[index] = value; }
        return (this._value[index]);
    }
    public static Point<max(o, p)> operator + (Point<const int o> p1, Point<const int p> p2) {
        Point<min(o, p)> small = (p1.n < p2.n ? p1 : p2);
        Point<min(o, p)> large = (p1.n < p2.n ? p2 : p1);
        Point<max(o, p)> ret = new Point<max(o, p)>(large);
        for (int i = 0; i < min(o, p); i++) { ret[i] += small[i] }
        return (ret);
    }
}

您要查找的字词是dependent types。这意味着一个类型不仅可以有类型参数(如泛型),还可以用任意值(依赖类型参数)对类型进行参数化。例如,您可以定义一个函数的签名,该函数接受一个数字 n 和 returns 一个长度为 n.

的数组

遗憾的是,依赖类型检查通常是不可判定的。这是因为在执行类型检查本身时,您必须计算依赖类型参数的可能值范围 。要对程序进行实际类型检查,您必须检查两段代码是否产生相同范围的可能值。这被称为外延函数相等性,这是众所周知的一般不可判定的部分。

现在,如果仅 compile-time 常量用作依赖类型参数,则依赖类型检查可能会变得可判定。但是,我不确定。


在下面的评论中,我们发现似乎是依赖类型参数的部分实际上不应该用于类型检查。相反,它可以被视为隐式参数。它类似于Scala编程语言中的隐式参数传递。