2
我正在通過Cyclone: A Safe Dialect of C爲PL類工作。該論文的作者解釋說,他們添加了一個特殊的「胖」指針,用於存儲邊界信息以防止緩衝區溢出。但是他們沒有指定對這個指針的檢查是靜態的還是動態的。他們給出的例子似乎意味着程序員必須記得檢查數組的大小,以檢查它們是否不超過緩衝區。這似乎開闢了編程錯誤的可能性,就像在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;
}
對於靜態關於C的推理非常困難(Pascal Cuoq,他解答了你的問題,構建了與大多數相比表現相當好的靜態分析工具)。而對於那些靜態分析工具無法檢查的事情,您唯一的希望就是在程序可能犯錯的時刻進行運行時檢查。這裏是另一篇關於動態分析的論文,我認爲它比Cyclone更進一步:http://www.computer.org/csdl/proceedings/scam/2011/4347/00/4347a165-abs.html。本文使用由多個部分表示的「胖」指針,以便不會由於錯誤的大小而破壞C數據結構。 –