老房子线路老化,全部推倒重建并不现实;更务实的办法,是在保留主体的同时加上保险装置。Fil-C对C/C++做的事类似:它希望让大量既有软件少改甚至不改代码,就能拦住越界读写、使用已释放内存等危险操作。内存安全,指的正是程序不能靠错误指针闯入不该访问的区域、破坏数据。
据Fil-C项目文档,它把三道防线组合起来:InvisiCaps给指针附上可访问对象和范围等权限;动态检查在运行时拦截越界、重复释放和非法写入;并发垃圾回收(GC)则自动判断内存是否仍在使用,避免程序员过早释放。编译时,基于Clang的编译器会通过FilPizlonator改写LLVM IR——也就是从源代码通往机器码的中间表示;这一步要么失败,要么产出遵守Fil-C安全规则的中间代码。项目官网称,CPython、OpenSSH、GNU Emacs和Wayland等软件已经可以运行。
边界也很明确:Fil-C兼容的是源代码,不直接兼容普通C的既有二进制接口;要获得完整保护,用户态软件栈需要用它重新编译。换句话说,这不是无成本替换,却提供了一条不必放弃C生态的务实路线。