我正在通过Cyclone: A Safe Dialect of C for a PL class 工作。该论文的作者解释说,他们添加了一个特殊的“胖”指针,用于存储边界信息以防止缓冲区溢出。但是他们没有指定对这个指针的检查是静态的还是动态的。他们给出的例子似乎暗示程序员必须记住检查数组的大小,以检查它们是否不超过缓冲区。这似乎打开了编程错误的可能性,就像在 C 中一样。我认为 Cyclone 的整个想法是使此类错误成为不可能。语言有检查吗?是否只会让编程错误变得更难?
int strlen(const char ?s) {
int i, n;
if (!s) return 0;
n = s.size; //what if the programmer forgets to do this.. or accidentally adds an n++;
for (i = 0; i < n; i++,s++)
if (!*s) return i;
return n;
}