https://www.rankred.com/nasa-coding-rules/
原则1 – 简化控制流程(Simple Control Flow)
使用尽可能精简的控制流程构造编写程序 —— 不要使用setjmp
或longjmp
构造、goto
语句,以及直接或间接的recursion
。
原因:简化控制流程有助于提高代码清晰度,增强代码可验证能力。不使用递归,便不会产生循环的函数调用图,这样也可证明所有本应有界的执行实际上都是有界的。
原则2 – 为循环使用固定次数上限(Fixed Upper Bound for Loops)
所有循环必须有固定次数的上限。我们可以通过验证工具静态地证明,为循环中迭代数量所设立的上限次数未被超越。
如果无法以静态方式对循环的次数界限加以证明,则可认为未遵守该原则。
原因:为循环设置次数界限,避免使用递归,这些做法有助于预防代码失控。然而该原则无法适用于本就不应终止的迭代(例如进程调度器)。此时将沿用该原则的逆向原则:必须能够静态地证明迭代不能终止。
原则3 – 不使用动态内存分配(No Dynamic Memory Allocation)
不要在初始化完成后进行动态内存分配。
原因:诸如malloc
等内存分配机制,以及垃圾回收器通常会产生无法预知的行为,进而可能会对性能产生影响。更重要的是,还有可能因为程序员的失误造成内存错误,例