程序 = 物理世界过程在信息世界中的投影
Bug = 违反程序员对 “物理世界” 的假设和约束
编译器/编程语言
balance
怎么才能编写出 “正确” (符合 specification) 的程序?
今天 (被迫) 的解决方法
然后呢?
把程序需要满足的条件用 assert 表达出来。
及早检查、及早报告、及早修复
assert(nest == 1);
assert(p->parent->left == p || p->parent->right == p);
if (holding(&lk)) panic();
你知道很多变量的
#define CHECK_INT(x, cond) \
({ panic_on(!((x) cond), "int check fail: " #x " " #cond); })
#define CHECK_HEAP(ptr) \
({ panic_on(!IN_RANGE((ptr), heap)); })
变量有 “typed annotation”
CHECK_INT(waitlist->count, >= 0);
CHECK_INT(pid, < MAX_PROCS);
CHECK_HEAP(ctx->rip); CHECK_HEAP(ctx->cr3);