代码之家  ›  专栏  ›  技术社区  ›  Mike Hordecki

为什么快速失败型程序比防御型程序短?

  •  6
  • Mike Hordecki  · 技术社区  · 6 年前

    我读过关于像Erlang这样的语言中的fail-fast编程风格是如何得到比大多数其他语言中的防御风格短得多的程序的。这对所有类型的程序都正确吗?原因是什么?

    3 回复  |  直到 14 年前
        1
  •  10
  •   I GIVE TERRIBLE ADVICE    14 年前

    快速失败程序并不一定比防御型程序短:它取决于实现和使防御代码安全所需的措施。

    在Erlang的例子中,由于声明式风格和VM如何确保为您生成错误案例,fail-fast程序通常更短。例如,在函数中:

    day(1) -> sunday;
    day(2) -> monday;
    day(3) -> tuesday;
    day(4) -> wednesday;
    day(5) -> thursday;
    day(6) -> friday;
    day(7) -> saturday;
    

    传递给函数的任何意外值都将导致一个错误,该错误可以被另一个进程(即:主管)捕获和处理。这样的错误也不会危及整个系统,也不需要将代码添加到函数本身——所有这些都是在正常执行路径之外通过预先确定的行为完成的。

    在动态语言中,failfast不是标准,您必须手动检查边界并自己抛出异常。然后您必须在本地捕获异常(顶级try。。。如果你不想整个系统崩溃的话。错误处理代码通常必须插入整个正常执行路径。

    在静态语言中,fail fast不是标准,那么代码的使用时间将在很大程度上取决于您拥有的类型系统。如果语言允许定义类型,在这些类型中,边缘情况最终由编译器为您检查,那么您通常不必在代码内部、在具有此类类型系统的语言中的不确定事件(文件不工作、意外用户输入等)之外处理此问题,许多错误会在运行前被捕获,因此您不会有那么多的防御案例。

    当错误处理无法避免时,支持fail-fast习惯用法的语言(如Erlang)将允许比不支持fail-fast习惯用法的语言(静态或非静态)更清晰的代码,这主要是因为用于特殊情况的代码没有与用于理想执行路径的代码混合在一起。

        2
  •  5
  •   dsmith    14 年前
        3
  •  -4
  •   frm    14 年前

    推荐文章