蹦床有名字吗class?
Is there a name for a trampoline class?
我正在设计一种编程语言,我想添加的一个功能是 trampoline function 和 class
之间的交叉。也就是说,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编程语言中的隐式参数传递。
我正在设计一种编程语言,我想添加的一个功能是 trampoline function 和 class
之间的交叉。也就是说,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编程语言中的隐式参数传递。